Java ANTLR 4.生成的解析器无法识别任何内容

时间:2015-12-02 23:34:52

标签: java parsing antlr lexer

我正在用我自己的语言编写词法分析器和解析器来处理列表上的操作。我从那开始:

 list_Declaration : L_LIST L_ID ASSIGN LBRACE NUMBER (COMA  NUMBER)* RBRACE SEMI;
NUMBER          : [0-9]+;
L_BOOLEAN_LITERAL
    :   'true'
    |   'false'
    ;
L_ID            :   [a-z]+;

L_IF            : 'if';
L_ELSE          : 'else';
L_THEN          : 'then';
L_FOREACH       : 'foreach';
L_VAR           : 'var';
L_IN            : 'in';
L_LIST          : 'list';
L_NUMBER        : 'number';
L_RETURN        : 'return';

ASSIGN          : '=';

LPAREN          : '(';
RPAREN          : ')';
LBRACE          : '{';
RBRACE          : '}';
COMA            : ',';
SEMI            : ';';
WS: [ \t\n\r]+ ->skip;

当我尝试用示例文本解析它时:

list a = {2,3}; 

它说:

line 1:0 token recognition error at: ''
line 1:1 missing 'list' at 'list'
line 1:6 extraneous input 'a' expecting '='

我做错了什么?

1 个答案:

答案 0 :(得分:0)

我通常用这种方式来定义词法分析器,它始终有效:

fragment I : [iI];
fragment L : [lL];
fragment S : [sS];
fragment T : [tT];

L_List     : L I S T;

您的'list'已与L_ID匹配,因此extraneous input 'a' expecting '='
把你的L_ID放在几乎所有的词法分析器下面。