第1章概述 1.4实验环境与工具 1.4.1简介 为完成本书的各个课程设计,你将使用到以下的开发环境和工具: 1、Java集成开发环境 由于实验中需要用到Eclipsef的DT工具包,故我们推荐使用Eclipse集成开发环境IDE, Integrated Development Environment)),你可以从http://www.eclipse.org/获得。它是一个广泛 使用的开源集成开发环境,在各种平台上都有发布的版本。你既可以用它在Windows操作系 统下完成Java程序的开发,也可以用它在Linx等操作系统下完成。 2、Java SDK 你可以从SUN的网站http://java sun.com)上获得Java软件开发包(SDK).你可以安装J2SE 5.0(即JDK1.5)或Java SE6.0(即JDK1.6)中的任一版本,并且将所安装的RE(Java Runtime Environment)添加到Eclipsef的系统库中,这样便于你跟踪调试Java源程序代码。 3、Eclipse的Java开发工具 表1-1 Eclipse JDTAST相关的jar文件 Eclipse版本号相关的jar文件 3.12 org.eclipse.core.resources 3.1.2.jar org.eclipse.core.runtime_3.1.2jar org.eclipse.jdt.core_3.l.2.jar org.eclipsejdt.ui_3.1.2jar 32 org.eclipse.core.resources_3.2.2jar org.eclipse.core.runtime_3.2.0.jar org.eclipse.equinox.common_3.20.jar orgeclipsejdtcore 32.3.ja org.eclipse.idt.ui 3.2.2.jar org.eclipse.core.resources_3.3.0.jar org.eclipse.core.runtime 3.3.100.jar org.eclipse.equinox.common_3.3.0.jar org.eclipse.jdt.core_3.3.1.jar org.eclipse.jdt.ui3.3.1.jar 我们使用Eclipsef的ava开发工具(JDT,Java Development Tools)提供的抽象语法树类层 次结构来表示我们的AST。当用Eclipse编译依赖DT的程序时,需要把Eclipse安装目录中 plugins子目录下的几个与AST实现有关的ar文件(表1-l列出了儿个Eclipseh版本中相关的jar
第 1 章 概述 5 1.4 实验环境与工具 1.4.1 简介 为完成本书的各个课程设计,你将使用到以下的开发环境和工具: 1、Java 集成开发环境 由于实验中需要用到Eclipse的JDT工具包,故我们推荐使用Eclipse集成开发环境(IDE, Integrated Development Environment),你可以从 http://www.eclipse.org/获得。它是一个广泛 使用的开源集成开发环境,在各种平台上都有发布的版本。你既可以用它在Windows操作系 统下完成Java程序的开发,也可以用它在Linux等操作系统下完成。 2、Java SDK 你可以从SUN的网站(http://java.sun.com)上获得Java软件开发包(SDK)。你可以安装J2SE 5.0(即JDK1.5)或Java SE 6.0(即JDK1.6)中的任一版本,并且将所安装的JRE(Java Runtime Environment)添加到Eclipse的系统库中,这样便于你跟踪调试Java源程序代码。 3、Eclipse 的 Java 开发工具 表 1-1 Eclipse JDT AST 相关的 jar 文件 Eclipse 版本号 相关的 jar 文件 3.1.2 org.eclipse.core.resources_3.1.2.jar org.eclipse.core.runtime_3.1.2.jar org.eclipse.jdt.core_3.1.2.jar org.eclipse.jdt.ui_3.1.2.jar 3.2 org.eclipse.core.resources_3.2.2.jar org.eclipse.core.runtime_3.2.0.jar org.eclipse.equinox.common_3.2.0.jar org.eclipse.jdt.core_3.2.3.jar org.eclipse.jdt.ui_3.2.2.jar 3.3 org.eclipse.core.resources_3.3.0.jar org.eclipse.core.runtime_3.3.100.jar org.eclipse.equinox.common_3.3.0.jar org.eclipse.jdt.core_3.3.1.jar org.eclipse.jdt.ui_3.3.1.jar 我们使用Eclipse的Java开发工具(JDT, Java Development Tools)提供的抽象语法树类层 次结构来表示我们的AST。当用Eclipse编译依赖JDT的程序时,需要把Eclipse安装目录中 plugins子目录下的几个与AST实现有关的jar文件(表 1-1 列出了几个Eclipse版本中相关的jar
第1章概述 文件列表)导入到Eclipse的classpath中;当用JDK的javac和java编译、运行时,需要在 “-classpath”选项中将这些jar文件包含进来。 4、JFlex 这是词法分析器的生成器(Generator),它能根据ncx词法规范文件自动生成词法分析器 的ava返代码,你可以从JFIex主页http://jflex.de/(或http://sourceforge net/projects/iflex/)下载 JFlex的压缩包,解压在某个目录下,这里记为IFLEX_HOME。切记按照Flex根目录下的 bin/jflex.bat中的注释修改它,以适应机器的Java虚拟机等配置,否则不能正常工作。在本书 所附的软件包的tools/jflex目录下,有l.4.1版本的jflex.jar。. 5、Ant 这是一个基于Java的编译工具,它与Eclipse集成得很好。它的机制与GNU Make比较相 像,但是由于编译文件是基于XML(eXtensible Markup Language)数据格式来描述的,因此比 makefile更清晰易懂。更多的信息请参考Ant网站:http://ant apache org。1.4.4节给出了XM 和Ant的简要介绍。 6、CUp CUP(Constructor of Useful Parsers)是一个以LALR(I)文法为基础的语法分析器的生成 器。其主要功能是读入一个文法规范(Grammar specification)文件,然后生成可识别符合这种 文法输入流的Java源代码。所读入的文法文件的扩展名约定为cup。你可以从 hpww2.cs.tum.edu/projects/cup/下载CUP工具并获得更多的信息。在本书所附的软件包 的tools/java-cup目录下,有vla版本的java-cup-v1lajarl以及java-cup-lla--runtime jar文件 7、JavaCC JavaCC(Java Compiler Compiler)是一种采用递归下降分析的、支持LL(k)文法的编译器的 编译器。它不仅可以为输入的文法规范文件(文件扩展名为)生成对应分析器的ava源代码 还提供其他与分析器生成有关的能力,如树构造(通过包含在avaCC中的Tree工具来完成)、 动作(actions)以、调试(debugging)等。利用JavaCC中的JDoc工具还可以将文法规范文件转换成 文档HTML格式).你可以从ttps://javace.dev java net/下载JavaCC工具并获得更多的信息。 在我们提供的工具箱中的tools/iavacc目录下,有4.0版本的iavacc.iar。 8、Gcc 在代码生成部分的实验中,要求为抽象语法树生成x86汇编代码。针对所生成的汇编代 码,本书推荐用GCC(GNU Compiler Collection)偏译器将其编译连接成目标文件或可执行文 件。GCC是开源的多语言、多目标、多平台的编译器集合,是Linux系统的官方编译器。你 可以从nttp://ecc.enu.org下载。当前GCC已经发展到了43.0版(截至2008年3月5日),它 因为公开、易用受到众多开源爱好者的喜好。在Windows系统中,无法直接使用GCC。你可 以使用Windows下的Linux平台环境,如CygWin,或者使用GCC的Windows版本,即 MinGW(Minimalist GNU for Windows).。你可以从http://wwwmingw.org/获得MinGW工具
第 1 章 概述 6 文件列表)导入到Eclipse的classpath中;当用JDK的javac和java编译、运行时,需要在 “-classpath”选项中将这些jar文件包含进来。 4、JFlex 这是词法分析器的生成器(Generator),它能根据jflex词法规范文件自动生成词法分析器 的Java源代码。你可以从JFlex主页 http://jflex.de/ (或 http://sourceforge.net/projects/jflex/ )下载 JFlex的压缩包,解压在某个目录下,这里记为JFLEX_HOME。切记按照JFlex根目录下的 bin/jflex.bat中的注释修改它,以适应机器的Java虚拟机等配置,否则不能正常工作。在本书 所附的软件包的tools/jflex目录下,有 1.4.1 版本的jflex.jar。 5、Ant 这是一个基于Java的编译工具,它与Eclipse集成得很好。它的机制与GNU Make比较相 像,但是由于编译文件是基于XML(eXtensible Markup Language)数据格式来描述的,因此比 makefile更清晰易懂。更多的信息请参考Ant网站:http://ant.apache.org。1.4.4 节给出了XML 和Ant的简要介绍。 6、CUP CUP(Constructor of Useful Parsers)是一个以LALR(1)文法为基础的语法分析器的生成 器。其主要功能是读入一个文法规范(Grammar specification)文件,然后生成可识别符合这种 文法输入流的 Java 源代码。所读入的文法文件的扩展名约定为 cup 。你可以从 http://www2.cs.tum.edu/projects/cup/ 下载CUP工具并获得更多的信息。在本书所附的软件包 的tools/java-cup目录下,有v11a版本的java-cup-v11a.jar以及java-cup-11a-runtime.jar文件。 7、JavaCC JavaCC(Java Compiler Compiler)是一种采用递归下降分析的、支持LL(k)文法的编译器的 编译器。它不仅可以为输入的文法规范文件(文件扩展名为jj)生成对应分析器的Java源代码, 还提供其他与分析器生成有关的能力,如树构造(通过包含在JavaCC中的JJTree工具来完成)、 动作(actions)、调试(debugging)等。利用JavaCC中的JJDoc工具还可以将文法规范文件转换成 文档(HTML格式)。你可以从 https://javacc.dev.java.net/下载JavaCC工具并获得更多的信息。 在我们提供的工具箱中的tools/javacc目录下,有 4.0 版本的javacc.jar。 8、GCC 在代码生成部分的实验中,要求为抽象语法树生成x86 汇编代码。针对所生成的汇编代 码,本书推荐用GCC(GNU Compiler Collection)编译器将其编译连接成目标文件或可执行文 件。GCC是开源的多语言、多目标、多平台的编译器集合,是Linux系统的官方编译器。你 可以从 http://gcc.gnu.org下载。当前GCC已经发展到了 4.3.0 版(截至 2008 年 3 月 5 日),它 因为公开、易用受到众多开源爱好者的喜好。在Windows系统中,无法直接使用GCC。你可 以使用Windows下的Linux平台环境,如CygWin,或者使用GCC的Windows版本,即 MinGW(Minimalist GNU for Windows)。你可以从 http://www.mingw.org/获得MinGW工具
第1章概述 9、CygWin CygWin是Windows下的Linux平台环境。有了CygWin,我们就可以在Windows下使用 Linux下的BASH以及其它GNU工具。你可以从http://www.eygwin.com/或 http://www.cvgwin.cn/获得CygWin。. 10、SPIM 在代码生成部分的实验中,还要求为抽象语法树生成MPS32汇编代码。为了在普通的 PC机上生成MIPS RISC架构代码并运行,需要一个能在x86架构上运行MPS汇编程序的模 拟器。SPIM威是这样的一个开源模拟器,你可以从http://pages.cs.wisc.cdu~-larus/spim html 下载。它可以运行在Linux和MS Windows下。在Linux下,SPIM除提供一个字符界面外,还 提供了一个Kwindow下的图形界面XSpim。在MS Windows下,SPIM提供了一个类似XSpim 的图形界面PCSpim. 1.4.2环境变量设置 在运行以上各种开发工具之前,首先介绍环境变量及其设置方法。环境变量是一个具有 特定名字的对象,它包含一个或者多个应用程序所将用到的信息,用户可以修改相应的环境 变量来对自己的运行环境进行定制。 例如,在MS Windows的命令提示控制台(也称dos控制台)下,输入ccho%PATH% (在Linux或Unix的bash控制台下,可以输入ccho$PATH),你会看到系统列出不少用分 号隔开的路径。PTH环境变量的作用是指定命令的搜索路径。也就是说,当输入一条控制 台命令时,系统会主动在当前路径和PATH环境变量中所列出的各路径中寻找相应的命令来 执行。比如,如果PATH中有C:windowssystem32,那么在任何路径下输入winmine命令 都可以打开C1 vindows\svstem32下的扫雷游戎。 环境变量的引用方法在dos下和bsh下略有不同。前者将环境变量名放在两个“%” 之间来表示对环境变量的引用,比如之前的%PATH%:而后者则在环境变量名前加上“$” 来表示引用,如$PTH。对于所出现的环境变量引用,系统将用环境变量的值来代替它们。 比如,如果环境变量windir的值是"C:AWINDOWS",那么%windir%system32表示 "C:\WINDOWS\system32". 下面重点介绍环境变量的设置方法。 1.4.2.1设置用户或系统环境变量 1、Windows平台下的设置 在Windows操作系统下,可以为单个用户配置环境变量,也可以为所有的用户统一配 置环培变量,即系统环培变量 这里以Vindows XP为例来说明环境变量的设置方法。在Windows XP下,用鼠标单击“开 始”→“控制面版”→“性能和维护”→“系统”,或者对“我的电脑”单击鼠标右键而后 点击“属性”,将弹出“系统属性”窗口:选择窗口的“高级”标签中下方的“环境变量”, 7
第 1 章 概述 7 9、CygWin CygWin是Windows下的Linux平台环境。有了CygWin,我们就可以在Windows下使用 Linux 下 的 BASH 以及其它 GNU 工具。你可以从 http://www.cygwin.com/ 或 http://www.cygwin.cn/获得CygWin。 10、SPIM 在代码生成部分的实验中,还要求为抽象语法树生成MIPS32 汇编代码。为了在普通的 PC机上生成MIPS RISC架构代码并运行,需要一个能在x86 架构上运行MIPS汇编程序的模 拟器。SPIM就是这样的一个开源模拟器,你可以从 http://pages.cs.wisc.edu/~larus/spim.html 下载。它可以运行在Linux和MS Windows下。在Linux下,SPIM除提供一个字符界面外,还 提供了一个Xwindow下的图形界面XSpim。在MS Windows下,SPIM提供了一个类似XSpim 的图形界面PCSpim。 1.4.2 环境变量设置 在运行以上各种开发工具之前,首先介绍环境变量及其设置方法。环境变量是一个具有 特定名字的对象,它包含一个或者多个应用程序所将用到的信息,用户可以修改相应的环境 变量来对自己的运行环境进行定制。 例如,在 MS Windows 的命令提示控制台(也称 dos 控制台)下,输入 echo %PATH% (在 Linux 或 Unix 的 bash 控制台下,可以输入 echo $PATH),你会看到系统列出不少用分 号隔开的路径。PATH 环境变量的作用是指定命令的搜索路径。也就是说,当输入一条控制 台命令时,系统会主动在当前路径和 PATH 环境变量中所列出的各路径中寻找相应的命令来 执行。比如,如果 PATH 中有 C:\windows\system32,那么在任何路径下输入 winmine 命令, 都可以打开 C:\windows\system32 下的扫雷游戏。 环境变量的引用方法在 dos 下和 bash 下略有不同。前者将环境变量名放在两个“%” 之间来表示对环境变量的引用,比如之前的%PATH%;而后者则在环境变量名前加上“$” 来表示引用,如$PATH。对于所出现的环境变量引用,系统将用环境变量的值来代替它们。 比如,如果环境变量 windir 的值是"C:\WINDOWS",那么%windir%\system32 表示 "C:\WINDOWS\system32"。 下面重点介绍环境变量的设置方法。 1.4.2.1 设置用户或系统环境变量 1、Windows 平台下的设置 在 Windows 操作系统下,可以为单个用户配置环境变量,也可以为所有的用户统一配 置环境变量,即系统环境变量。 这里以Windows XP为例来说明环境变量的设置方法。在Windows XP下,用鼠标单击“开 始”Æ“控制面版”Æ“性能和维护”Æ“系统”,或者对“我的电脑”单击鼠标右键而后 点击“属性”,将弹出“系统属性”窗口;选择窗口的“高级”标签中下方的 “环境变量
第1章概述 可得如图11所示的窗口。 系统屁性 2x 常规计算机名硬件高级系统还原自动更新远程 ②☒ Scandinavian Lab的用户支昼UD 量 值 新键0编辑)除迎) 系统支量⑤) X\LOCALT 1\eet\f 新编辑)除) 确定☐取消 图1-1环境变量窗口 环境变量窗口上方是用户变量,其中设置的变量只能由当前用户名的用户使用:下方是 系统变量,其中设置的变量可以被所有的计算机用户使用。设置系统变量需要Administrator 权限。单击“新建”按钮,在弹出的对话框中输入变量名和变量值并按“确定”按钮之后, 即可完成对环境变量的新增设置。你也可以选中一个现有的变量,单击“编辑”或“删除 按钮,来修改或删除该变量。 2、Linux或Unix下的设首 bash是大多数Linux或Unix版本的标准Shel程序,它具有非常强大的功能。这里给出 为bas动设置环境变量的方法。 在用户主目录下有一个.bashr心文件,每一次该用户运行bash时,bash都会自动执行 这个脚本。如果在该bashrc文件中加入export envname=-"envval”后保存并退出,再在bash 控制台下执行“source bashre”命令,即可为该用户设置名为“envname”,值为envval的环 培变量。 如果要为所有用户都设置同一个环境变量envname,.则可以让root用户在etc/profile中 加入如下两行: envname="envval
第 1 章 概述 8 可得如 图 1-1 所示的窗口。 图 1-1 环境变量窗口 环境变量窗口上方是用户变量,其中设置的变量只能由当前用户名的用户使用;下方是 系统变量,其中设置的变量可以被所有的计算机用户使用。设置系统变量需要 Administrator 权限。单击“新建”按钮,在弹出的对话框中输入变量名和变量值并按“确定”按钮之后, 即可完成对环境变量的新增设置。你也可以选中一个现有的变量,单击“编辑”或“删除” 按钮,来修改或删除该变量。 2、Linux 或 Unix 下的设置 bash 是大多数 Linux 或 Unix 版本的标准 Shell 程序,它具有非常强大的功能。这里给出 为 bash 设置环境变量的方法。 在用户主目录下有一个 .bashrc 文件,每一次该用户运行 bash 时,bash 都会自动执行 这个脚本。如果在该.bashrc 文件中加入 export envname=”envval”后保存并退出,再在 bash 控制台下执行“source .bashrc”命令,即可为该用户设置名为“envname”,值为 envval 的环 境变量。 如果要为所有用户都设置同一个环境变量 envname,则可以让 root 用户在/etc/profile 中 加入如下两行: envname=”envval
第1章概述 export envname 1.4.2.2设置会话环境变量 在控制台中,可以对当前会话设置环境变量,当会话结束,环境变量就不再存在。你可 以用这种方法在批处理文件(即dos下的bat文件,或bash下的sh文件)中临时建立环境变量 完成某些任务 在dos控制台下,环境变量的设置方法是:set envname=envval。. 在bash下,变量的设置方法是:envnames="envval或者export envname="envval".两者 的区别在于:前者仅存在于当前的shcl,是本地变量,当前shell的子进程不会意识到这个 变量的存在。为了把变量传递到子shell,需要用export命令(即后者)把它们输出出来, 被输出出来的变量就像环境变量一样。 1.4.3 Eclipse的安装和使用 Ec即s是一个广泛使用的开源IDE,在各种平台上都有版本发布。在本书的课程设计 中,可以选用它作为Java程序的开发环境,并且用到它附带的DT之一:AST类层次结构。 考虑到大多数学生之前接触的多为Visual Studio之类的DE,而且Eclipse中许多操作 方式与之不同,因此在这里简单介绍一些Eclipse中的基本概念,以帮助学生快速熟悉它。 1.4.3.1 Eclipse的获得与安装 获得Eclipse:你可以从http://download eclipse.org/eclipse/downloads/上获得Eclipse.单击 该页面L,atest Release标签栏中Build Name标识符下的版本号的链接,选择EclipseSDK栏中相 应操作系统平台对应的Eclipse SDK压缩文件进行下载。 解压和安装:将Eclipse的压缩文件解压到一个新文件夹,这里记作ECLIPSE HOME, 双击其中的eclipse.cxe(在Windows下)或eclipse(在Linux或Unix下)即可启动Eclipse 注意:在运行Eclipse之前,请确认已经安装DK1.5以上的版本。如果你没有事先安装 JDK,或者在环境变量PATH中没有包含RE或JDK可执行文件的路径,那么Eclipse将无法启 动,并给出提示信息(如图1-2是在Windows下的信息提示). 确定门 图1-2“找不到Java虚拟机”的信息提示框 1.4.3.2首次运行Eclipse 第一次运行Eclipse时,Eclipse会弹出如图l-3所示的窗口,要求我们指定一个Eclipse 的Workspace((工作区). 9
第 1 章 概述 9 export envname 1.4.2.2 设置会话环境变量 在控制台中,可以对当前会话设置环境变量,当会话结束,环境变量就不再存在。你可 以用这种方法在批处理文件(即 dos 下的 bat 文件,或 bash 下的 sh 文件)中临时建立环境变量 完成某些任务。 在 dos 控制台下,环境变量的设置方法是:set envname=envval。 在 bash 下,变量的设置方法是:envname=”envval”或者 export envname=”envval”。两者 的区别在于:前者仅存在于当前的 shell,是本地变量,当前 shell 的子进程不会意识到这个 变量的存在。为了把变量传递到子 shell,需要用 export 命令(即后者)把它们输出出来, 被输出出来的变量就像环境变量一样。 1.4.3 Eclipse 的安装和使用 Eclipse 是一个广泛使用的开源 IDE,在各种平台上都有版本发布。在本书的课程设计 中,可以选用它作为 Java 程序的开发环境,并且用到它附带的 JDT 之一:AST 类层次结构。 考虑到大多数学生之前接触的多为 Visual Studio 之类的 IDE,而且 Eclipse 中许多操作 方式与之不同,因此在这里简单介绍一些 Eclipse 中的基本概念,以帮助学生快速熟悉它。 1.4.3.1 Eclipse 的获得与安装 获得Eclipse: 你可以从 http://download.eclipse.org/eclipse/downloads/上获得Eclipse。单击 该页面Latest Release标签栏中Build Name标识符下的版本号的链接,选择Eclipse SDK栏中相 应操作系统平台对应的Eclipse SDK压缩文件进行下载。 解压和安装: 将 Eclipse 的压缩文件解压到一个新文件夹,这里记作 ECLIPSE_HOME, 双击其中的 eclipse.exe(在 Windows 下)或 eclipse(在 Linux 或 Unix 下)即可启动 Eclipse。 注意:在运行Eclipse之前,请确认已经安装JDK 1.5 以上的版本。如果你没有事先安装 JDK,或者在环境变量PATH中没有包含JRE或JDK可执行文件的路径,那么Eclipse将无法启 动,并给出提示信息(如 图 1-2 是在Windows下的信息提示)。 图 1-2 “找不到 Java 虚拟机”的信息提示框 1.4.3.2 首次运行 Eclipse 第一次运行Eclipse时,Eclipse会弹出如 图 1-3 所示的窗口,要求我们指定一个Eclipse 的Workspace(工作区)