2013-05-10 74 views
0

我必須爲c類語言創建一個詞法和語法分析器。在這種語言中,我們將其定義爲「在符號之後存在的所有東西」,直到行結束爲止。每次我的編譯器到達「/」它仍然給我語法錯誤Bison在Flex中定義註釋

%% 

[ \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(); } 

%% 

回答

0

模式您的意見大概應該是這樣的

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

你的格局預計.*在輸入的文本出現,因爲它是雙引號內。考慮到你增加了行號,你可能也希望把新行匹配成註釋的一部分。