簡體   English   中英

如何獲得Lemon解析器以在換行符處終止自身?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM