自己动手构建编程语言:如何设计编译器、解释器和DSL
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.5 完成Jzero语言的定义

在第1章中,我们列出了要在本书中实现的语言需求,2.4节详细介绍了它的一些设计注意事项。出于参考目的,本节将描述其他有关Jzero语言的详细信息。如果你发现本节内容与我们的Jzero编译器存在差异,那么它就是错误。编程语言设计者使用更精确的正规工具来定义语言的各个方面。词法和语法规则的描述将在接下来的两章中介绍。本节将从外行人的角度来介绍语言。

Jzero程序由单个文件中的单个类组成。该类可能包含多个方法和变量,但它们都是静态的。Jzero程序通过执行名main()的静态方法开始程序,这是必需的。Jzero中允许的语句类型有赋值语句、if语句、while语句和void调用方法。Jzero程序中允许的表达式类型包括算术、关系和布尔逻辑运算符,以及非void方法的调用。

Jzero语言支持boolean、char、int和long原子类型,int和long类型是等效的64位整数数据类型。

Jzero还支持数组。Jzero支持内置的String、InputStream和PrintStream类类型及其常用功能的子集。Jzero的String类型支持连接运算符和charAt()、equals()、length()和substring(b, e)方法。还支持String类的valueOf()静态方法。Jzero的InputStream类型支持read()和close()方法,而Jzero的PrintStream类型则支持print()、println()、close()方法。

据此,我们定义了用类似Java的“玩具”编程语言编写基本计算所需的最小特性,这不是一种真正的编程语言。但是,我们鼓励读者使用本书中没有的其他特性来扩展Jzero语言,例如浮点类型和具有非静态类变量的用户定义类。现在让我们了解一下,通过查看Unicon语言的某一个方面,我们可以观察到关于该语言设计的哪些内容。