Я пытаюсь написать грамматику парсера и в настоящее время имею следующие произведения для грамматики 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
Но что заставляет мое Grammar быть неоднозначным. Как я могу исправить эту двусмысленность?
'A :: = (A)' вряд ли будет правильным, даже если вы на самом деле написали «A :: =» («A») ». Выражение в скобках является основным ('C' в вашей грамматике). – rici
Как бы я разобрал что-то вроде ABC# (DEF # 123), если мое выраженное в скобках выражение C? – rlhh