我正在用我自己的语言编写词法分析器和解析器来处理列表上的操作。我从那开始:
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 '='
我做错了什么?
答案 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放在几乎所有的词法分析器下面。