Bison在Flex中定义评论

时间:2013-05-10 07:56:30

标签: bison flex-lexer

我必须为类似c的语言创建一个词法和语法分析器。在这种语言中,我们将注释定义为“在符号之后存在的所有内容//直到行尾”。每次我的编译器到达“/”时它仍然会给我语法错误

%%

[ \t]                   { } 
[0-9]+                  { SAVE_TOKEN; return TINTEGER; }

"main_loop"             { return TOKEN(TMAIN); }
"{"                     { return TOKEN(TLBRACE); }
"}"                     { return TOKEN(TRBRACE); }
";"                     { return TOKEN(TSEMI); }
"("                     { return TOKEN(TLPAREN); }
")"                     { return TOKEN(TRPAREN); }

"rotate"                { return TOKEN(TROTATE); }
"forward"               { return TOKEN(TFORWARD); }

%{
/* Do not add any of your own tokens below this line!!!! */
%}

"\n"                     { g_LineNumber++; }

这是给我语法错误的部分。

"//.*"                      {g_LineNumber++; }


[a-zA-Z_]+          { std::cout << "ERROR: Unknown token '" << yytext << "' on line " << g_LineNumber << std::endl; yyterminate(); }

.                   { std::cout << "ERROR: Unknown token '" << yytext << "' on line " << g_LineNumber << std::endl; yyterminate(); }

%%

1 个答案:

答案 0 :(得分:0)

您的评论模式应该如下所示

"//".*"\n"  {g_LineNumber++;}

您的模式期望.*在输入中字面上出现,因为它在双引号内。考虑到您增加了行号,您可能还希望将新行匹配作为注释的一部分。