Переключение режимов лексера Antlr из парсера

Как управлять переключением Antlr режимов лексера из действий парсера? Я расширил сгенерированные парсер и лексер, чтобы я мог вызывать pushMode и popMode из синтаксического анализатора, который, в свою очередь, вызывает подходящие pushMode и popMode лексера, но безрезультатно. Могу ли я что-нибудь сделать, чтобы активировать эту функцию?


person Angie    schedule 25.09.2013    source источник
comment
Я подозреваю, что к тому времени, когда сработают правила синтаксического анализатора, лексер уже приступил к работе, создавая токены после точки, в которой вы хотите, чтобы произошло переключение ... Можно ли определить точки переключения, используя только правила лексера? Если нет, возможно, есть способ повторно запустить поток токенов лексера и отбросить токены, которым вы не доверяете.   -  person Darien    schedule 25.09.2013


Ответы (1)


Ваш лексер должен быть написан таким образом, чтобы входные данные могли быть полностью токенизированы еще до того, как синтаксический анализатор будет создан. Несмотря на то, что поток токенов заполняется лениво, ANTLR 4 не гарантирует правильного анализа ввода, если ваш лексер не соответствует этому требованию.

person Sam Harwell    schedule 25.09.2013