《ANTLR 4权威指南》——3.2 测试生成的语法分析器

3.2 测试生成的语法分析器

对语法运行ANTLR之后,我们需要编译自动生成的Java源代码。简单起见,我们在工作目录/tmp/array下完成所有的编译操作。

如果编译器产生了一个ClassNotFoundException异常,说明你可能没有正确设置Java的CLASSPATH环境变量。在类UNIX系统上,你需要执行以下命令(也可以写在类似.bash_profile的启动脚本中):

我们使用第1章提到的grun别名来启动TestRig,执行对语法的测试。下面的命令告诉我们如何将词法分析器生成的词法符号打印出来。

在输入要测试的语句{99, 3, 451}之后,我们必须手动输入一个EOF。默认情况下,ANTLR在开始处理前会加载全部的输入文本(这是最常见的情况,也是最有效率的处理方式)。

每行输出代表一个词法符号,其中包含该词法符号的全部信息。例如,[@5, 8:10 = '451', <4>, 1:8]表明它是第5个词法符号(从0开始计数),由第8到第10个字符组成(从0开始计数,包含第8和第10),包含的文本是451,类型是4(INT),位于输入文本的第1行(从1开始计数)第8个字符(从0开始计数,tab作为一个字符)处。注意,输出的结果中不包含空格和换行符,这是因为在我们的语法中,WS规则的“->skip”指令将它们丢弃了。

如果需要语法分析器关于输入文本识别过程的更多信息,我们可以使用“-tree”选项查看语法分析树:

“-tree”选项使用LISP风格(根节点和子节点在同一行显示)打印出语法分析树。另外,我们也可以使用“-gui”选项生成一个可视化的对话框。我们试着用这个选项处理一下{1, {2, 3}, 4}这样的嵌套结构。

时间: 2024-12-23 21:45:51

《ANTLR 4权威指南》——3.2 测试生成的语法分析器的相关文章

《ANTLR 4权威指南 》一3.2 测试生成的语法分析器

3.2 测试生成的语法分析器 对语法运行ANTLR之后,我们需要编译自动生成的Java源代码.简单起见,我们在工作目录/tmp/array下完成所有的编译操作. 如果编译器产生了一个ClassNotFoundException异常,说明你可能没有正确设置Java的CLASSPATH环境变量.在类UNIX系统上,你需要执行以下命令(也可以写在类似.bash_profile的启动脚本中): 我们使用第1章提到的grun别名来启动TestRig,执行对语法的测试.下面的命令告诉我们如何将词法分析器生成

《ANTLR 4权威指南》——3.2节测试生成的语法分析器

3.2 测试生成的语法分析器对语法运行ANTLR之后,我们需要编译自动生成的Java源代码.简单起见,我们在工作目录/tmp/array下完成所有的编译操作. 在输入要测试的语句{99, 3, 451}之后,我们必须手动输入一个EOF.默认情况下,ANTLR在开始处理前会加载全部的输入文本(这是最常见的情况,也是最有效率的处理方式).每行输出代表一个词法符号,其中包含该词法符号的全部信息.例如,[@5, 8:10 = '451', <4>, 1:8]表明它是第5个词法符号(从0开始计数),由第

《ANTLR 4权威指南 》一导读

前 言 ANTLR是一款强大的语法分析器生成工具,可用于读取.处理.执行和翻译结构化的文本或二进制文件.它被广泛应用于学术领域和工业生产实践,是众多语言.工具和框架的基石.Twitter搜索使用ANTLR进行语法分析,每天处理超过20亿次查询:Hadoop生态系统中的Hive.Pig.数据仓库和分析系统所使用的语言都用到了ANTLR:Lex Machina将ANTLR用于分析法律文本:Oracle公司在SQL开发者IDE和迁移工具中使用了ANTLR:NetBeans公司的IDE使用ANTLR来解

《ANTLR 4权威指南》——导读

