2010-01-27 2 views
0

Я только начинаю с Antlr, поэтому, пожалуйста, простите здесь вопрос noob. Я потерялся. Любая помощь приветствуется.Antlr beginner mismatchedtoken question

Это моя грамматика сценарий:

grammar test; 

script : 
    'begin script' IDENT ':' 

    'end script' IDENT 
    ; 

IDENT : ('a'..'z' | 'A'..'Z') ('a'..'z'|'A'..'Z'|'0'..'9')* 
    ; 

Это сценарий, я пытаюсь запустить его против:

begin script spork: 

end script spork 

Результат в ANTLRWorks 1.3.1:

Что я делаю неправильно?

ответ

3

Вы обычно хотите сказать ANTLR игнорировать пробелы с правилом LeXeR:

WHITESPACE 
    : ('\t' | ' ' | '\r' | '\n'| '\u000C')+ 
     { $channel = HIDDEN; } ; 
+0

+1 - Вы сказали, что я сказал, за исключением того, вы на самом деле знаете, что вы делаете –

+0

@Nate CK - возможно ... или, может быть, мне просто повезло;) –

1

У меня нет большого опыта работы с AntLR, но я предполагаю, что lexer создает токен для новой строки, и он не соответствует вашей грамматике.

Обычно, когда вы пишете синтаксический анализатор, вы должны явно сказать lexer игнорировать пробелы и окончания строк. Но я могу ошибаться, это может быть нечто, что AntLR должен сделать для вас.