当前位置: 首页 > 文档资料 > Antlr 4 参考 >

3.2 Testing the Generated Parser

优质
小牛编辑
129浏览
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}
  • 根节点 initvalue 是 parser rule
  • 叶子结点是 lexer rule

可以用 parser rule 来表示该 rule 识别到的 所有元素,比较方便。