前 言 ANTLR是一款强大的语法分析器生成工具,可用于读取.处理.执行和翻译结构化的文本或二进制文件.它被广泛应用于学术领域和工业生产实践,是众多语言.工具和框架的基石.Twitter搜索使用ANTLR进行语法分析,每天处理超过20亿次查询:Hadoop生态系统中的Hive.Pig.数据仓库和分析系统所使用的语言都用到了ANTLR:Lex Machina将ANTLR用于分析法律文本:Oracle公司在SQL开发者IDE和迁移工具中使用了ANTLR:NetBeans公司的IDE使用ANTLR来解

《ANTLR 4权威指南》——3.4 构建一个语言类应用程序

3.4 构建一个语言类应用程序 我们继续完成能够处理数组初始化语句的示例程序,下一个目标是能够翻译初始化语句,而不仅仅是能够识别它们.例如,我们想要将Java中,类似{ 99, 3, 451 }的short数组翻译成"\u0063\u0003\u01c3".注意,其中十进制数字99的十六进制表示是63. 为了完成这项工作,程序必须能够从语法分析树中提取数据.最简单的方案是使用ANTLR内置的语法分析树遍历器进行深度优先遍历,然后在它触发的一系列回调函数中进行适当的操作.正如我们之前看到

《ANTLR 4权威指南 》一第3章 入门的ANTLR项目

第3章 入门的ANTLR项目 作为我们的第一个ANTLR项目,我们会构造一个语法,它是C语言或其继承者Java语法的一个很小的子集.具体来说,我们将识别包裹在花括号或者嵌套的花括号中的一些整数,像是{1, 2, 3}和{1, {2, 3}, 4}这样.这样的结构可以作为int数组或者C语言中的结构体的初始化语句.在很多情况下,针对这种语法的语法分析器都非常有用.例如,我们可以用它来构建一个对C语言的源代码进行重构的工具,这个工具能够完成这样的工作:如果初始化语句中所有的整数值都能用一个字节表示,

《ANTLR 4权威指南》——第3章 入门的ANTLR项目 3.1 ANTLR工具、运行库以及自动生成的代码

第3章 入门的ANTLR项目 作为我们的第一个ANTLR项目,我们会构造一个语法,它是C语言或其继承者Java语法的一个很小的子集.具体来说,我们将识别包裹在花括号或者嵌套的花括号中的一些整数,像是{1, 2, 3}和{1, {2, 3}, 4}这样.这样的结构可以作为int数组或者C语言中的结构体的初始化语句.在很多情况下,针对这种语法的语法分析器都非常有用.例如,我们可以用它来构建一个对C语言的源代码进行重构的工具,这个工具能够完成这样的工作:如果初始化语句中所有的整数值都能用一个字节表示,

《ANTLR 4权威指南 》一1.2 运行ANTLR并测试识别程序

1.2 运行ANTLR并测试识别程序 下面是一个简单的.识别类似hello world和hello parrt的词组的语法: 为整洁起见,我们把这个语法文件放到它自己的目录里,如/tmp/test.接下来对该语法文件运行ANTLR命令并编译生成的结果. 对Hello.g4运行ANTLR工具命令生成了一个由HelloParser.java和HelloLexer.java组成的.可以运行的语法识别程序,不过我们还缺一个main程序来触发这个语言识别的过程.(语法分析器和词法分析器的介绍详见下一章.)

《ANTLR 4权威指南》——1.2 运行ANTLR并测试识别程序

1.2 运行ANTLR并测试识别程序 下面是一个简单的.识别类似hello world和hello parrt的词组的语法: 为整洁起见,我们把这个语法文件放到它自己的目录里,如/tmp/test.接下来对该语法文件运行ANTLR命令并编译生成的结果. 对Hello.g4运行ANTLR工具命令生成了一个由HelloParser.java和HelloLexer.java组成的.可以运行的语法识别程序,不过我们还缺一个main程序来触发这个语言识别的过程.(语法分析器和词法分析器的介绍详见下一章.)