使用flex/bison进行多行注释声明
Multiline comment declaration with flex/bison
我今天有一个问题与我的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++注释和块注释的bison定义中使用的解决方案:
%x COMMENT
"//".*n ;
"/*" BEGIN(COMMENT);
<COMMENT>"/*" printf("%s%dn", "Warning: multiple comments opened at line: ", yylineno);
<COMMENT>"*/" BEGIN(INITIAL);
<COMMENT>"EOF" yyerror("Reached end of file while scanning comment");
<COMMENT>.|"n" ;
/*DECLARING A SPECIFIC STATE FOR THE BLOCK COMMENT*/
%x BLOCK_COMMENT
%%
/* { // BEGINING OF A BLOCK COMMENT: ENTERS INTO 'BLOCK_COMMENT' STATE
BEGIN(BLOCK_COMMENT);
blockcomment_line_start = line;
blockcomment_col_start = frcol;
strncat(block_comment, yytext, sizeof(block_comment));
}
<BLOCK_COMMENT>*/ { // END OF BLOCK COMMENT
if(strlen(block_comment)+strlen(yytext) >= BLOCK_COMMENT_BUFFER-10){ //ADDS "(...)" AT THE END OF THE STRING IN CASE IT HAS BEEN TRUNCATED
block_comment[1013] = ' ';
strcat(block_comment," (...) ");
}
strncat(block_comment, yytext, sizeof(block_comment));
printf("@(%.3d,%.3d)tBLOCK COMMENTt- %sn", blockcomment_line_start, blockcomment_col_start, block_comment);
BEGIN(INITIAL); //COMES BACK TO THE INITIAL STATE
}
<BLOCK_COMMENT>n {
line++; // STILL HAS TO INCREMENT THE LINE NUMBER WHEN THERE'S A LINE BREAK INSIDE THE COMMENT
//strcat(block_comment, "\n");
strncat(block_comment, "\n", sizeof(block_comment));
}
<BLOCK_COMMENT>. { // IGNORE ALL OTHER CHARACTERS WHILE IN 'BLOCK_COMMENT' STATE
//strcat(block_comment, yytext);
strncat(block_comment, yytext, sizeof(block_comment));
}
<BLOCK_COMMENT><<EOF>> {
printf("ERROR! THE BLOCK COMMENT OPENED IN @(%d,%d) HASN'T BEEN CLOSED! tn", blockcomment_line_start, blockcomment_col_start);
return;
}
相关文章:
- VSCode 中带有 C/C++ 扩展名的多行注释缩进错误
- 如何设置叮当格式的注释编译指示,以免触及多行doxygen注释?
- 如何阻止 ReSharper 在 C++ 中格式化多行注释
- C++,在多行代码段中注释
- QSyntax荧光笔和多行注释
- gcc多行注释警告
- visualstudio继续多行注释
- 宏和多行注释
- 变量后的Doxygen多行注释
- VIM语法折叠:禁用折叠多行注释
- 使用RegEx剥离C++中的多行注释
- 用c++计算多行注释之间的所有行数
- 如何在氧代码示例中插入多行注释
- c++单行注释后面跟着多行注释中的变换
- 为什么在c++中注释多行注释不一致?
- 使用反斜杠的多行注释
- 多行注释和新行
- Clang Format多行函数声明参数问题
- c++正则表达式搜索多行注释(在/* */之间)
- 使用flex/bison进行多行注释声明