Как управлять переключением Antlr
режимов лексера из действий парсера? Я расширил сгенерированные парсер и лексер, чтобы я мог вызывать pushMode
и popMode
из синтаксического анализатора, который, в свою очередь, вызывает подходящие pushMode
и popMode
лексера, но безрезультатно. Могу ли я что-нибудь сделать, чтобы активировать эту функцию?
Переключение режимов лексера Antlr из парсера
comment
Я подозреваю, что к тому времени, когда сработают правила синтаксического анализатора, лексер уже приступил к работе, создавая токены после точки, в которой вы хотите, чтобы произошло переключение ... Можно ли определить точки переключения, используя только правила лексера? Если нет, возможно, есть способ повторно запустить поток токенов лексера и отбросить токены, которым вы не доверяете.
- person Darien   schedule 25.09.2013
Ответы (1)
Ваш лексер должен быть написан таким образом, чтобы входные данные могли быть полностью токенизированы еще до того, как синтаксический анализатор будет создан. Несмотря на то, что поток токенов заполняется лениво, ANTLR 4 не гарантирует правильного анализа ввода, если ваш лексер не соответствует этому требованию.
person
Sam Harwell
schedule
25.09.2013