一些尝试
本章所介绍的两个表达式解析器可用于许多用途,因为它们使程序员无需做很多工作即可扩展应用程序的功能。考虑一个要求用户输入数字的程序。例如有一个应用程序要求用户输入需要打印的文件份数。在正常情况下,程序只需要显示一个文本框并等待输入,然后将输入的文本转化为应用的内部数字格式。这种简单的方法允许用户输入一个值,例如100。然而,如果总共有9个部门,用户希望为每个部门打印72份文件,该如何处理呢?这时用户必须手工计算得出乘积的结果,并在文本框中输入648。然而,如果用户可以使用解析器计算从文本框中得到的数值,那么就可以直接输入9*72,而不再需要其他任何的手工计算。解析和计算数字表达式的能力可以给应用程序(甚至最简单的应用程序)增加成熟、专业的感觉。因此,不妨在应用程序中尝试使用解析器来处理数字的输入问题。
在本章中曾经谈到,解析器只执行最小限度的错误检查。因此您可能需要增加更为详细的错误报告。例如,可以突出显示在表达式中检测到的错误位置。这样就使得用户能够很快发现语法错误并及时改正。
现在这种解析器只能够计算数字表达式。然而,如果向其中增加一些代码,它就有可能计算其他类型的表达式,例如字符串、空间坐标或者是复数等。举例来说,为了使解析器能够计算字符串,必须做如下改动:
(1) 定义一个新标识符类型,称为STRING。
(2) 增强getToken()方法的功能,使其能够正确识别字符串。
(3) 在atom()方法中添加一个新的case处理语句,用来处理STRING类型的标识符。
这些步骤完成之后,解析器就能够正确处理如下字符串表达式:
a = "one"
b = "two"
c = a + b
保存在c中的结果应该是a和b的合并,也就是“onetwo”。
|