簡體   English   中英

野牛匹配錯誤的令牌

[英]Bison matching wrong tokens

在PLY遇到問題時,我嘗試將相同的語法片段改寫為bison,並遇到了類似的問題。 這表明我可能做錯了什么。

語法片段的符號表示如下所示:

document -> fragment?
fragment -> { \n line* \n fragment? }
line     -> [^\n]+ \n

相關的lex行:

[{}]   return *yytext;
[^\n]+ return ANYTHING;
\n     return EOL;

相關的野牛線:

multiline: '{' EOL lines EOL multiline '}'
         |
         ;

lines: lines ANYTHING EOL
     |
     ;

語法是確定性的,因為我所知道的甚至應該是LALR(1)(不過,實際上並沒有嘗試構建表格)。 "{\\n\\n}"的文檔可以解析,但是嵌套multiline元素的文檔(例如"{\\n\\n{\\n\\n}}" )則不能,詞法分析器會看到最后一個"}}"作為記號"ANYTHING"而不是兩個'}'

我究竟做錯了什么?

[{}]   return *yytext;
[^{}\n]+ return ANYTHING;
\n     return EOL;

Lex貪婪:如果兩個模式匹配當前輸入,則最長的匹配獲勝。 在原始lex片段中, [^\\n]+模式捕獲其中帶有{}行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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