诊断Java代码: 设计可扩展的应用程序,第4部分 - 编程入门网
而无须修改甚至查看原始源代码。
示例:确定脚本编制语言 为实现这一脚本编制语言,首先必须确切地说明这个语言到底是什么。这意味着明确语法和语义。 我们可以使用 BNF 符号来说明语法,如下: 清单 3. 明确说明脚本编制语言的语法
诊断Java代码: 设计可扩展的应用程序,第4部分(3)时间:2011-02-11 IBM Eric E. Allen深入研究 请注意这种语言包含过程定义。这些过程定义允许用户抽象出经常使用的操作序列,然后在多处应用此抽象,作为值传递给不同参数(类似 Java 语言中的方法定义)。我正在定义一个脚本,这个脚本包含后跟一个表达式的这些定义的序列。 在这个简单语言中遗漏了几件事: Let表达式,用来绑定过程中的变量;可以用额外的过程定义来模拟 let 表达式,但将它们作为语言的一部分会更方便。 赋值语句 静态类型系统 尤其是,添加静态类型系统将允许解释器在脚本运行之前捕捉到许多错误。 另一方面,静态类型系统也会使语言更冗长,而且不可避免地,它们不仅拒绝真正有错误的程序,还拒绝一些本来运行得很好的程序。出于这些原因,您通常会看到在程序趋于较短时会从脚本语言中省去静态类型。在该示例中我们将省去它们,但如果想添加的话,当然没有问题。 精心编写三阶段解析器 一旦我们对这个语言的语法满意,我们就可以着手写它的语法解析器。这就是使用 S-expression 的优势所在。与编写常规二阶段语法解析器(标记化和解析)不同,我们通过增加额外的阶段来大大简化整个过程。 这个额外的阶段发生在标记化与解析成语法树之间。它包括将输入分割为 S-expression 内部的表达式。这个分割过程基本上等同于圆括号匹配,但这样做使得解析过程更加简单。 从流中抽取表示 假设我们已经使用标记程序(比如,象用于较小规模输入的 java.util.StreamTokenizer 或 StringTokenizer )将数据转换成标记流,其中每个标记要么是左圆括号,右圆括号,要么是词。 操作这个流最方便的办法是堆栈。在清单 5,我定义了接口 StackI 它可以用 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |