Bison在Flex中定义注释
我必须为类c语言创建一个词法和语法分析器。在这种语言中,我们将注释定义为“符号//之后直到行尾的所有内容”。每次我的编译器到达“/”时,它仍然会给我语法错误Bison在Flex中定义注释,bison,flex-lexer,Bison,Flex Lexer,我必须为类c语言创建一个词法和语法分析器。在这种语言中,我们将注释定义为“符号//之后直到行尾的所有内容”。每次我的编译器到达“/”时,它仍然会给我语法错误 %% [ \t] { } [0-9]+ { SAVE_TOKEN; return TINTEGER; } "main_loop" { return TOKEN(TMAIN); } "{" { retur
%%
[ \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(); }
%%
“/.*{g_LineNumber++}
[a-zA-Z!]+{std::cout您的评论模式可能如下所示
"//".*"\n" {g_LineNumber++;}
您的模式希望*
在输入中按字面意思出现,因为它位于双引号内。考虑到您增加了行号,您可能还希望将新行作为注释的一部分进行匹配