Что означает это обозначение ANLTR4?
У меня есть вопрос, касающийся обозначения грамматики логотипа UCB, которую я нашел, сгенерированной для ANTLR4. Есть некоторые обозначения, которые нельзя разобрать и подумать о том, чтобы спросить. Если кто-то захочет уточнить, буду благодарен. Вот обозначения, которые я не совсем понимаю:
WORD
: {listDepth > 0}? ~[ \t\r\n\[\];] ( ~[ \t\r\n\];~] | LINE_CONTINUATION | '\\' ( [ \t\[\]();~] | LINE_BREAK ) )*
| {arrayDepth > 0}? ~[ \t\r\n{};] ( ~[ \t\r\n};~] | LINE_CONTINUATION | '\\' ( [ \t{}();~] | LINE_BREAK ) )*;
array
: '{' ( ~( '{' | '}' ) | array )* '}';
NAME
: ~[-+*/=<> \t\r\n\[\]()":{}] ( ~[-+*/=<> \t\r\n\[\](){}] | LINE_CONTINUATION | '\\' [-+*/=<> \t\r\n\[\]();~{}] )*;
Я предполагаю, что массив означает, что он может начинаться с {и иметь произвольное количество уровней, но должен заканчиваться на}. Я так понимаю, что другие являются какой-то формой регулярных выражений? Насколько мне известно, регулярные выражения различны для разных языков программирования.
Я правильно понял?
1 ответ
Antlr не делает регулярных выражений. Он реализует некоторые из тех же операторов, но на этом сходство в основном заканчивается.
Первые подусловия ({listDepth > 0}?
) в WORD
Правило - это предикаты - никакого отношения к миру регулярных выражений. Они определены в документации Antlr и подробно объяснены в TDAR.
Ваше понимание array
Правило по сути правильно.