如何验证ANTLR词法分析器中词法Token的准确性?
ANTLR词法Token的高效验证方案
问题场景
我正在编写ANTLR语法,已经定义了全部词法Token,示例Lexer规则如下:
// TestLexer.g4 // 可解析 x+4+1.2 lexer grammar TestLexer; VAR: [a-z]+; PLUS: '+'; INT: [0-9]+; DEC: [0-9]+ '.' [0-9]+;
实际项目里我有100多个复杂Token,在开发正式解析器前需要确保所有Token的识别准确性。之前我试过这样的验证方式:
program: TOKEN* EOF; TOKEN: PLUS|INT|VAR|DEC;
但逐个维护TOKEN规则里的Token枚举太繁琐,想知道有没有更优的验证方法,比如TestRig工具的专属模式?
可行解决方案(来自Mike的解答)
直接使用ANTLR的TestRig(通过grun命令调用)的tokens模式,无需额外编写语法规则即可验证Lexer的Token识别结果,具体步骤:
- 生成Lexer代码:
$ antlr4 TestLexer.g4
- 编译生成的Java类文件:
$ javac TestLexer.java
- 启动Token验证模式并输入测试文本:
$ grun TestLexer tokens -tokens x+1+1.2
执行后会输出每个Token的详细信息,包括位置、内容和对应的Token类型:
[@0,0:0='x',<VAR>,1:0] [@1,1:1='+',<'+'>,1:1] [@2,2:2='1',<INT>,1:2] [@3,3:3='+',<'+'>,1:3] [@4,4:6='1.2',<DEC>,1:4] [@5,7:6='<EOF>',<EOF>,1:7]
内容的提问来源于stack exchange,提问作者samuelbrody1249
相关产品推荐
相关产品推荐

