2016-02-04 4 views
1
grammar VB6; 
/* 
* Parser Rules 
*/ 
compileUnit: module+ EOF; 
module:declareStmt ; 
declareStmt :WS? eqnStmt  #eqStatement; 
eqnStmt: VAR WS? EQ WS? NUM; 

/* 
* Lexer Rules 
*/ 
NUM:[0-9]+; 
VAR: LETTER LETTERORDIGIT*; 
EQ : '='; 
WS : [ \t]+; 

// letters 
fragment LETTER : [a-zA-Z]; 
fragment LETTERORDIGIT : [a-zA-Z0-9]; 

// case insensitive chars 
fragment A:('a'|'A'); 
fragment B:('b'|'B'); 
fragment C:('c'|'C'); 
fragment D:('d'|'D'); 
fragment E:('e'|'E'); 
fragment F:('f'|'F'); 
fragment G:('g'|'G'); 
fragment H:('h'|'H'); 
fragment I:('i'|'I'); 
fragment J:('j'|'J'); 
fragment K:('k'|'K'); 
fragment L:('l'|'L'); 
fragment M:('m'|'M'); 
fragment N:('n'|'N'); 
fragment O:('o'|'O'); 
fragment P:('p'|'P'); 
fragment Q:('q'|'Q'); 
fragment R:('r'|'R'); 
fragment S:('s'|'S'); 
fragment T:('t'|'T'); 
fragment U:('u'|'U'); 
fragment V:('v'|'V'); 
fragment W:('w'|'W'); 
fragment X:('x'|'X'); 
fragment Y:('y'|'Y'); 
fragment Z:('z'|'Z');  
  • Выше кода является грамматика для объявления переменной
  • Пример 1: а = 12 // не давая ошибку
  • Пример 2: а = 12 // строка 1: 6 жизнеспособной альтернативы на входе (EOF)Почему пробел ('') возвращается <EOF> в мой код?

  • Так вот, мой вопрос
    -Почему не белое пространство (»«) возвращение „реальной альтернативы на входе (EOF)“?
    -Проверьте мою грамматику для ввода: 'a = 12'
    -Примечание: Между 'a', '=' и '12' имеется пробел.

ответ

1

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

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