Parsing ANTLR4解析包含变量名的关键字
我试图在antlr4中解析一个简单的整数声明。Parsing ANTLR4解析包含变量名的关键字,parsing,antlr4,grammar,Parsing,Antlr4,Grammar,我试图在antlr4中解析一个简单的整数声明。 我现在做的语法是: main : 'int' var '=' NUMBER+ ; var : LETTER (LETTER | NUMBER)* ; LETTER: [a-zA-Z_] ; NUMBER: [0-9] ; WS : [ \t\r\n]+ -> skip ; 当我尝试使用int_A=0测试主规则时,出现了一个错误: 外部输入“int”应为字母 我知道这是因为变量名“int_A”包含关键字“int”,但我如何修改语法
我现在做的语法是:
main : 'int' var '=' NUMBER+ ;
var : LETTER (LETTER | NUMBER)* ;
LETTER: [a-zA-Z_] ;
NUMBER: [0-9] ;
WS : [ \t\r\n]+ -> skip ;
当我尝试使用int_A=0
测试主规则时,出现了一个错误:
外部输入“int”应为字母
我知道这是因为变量名“int_A”包含关键字“int”,但我如何修改语法?谢谢。lexer会创建尽可能多字符的代币。因此,
int_A
被标记为以下3个标记:
(语法分析器中定义的int关键字)'int'
(字母
)
(字母
)A
var
不要使用解析器规则var
,而是使用lexer规则:
main : 'int' VAR '=' NUMBER+ ;
VAR : [a-zA-Z_] ([a-zA-Z_] | [0-9])* ;
NUMBER : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;
谢谢你的帮助。这个答案也澄清了我对解析器编程的误解。欢迎@CarloChuang,注意您还想做
NUMBER:[0-9]+代码>和非:编号:[0-9]代码>