По Antlr подскажите...
От: Кондраций Россия  
Дата: 02.12.15 20:18
Оценка:
Пишу парсер некоего самопального конфига. В конфиге среди прочего встречаются в вещи типа filter = "тут какая-то строка". Соответственно в грамматике это выглядит примерно так id '=' quotedString.
Но внезапно возникла необходимость включить в конфиг (и соответственно — парсить) некие простейшие выражения типа таких QQ > 1, AA < 10, ZZ = "это строка". Нарисовал правила типа такого (пишу по памяти):
Int: (0..9)+;
Operation: '='|'<'|'>'|''<=|'>='|'<>';
expr: token Operation (Int | quotedString) ;

Ругается на '='. Если для обозначения операции равенства использовать '==', то всё работает.
Лексер и парсер описываются в одном файле грамматики.

Вопрос первый: можно ли как-то использовать '=', а не '=='. Можно конечно парсером выдирать всё выражения и разбирать далее руками, но не хочется.

Вопрос второй на понимание (может смешной, но я в грамматиках лох): описанное выше проиходит от того, что ANTLR описывает контекстно-свободные грамматики? Т.е. если символ/токен где-то используется для одного действия (у меня для обозначения присвоения), то в другом значении его использовать нельзя. А была-бы контекстно связанная, то значение символа/токена могло бы зависть бы от контекста, и тогда бы разборе выражения был бы (можно было бы сделать) другой контекс со своим значением символа '='. Так?
Сообщение заговорено потомственным колдуном, целителем и магом в девятом поколении!
Модерирование или минусование сообщения ведет к половому бессилию, венерическим заболеваниям, венцу безбрачия и диарее!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.