例1:整数加法运算
在这个例子中,我们将判断如下输入的式子是否是一个合法的加法运算:
99 + 42 + 0 + 15
并且在输入上面式子的时候,数字与加号之间的任何位置,都是可以有空格或者换行符的,也就说,即使我们输入的式子是下面这种形式,我们所编写的词法和语法分析器也应该要能判断出来它是一个合法的加法运算表示形式:
99 + 42 + 0
+ 15
(注:上面输入的式子中既有空格,也有制表符,还有换行符)
1.Option块和class声明块
语法描述文件的第一部分是:
/* adder.jj Adding up numbers */
options {
STATIC = false ;
}
PARSER_BEGIN(Adder)
class Adder {
public static void main( String[] args ) throws ParseException, TokenMgrError {
Adder parser = new Adder( System.in );
parser.Start();
}
}
PARSER_END(Adder)
上面的代码可以分为两个部分,一个是options块,另一个是PARSER_BEGIN(XXX)…… PARSER_END(XXX)块。
- 在options中,几乎所有配置项的默认值都适用于本例子,除了 STATIC选项,STATIC默认是true,这里要将其修改为false,使得生成的函数不是static 的。
- 接下来是ARSER_BEGIN(XXX)……PARSER_END(XXX)块,这里定义了一个名为 Adder的类,当然在这个块中定义的并非是Adder类的全部,JavaCC会根据.jj描述文件的其他部分的描述,来生成Adder的其他声明信息。另外注意到,在该类的main方法声明中, 抛出了两个异常类,分别为ParseException和TokenMgrError,这两个异常类会在使用javacc 命令编译当前.jj描述文件的时候生成。)
2.词法描述器
我们在后面还会再讲到main方法。这里让我们先看看词法