2009-12-09 5 views
0

я написал окурок для грамматики (только соответствует комментарии до сих пор), и это дает мне ошибку:ANTLRWorks ошибка компиляции грамматики: «синтаксическая ошибка: недопустимый символ литерала: INVALID»

syntax error: invalid char literal: <INVALID>

Кроме того, я , мы обнаружили ошибку в следующей команде:

... ~LINE_ENDING* ... 
LINE_ENDING  : ('\n' | '\r' | '\r\n'); 

Может кто-нибудь помочь мне исправить это?

ответ

2

Оператор ~ может применяться только к набору. В лексере элементы набора являются символами входного потока. Другими словами, вы можете иметь это:

~( 'a'..'z' 
| 'C' 
| '\r' 
| '\n' 
) 

Но вы не можете иметь это, потому что это последовательность (из двух символов) вместо установить.

~('\r\n') 

Проблема, с которой вы столкнулись, является продолжением этого второго случая.

+0

Это имеет смысл, +1. @RCIX: было бы справедливо отметить это как принятый ответ. –

+0

Ах спасибо! в этом есть смысл... – RCIX

1

Не знаете, почему вы получаете эту ошибку (у меня нет средств проверить ее на данный момент). Возможно, факт, что вы отрицаете либо один символ (или \n), либо двойной символ (\r\n) является проблемой?

Что случится, если вы попробуете:

SingleLineComment 
    : '//' (~LineBreakChar)* (NewLine | EOF) 
    ; 

LineBreakChar 
    : '\r' | '\n' 
    ; 

NewLine 
    : '\r'? '\n' | '\r' 
    ; 

?

+0

Это интересно: я не получаю ошибку при использовании '~ ('\ r' | '\ n') *', поэтому это должно быть по этой причине. Мне нужно будет добавить комментарий и, возможно, сообщить об этом или о чем-то, спасибо за помощь! – RCIX