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