私はパーサー文法を書こうとしていますが、現在、(Antlr で) LL 文法の次のプロダクションを持っています。右結合である「#」で区切られた 1 つ以上 (数字または文字列) を解析しようとしています。現時点で 1 つだけではなく、「#」で区切られた 1 つ以上の文字列を解析できるように、プロダクションを変更するにはどうすればよいですか?
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
しかし、それは私の文法があいまいになります。このあいまいさをどのように修正しますか?