为什么空格('')在我的代码中返回<eof>?

时间:2016-02-04 10:42:41

标签: c# parsing antlr

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:a = 12 //没有错误
  • 示例2:a = 12 //第1:6行在输入(EOF)时没有可行的替代方案

  • 所以在这里,我的问题是 - 为什么白色空间('')返回“在输入(EOF)时没有可行的替代方案”? - 检查我输入的语法:'a = 12'
    注意:'a','='和'12'之间有一个空格。

1 个答案:

答案 0 :(得分:1)

问题是,语法不能读取除\ t之外的空格。尝试在WS规则中添加另一个空白字符。