我有以下的野牛語法片段:在野牛,我怎麼能保留一個非終端的結合?
binary_op: BINARY_OP { ... } | '|' %prec BINARY_OP { ... } ; non_keyword_expr: non_keyword_expr binary_op non_keyword_expr %prec BINARY_SEND_PREC %dprec 2 { ... } ;
|
在我的語法已經超載的意思,所以我不能只是從我的詞法分析器返回它的令牌BINARY_OP。這可能是取決於上下文的不同標記。
如果我用這個作爲我的輸入:
4 OR 5 OR 6
我可以成功地解析它(或識別爲詞法分析器BINARY_OP令牌)。
但是,如果我的輸入是這樣的:
4 | 5 | 6
我得到一個模棱兩可的語法錯誤。 (該|
沒有被確認爲左結合)
我怎樣才能得到binary_op是內non_keyword_expr左結合的?關於binary_op的第二條規則的%prec
聲明似乎沒有效果。
編輯:這是一個GLR分析器
感謝您的答案。你在說'|'嗎?在我的語法中不是終端?混淆爲什麼它可以正常工作「OR」(令牌BINARY_OP)而不是'|' (隱含的令牌'|')BINARY_OP的關聯性似乎成功連接到非終端binary_op ... – nielsbot
@nielsbot:對不起,我不是很清楚。我會編輯我的答案。但有一個問題:你使用GLR解析器嗎? (如果是這樣,你應該在你的問題中提及它,因爲它既不明顯也不共同。) – rici
是的,它是GLR。我的意思是補充,但忘了... – nielsbot