c++ - 使用 flex/bison 的多行注释声明

标签 c++ comments bison interpreted-language

今天我的 flex/bison 脚本有问题。它不检测多行注释。

%x COMMENT_MULTI
#\[                     yy_push_state(COMMENT_MULTI);

<COMMENT_MULTI>"]#"     yy_pop_state();
<COMMENT_MULTI>"\n"     {
                            yylloc->lines(yyleng);
                            yylloc->step();
                        }
<COMMENT_MULTI>.?

你能帮帮我吗?

最佳答案

这是我在 C++ 注释和 block 注释的 bison 定义中最终使用的解决方案:

%x COMMENT

"//".*\n                            ;                                                                                                                                                                 

"/*"                                BEGIN(COMMENT);                                                                                                                                                   
<COMMENT>"/*"                       printf("%s%d\n", "Warning: multiple comments opened at line: ", yylineno);                                                                                        
<COMMENT>"*/"                       BEGIN(INITIAL);                                                                                                                                                   
<COMMENT>"EOF"                      yyerror("Reached end of file while scanning comment");                                                                                                            
<COMMENT>.|"\n"                     ;

关于c++ - 使用 flex/bison 的多行注释声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14304063/

相关文章:

c - $n( Bison 的规则)返回上一个标记读取的值

parsing - 使用 BISON 等解析器生成器,同时仍然优雅地处理错误输入

c++ - 如何强制编译器使用聚合初始化而不是构造函数

c++ - 如何在函数内部定义仿函数

c++ - 将派生类传递给基函数

MySQL 在这里不支持单行注释。会是什么原因呢?

vba - Worksheet_change : entire column value deleted, 在此操作之前识别非空单元格

c++ - VS 2010下编译C代码

c# - block 注释被字符串中的 "*/"关闭

c++ - 如何从 C 风格转向 C++ 风格的 flex 解析器