2016-10-13 5 views
0

У меня есть простое правило, как так:ANTLR - Период характер не сопоставляется при совпадении с "ничего"

ifClause: 'if' '(' condition ')' '{' (structField)+ '}' ; 
condition: .*?; 

Это работает для синтаксического анализа:

if (abc == def) { 
    <something> 
} 

Но ошибки вне на:

if (abc.xyz == def) { 
    <something> 
} 

с погрешностью:

line NN:MM token recognition error at: '.' 

Почему бы не потреблять '.' характер при сопоставлении .*?

I am using Antlr 4.5.3 and Python output.

ответ

1

Во-первых, правило синтаксического анализа

condition: .*?; 

потребляет жетоны, полученные лексером, не сырых символов.

Во-вторых, ошибки распознавания токенов создаются лексером, когда, как здесь, символ не может быть сопоставлен с помощью правила lexer (по умолчанию лексер будет пропускать непризнанный символ, создавая ошибку и не соответствующий токен для использование парсером и продолжение соответствия входному потоку).

Чтобы исправить, убедитесь, что '.' будет соответствовать правилу лексера.

+0

Я изменил «условие» на «COND:. *?», И теперь я сталкиваюсь с различными проблемами двусмысленности, которые не связаны с вопросом. Спасибо! – shikhanshu

 Смежные вопросы

  • Нет связанных вопросов^_^