Я смог добавить поддержку грамматики моего парсера для чередующихся символов (например, ababa
или baba
), следуя вместе с this question.Параметр грамматики разбора и повторения
Теперь я хочу расширить это, разрешив повторы символов.
Например, я хотел бы иметь возможность поддерживать abaaabab
и aababaaa
. В моем частном случае разрешается повторять только a
, но также полезно использовать решение, которое допускает повторение b
.
Учитывая правила от другого вопроса:
expr ::= A | B
A ::= "a" B | "a"
B ::= "b" A | "b"
... Я попытался распространить его на поддержку повторы, например, так:
expr ::= A | B
# support 1 or more "a"
A_one_or_more = A_one_or_more "a" | "a"
A ::= A_one_or_more B | A_one_or_more
B ::= "b" A | "b"
... но грамматика неоднозначна. Возможно ли, чтобы это стало однозначным, и если бы кто-нибудь мог мне помочь устранить его?
Я использую lemon parser, который является парсером LALR (1).
Благодарим вас за подробный ответ. Это абсолютно разумно, однако, к сожалению, моих возможностей в этой области не хватает, поэтому мне сложно решить мою двусмысленность. Я буду разбираться в своей конкретной проблеме и надеюсь, что смогу ее решить. Еще раз спасибо! – JesseBuesking
@JesseBuesking: Вы можете получить лучший ответ, если зададите более точный вопрос. Из вашего комментария к другому ответу, я понимаю, что ваша грамматика на самом деле не похожа на ту, о которой вы просите. Тем не менее, я согласен с тем, что ваш лучший выбор состоит в том, чтобы нарисовать некоторые синтаксические диаграммы, чтобы прояснить ваше мышление. – rici