我想寫一個語法分析器,目前有一個LL語法(在Antlr中)下面的產品,我試圖解析一個或多個(數字或字符串)是分離的由一個「#」即是正確的聯想。我該如何修改這些作品,以便它可以解析由「#」分隔的一個或多個字符串,而不僅僅是一個?對於這個語法語言LL語法與關聯性和自我指涉產品
A ::= B
| Number
| String
B ::= C "->" A
C ::= Number
| String
例子:
ABC# 123
123 # ABC
ABC# DEF # 123
ABC# DEF # (123 # 456)
ABC# (DEF # 123) # 456
我嘗試使用EBNF形式
A ::= B
| Number
| String
| "(" A ")"
B ::= C ("#" A)?
C ::= Number
| String
但引起我的語法是不明確的。我將如何解決這個模糊問題?
即使您實際編寫了A :: =「(A」)「',A :: =(A)'也不可能是正確的。加括號的表達式是主要的(語法中的「C」)。 – rici
如果我的括號表達式是C,我將如何解析ABC#(DEF#123)這樣的東西? – rlhh