3.2 Testing the Generated Parser
优质
小牛编辑
141浏览
2023-12-01
运行 ANTLR tool 后,下一步编译 ANTLR 自动生成的 Java 代码:
javac *.java
然后使用 grun
来测试一下:
array [master●●] % grun ArrayInit init -tokens
{1, 22, 333}
[@0,0:0='{',<'{'>,1:0]
[@1,1:1='1',<INT>,1:1]
[@2,2:2=',',<','>,1:2]
[@3,4:5='22',<INT>,1:4]
[@4,6:6=',',<','>,1:6]
[@5,8:10='333',<INT>,1:8]
[@6,11:11='}',<'}'>,1:11]
[@7,13:12='<EOF>',<EOF>,2:0]
上面例子中,每一行都代表一个 token,且包含该 token 的 全部信息,例如倒数第 3 行 [@5,8:10='333',<INT>,1:8]
@5
是 token 的序号,表明该行代表的 token 是第 5 个({1, 22, 333, }
中333
是第 5 个 token);8:10
该 token 由 8 9 10 位置的 3 个字符组成;='333'
该 token 包含的文本是333
;<INT>
该 token 类型为INT
;1:8
该 token 位于输入文本的第 1 行(从 1 开始计数)的第 8 个字符(从 0 开始计数);
还可以用 -tree
生成 LISP 风格的 parse tree:
array [master●●] % grun ArrayInit init -tree
{1, 22, 333}
(init { (value 1) , (value 22) , (value 333) })
还可以用 -gui
生成可视化的 parse tree:
array [master●●] % grun ArrayInit init -gui
{1, {2, 3}, 4}
- 根节点
init
和value
是 parser rule - 叶子结点是 lexer rule
可以用 parser rule 来表示该 rule 识别到的 所有元素,比较方便。