2015-07-14 3 views
2

Проблема

Я только начал использовать ANTLR (4.3 для .NET) и после отладки довольно долгое время, я должен сдаться. Я получаю NoViableAltException в последних 4 строках - но я действительно не знаю, как это исправить ...NoViableAltException в Antlr4.3 грамматике

Итак, у вас есть какие-нибудь намеки на меня?

Поведение Предполагаемого

Сформированный анализатор должен разобрать строки как Hello {User.Name}! или Hello {{ {User.Name("}")} }}! где User.Name и User.Name("}"), как ожидаются, вывести из expression правил и всего остального от plainString. Тем не менее, я еще не был в состоянии проверить это ...

Грамматика

grammar PatternString; 

@namespace{PatternStringParser.AntlrGenerated} 

patternString:   (plainString | expressionString)+; 

plainString:    (PLAINSTRINGLITERAL | '""' | '{{' | '}}')+; 

expressionString:  '{' expression* '}'; 

expression:    BALANCEDSTRINGLITERAL+ 
          | '(' expression ')' 
          | '[' expression ']' 
          | '{' expression '}' 
          | '"' string '"' 
          | '\'' character '\''; 

string:     (STRINGLITERAL | '\\"')+; 

character:    (CHARACTERLITERAL | '\'')+; 

PLAINSTRINGLITERAL:  ~[\"\{\}];  // <= NoViableAltException 
BALANCEDSTRINGLITERAL: ~[\"\{\(\[\']; // <= NoViableAltException 
CHARACTERLITERAL:  ~[\'];   // <= NoViableAltException 
STRINGLITERAL:   ~[\"];   // <= NoViableAltException 

ответ

1

Для анализа такого рода проблемы, сбросить маркер потока, чтобы увидеть, что лексический на самом деле делает. Чтобы сбросить токены, см. Это answer - это на Java, но реализация C# должна быть очень похожей.

+0

Уже исправлено это случайным образом, но спасибо за ваш ответ, который облегчит его в следующий раз! – Markus

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