[英]How do I get a Lemon parser to terminate itself on a newline?
遵循這個老教程 ,我試圖獲得一個檸檬分析器來自動終止對EOL
令牌的分析。 解析器的相關部分如下所示:
start ::= in .
in ::= .
in ::= in commandList EOL .
{
printf("start ::= commandList .\n");
printf("> ");
}
這是我使用Flex掃描的令牌執行解析器的方式 :
int lexCode;
do {
lexCode = yylex(scanner);
Parse(shellParser, lexCode, yyget_text(scanner));
// XXX This line should not be necessary; EOL should automatically
// terminate parsing. :-(
if (lexCode == EOL) Parse(shellParser, 0, NULL);
} while (lexCode > 0);
我想不再需要在這里檢查EOL
令牌,而只需讓解析器確定完成的時間即可。 我怎么做?
謝謝!
用EBNF術語,您對in
的定義是
in ::= (commandList EOL)*
允許多個EOL。 你想要的是
in ::= commandList* EOL
哪個應該解決
start ::= in EOL .
in ::= .
in ::= in commandList .
注意,這不允許完全為空的輸入(甚至不包括EOL)。 如果有問題,您可以根據需要進行調整。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.