posts - 267,  comments - 1129,  trackbacks - 0
博主踏雪赤兔按:
  编译原理的实验要求我们用JFlex和JavaCUP来对语言进行分析处理,JavaCUP有一个User's Manual教你怎样做,上面还有一个简单的计算器作为例子,但一试之下,却发现那个例子有不少错误,结果改了我n久才完成~当然马上就决定写一篇博客告诉大家怎样做才是正确的,以免像我那样白走许多弯路。我也不知是不是我找的那份不好,如果你有更好的manual,记得告诉我。

撰写本文的目的
  给出使用JFlex、JavaCUP来为一个计算器建立分析器的示例的完整代码,使读者能充分领会JavaCUP的使用方法。虽然本文仅仅给出了计算器的代码,但只要你会写你的语言的翻译模式,则只要照抄这个模版,并改改相应动作就可以了。

引用到的资料
  • 《CUP User's Manual》,作者:Scott E. Hudson地址为李老师那里下载下来的JavaCUP-11a.rar\CUP-develop.tar.gz\develop\manual.html,有详细的英文说明和示例代码,但有很多错。本文中简称为《手册》。
  • 《使用CUP进行语法分析》,摘自Apollo的博客,貎似是转载的(竟然不注明[转]和真实出处?!,BS之~),作者待考。有详尽的解释,但缺乏示例代码。本文中简称为《语法分析》。

详细步骤
1、准备工作。
  JavaCUP和JFlex一样,压缩包里边有许多的文件夹和文件,我不知道正统的做法是否要求使用javaCUP也像Jflex一样要设置一堆path啊、classpath啊、jflex_home之类的环境变量,但如果你像我一样只打算用它几次,你只要执行下述的两个简单步骤就可以了,它并不需要你设置任何的环境变量(以下假设你的工作目录是work\):
1)   将JavaCUP压缩包里的java-cup-11a.jar解压到work\下。
2)   将JavaCUP压缩包里的CUP-develop.tar.gz\develop\src下的java_cup文件夹整个解压到work\下。
现在你可以使用JavaCUP了。

2、为这个计算器写一个词法分析器。或者用JFlex生成一个词法分析器

  两种方法都可以生成词法分析器,其中,直接写分析器的代码如下:

scanner.java

 

  以上代码来自《手册》的附录B,但有以下修改: