ANTLR4 解析包含关键字的变量名
ANTLR4 parsing a keyword-contained variable name
我正在尝试在 antlr4 中解析一个简单的整数声明。
我现在做的语法是:
main : 'int' var '=' NUMBER+ ;
var : LETTER (LETTER | NUMBER)* ;
LETTER: [a-zA-Z_] ;
NUMBER: [0-9] ;
WS : [ \t\r\n]+ -> skip ;
当我尝试使用 int int_A = 0
测试主规则时,出现错误:
extraneous input 'int' expecting LETTER.
我知道这是因为变量名 'int_A' 包含关键字 'int',但我该如何修改我的语法?谢谢
词法分析器使用尽可能多的字符创建标记。所以 int_A
被标记为以下 3 个标记:
'int'
(解析器中定义的 int 关键字)
LETTER
(_
)
LETTER
(A
)
因此解析器无法使用这些标记创建 var
。
而不是解析器规则 var
,使其成为词法分析器规则:
main : 'int' VAR '=' NUMBER+ ;
VAR : [a-zA-Z_] ([a-zA-Z_] | [0-9])* ;
NUMBER : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;
我正在尝试在 antlr4 中解析一个简单的整数声明。
我现在做的语法是:
main : 'int' var '=' NUMBER+ ;
var : LETTER (LETTER | NUMBER)* ;
LETTER: [a-zA-Z_] ;
NUMBER: [0-9] ;
WS : [ \t\r\n]+ -> skip ;
当我尝试使用 int int_A = 0
测试主规则时,出现错误:
extraneous input 'int' expecting LETTER.
我知道这是因为变量名 'int_A' 包含关键字 'int',但我该如何修改我的语法?谢谢
词法分析器使用尽可能多的字符创建标记。所以 int_A
被标记为以下 3 个标记:
'int'
(解析器中定义的 int 关键字)LETTER
(_
)LETTER
(A
)
因此解析器无法使用这些标记创建 var
。
而不是解析器规则 var
,使其成为词法分析器规则:
main : 'int' VAR '=' NUMBER+ ;
VAR : [a-zA-Z_] ([a-zA-Z_] | [0-9])* ;
NUMBER : [0-9]+ ;
WS : [ \t\r\n]+ -> skip ;