我正在尝试编写一个解析器语法,并且目前有以下 LL 语法(在 Antlr 中)的产生,并且我正在尝试解析一个或多个(数字或字符串),它由正确的关联的“#”分隔。如何修改产品,以便它可以解析一个或多个用“#”分隔的字符串,而不仅仅是一个?
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
但这导致我的语法模棱两可。我将如何解决这种歧义?