Не могу понять значение этой круглой скобки. Писать его не обязательно, но иногда может выдавать ошибку левой рекурсии. Где мы должны использовать его в правилах грамматики?
Antlr странный синтаксис круглых скобок
comment
Это называется группировка. Когда вы пишете последовательность символов, заключенных в круглые скобки (круглые скобки), эта последовательность рассматривается как одна группа, которая встречается до или после других символов правила. Например S : а (b | c) * d; может обозначать язык {ad, abd, acd, abd, accd, abcd, acbd и т. д.}. Вы всегда можете написать эквивалентную грамматику BNF для грамматики EBNF, и вы бы сделали это, если у вас есть проблемы с Antlr4, принимающим вашу грамматику, что бывает нечасто.
- person kaby76   schedule 04.03.2021
Ответы (1)
Не обязательно его писать,
Это правильно, не надо. Просто удалите их.
но иногда это может привести к ошибке левой рекурсии.
Если это действительно так, вы можете открыть вопрос здесь: https://github.com/antlr/antlr4/issues
РЕДАКТИРОВАТЬ
Увидев комментарий kaby76, просто чтобы убедиться: вы не можете просто удалить их из файла грамматики в любом случае. Их можно удалить из вашего примера правила.
При использовании следующим образом:
rule
: ID '=' ( NUMBER | STRING ) // match either `ID '=' NUMBER`
// or `ID '=' STRING`
;
их нельзя удалить, потому что их удаление приведет к:
rule
: ID '=' NUMBER | STRING // match either `ID '=' NUMBER`
// or `STRING`
;
Или с повторением:
rule
: ( ID STRING )+ // match: `ID STRING ID STRING ID STRING ...`
;
и это:
rule
: ID STRING+ // match: `ID STRING STRING STRING ...`
;
person
Bart Kiers
schedule
03.03.2021