[编译原理]词法分析器JLEX使用指南 (Jdk1.5.0 + JLex 1.2.6)

导读:
  作者:ANNEROSE 环境:Jdk1.5.0 + JLex 1.2.6 日期:2007-01-07
  Jlex工具基于Lex词法分析生成器,它接受类似Lex文件格式的文件,生成Java源代码格式的词法分析器。
  (本项目用命令行编译,不使用Eclipse) 
  
   1. 开发环境jdk1.5.0配置
  
  第一步:下载j2sdk:到sun官方站(http://java.sun.com/j2se/1.5.0/download.jsp)下载j2sdk,注意下载版本为Windows Offline Installation的SDK,同时最好下载J2SE 1.5.0 Documentation;
  
  第二步:安装和配置你的j2sdk执行j2sdk的安装程序,然后按默认设置进行安装即可。
  
  第三步:安装j2sdk以后,需要配置一下环境变量,在我的电脑->属性->高级->环境变量->系统变量中添加以下环境变量(假定你的j2sdk安装在C:/Program Files/Java/jdk1.5.0):
  
  JAVA_HOME=C:/Program Files/Java/jdk1.5.0
  classpath=.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%/lib/tools.jar;(.;一定不能少,因为它代表当前路径)
  path=%JAVA_HOME%/bin
  
  接着可以写一个简单的java程序来测试jdk1.5.0是否已安装成功:
  
  public class HelloJava {
  public static void main(String _args[]) {
  System.out.println("Hello, Java!");
  }
  }
  
  将上面的这段程序保存为文件名为HelloJava.java的文件。
  
  然后打开命令提示符窗口,cd到你的HelloJava.java所在目录,然后键入下面的命令
  
  javac HelloJava.java
  java HelloJava(注意HelloJava的大小写!!!)
  
  此时如果看到打印出来Hello, Java! 的话说明安装成功了,如果没有打印出这句话,你需要仔细检查一下你的配置情况。
   2. 下载JLEX 1.2.6 就是那个200K的Main.java文件
  http://www.cs.princeton.edu/~appel/modern/java/JLex/
   3. 以下步骤参照JLex的README
  (1) Choose some directory that is on your CLASSPATH, where you install Java utilities such as JLex. I will refer to this directory as "J", for example.
  于是建立文件夹 "E:/J/JLex", 把"E:/J" 写入环境变量CLASSPATH
  (2) Make a directory "J/JLex" and put the sourcefile Main.java in J/JLex.
  把下载的文件Main.java 拷入 J/JLex.
  (3) Compile Main.java as you would any Java source file: javac Main.java
  This should produce a number of Java class files, including Main.class, in the "J/JLex" directory, where "J" is in your CLASSPATH.
  进入E:/J/JLex为当前目录(不作也可以,因为之前设了环境变量)。运行 javac Main.java可以得到很多class文件,包括Main.class
  命令行有2行注意
  Note: Main.java uses unchecked or unsafe operations.
  Note: Recompile with -Xlint:unchecked for details.
  反正class文件已经生成。不管它。
  (4) To run JLex with a JLex specification file, the usage is:
  java JLex.Main
  运行java JLex.Main sample.lex,得到词法分析器代码sample.lex.java。lex文件怎么写,本文不作论述。可以从JLex下一个sample.lex试一下。
  (5) The resulting lexical analyzer source file should be compiled with the Java compiler:
  javac
  where is the name of the lexical analyzer
  运行 javac sample.lex.java 不能通过,有7 errors。
  sample.lex.java:11: as of release 1.4, 'assert' is a keyword, and may not be used as an identifier
  (try -source 1.3 or lower to use 'assert' as an identifier)
  public static void assert
  ...
  再运行javac -source 1.3 sample.lex.java,有7 warnings。生成Sample.class, Utility.class, Yylex.class, Yytoken.class
  sample.lex.java:11: warning: as of release 1.4, 'assert' is a keyword, and may not be used as an identifier
  (try -source 1.4 or higher to use 'assert' as a keyword)
  public static void assert
  ...
  上面两则警告和出错信息自相矛盾,真是岂有此理。不过既然编译通过,就不管了。我们继续:)
  注: javac -source Provide source compatibility with specified release
  (6) Run the generated lexer with:
  java Sample
  which expects input on stdin. The lexer parses tokens that resemble those for a typical programming language; whitespace is generally ignored. Java buffers input from stdin a line at a time, so you won't see any output until you type enter.
  运行该词法分析器 java Sample(注意大小写!!!)。输入一行就显示分析结果。
  输入{ /* comment */ a := b &c; }
  显示
  Token #7: { (line 0)
  Token #43: a (line 0)
  Token #22: := (line 0)
  Token #43: b (line 0)
  Token #20: &(line 0)
  Token #43: c (line 0)
  Token #2: ;(line 0)
  Token #8: } (line 0)
  Exception in thread "main" java.lang.Error: Lexical Error: Unmatched Input.
  at Yylex.yylex(sample.lex.java:374)
  at Sample.main(sample.lex.java:6)
  以上是我学习使用JLEX的一点心得,欢迎各位高手指正。
  

本文转自
http://www.cnblogs.com/astate/archive/2007/01/07/614341.html
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
1.1 编译器概述.flv 1.2 编译器结构.flv 1.3 编译器实例.flv 2.1 词法分析的任务.flv 2.2.1 词法分析器的手工构造1.flv 2.2.2 词法分析器的手工构造2.flv 2.2.3 词法分析器的手工构造3.flv 2.3.1 正则表达式1.flv 2.3.2 正则表达式2.flv 2.3.3 正则表达式3.flv 2.3.4 正则表达式4.flv 2.4.1 有限状态自动机1.flv 2.4.2 有限状态自动机2.flv 3.1.1 RE转换成NFA:Thompson算法1.flv 3.1.2 RE转换成NFA:Thompson算法2.flv 3.1.3 RE转换成NFA:Thompson算法3.flv 3.2.1 NFA转换成DFA:子集构造算法1.flv 3.2.2 NFA转换成DFA:子集构造算法2.flv 3.2.3 NFA转换成DFA:子集构造算法3.flv 3.2.4 NFA转换成DFA:子集构造算法4.flv 3.3.1 DFA的最小化:Hopcroft算法1.flv 3.3.2 DFA的最小化:Hopcroft算法2.flv 3.3.3 DFA的最小化:Hopcroft算法3.flv 3.4.1 从DFA生成分析算法1.flv 3.4.2 从DFA生成分析算法2.flv 3.4.3 从DFA生成分析算法3.flv 4.1.1 语法分析的任务1.flv 4.1.2 语法分析的任务2.flv 4.1.3 语法分析的任务3.flv 4.2.1 上下文无关文法和推导1.flv 4.2.2 上下文无关文法和推导2.flv 4.2.3 上下文无关文法和推导3.flv 4.2.4 上下文无关文法和推导4.flv 4.2.5 上下文无关文法和推导5.flv 4.3.1 分析树和二义性文法1.flv 4.3.2 分析树和二义性文法2.flv 4.3.3 分析树和二义性文法3.flv 4.3.4 分析树和二义性文法4.flv 4.4.1 自顶向下分析1.flv 4.4.2 自顶向下分析2.flv 4.4.3 自顶向下分析3.flv 4.4.4 自顶向下分析4.flv 4.5.1 递归下降分析算法1.flv 4.5.2 递归下降分析算法2.flv 4.5.3 递归下降分析算法3.flv 4.5.4 递归下降分析算法4.flv 5.1.1 LL(1)分析算法1.flv 5.1.2 LL(1)分析算法2.flv 5.1.3 LL(1)分析算法3.flv 5.1.4 LL(1)分析算法4.flv 5.1.5 LL(1)分析算法5.flv 5.1.6 LL(1)分析算法6.flv 5.1.7 LL(1)分析算法7.flv 5.1.8 LL(1)分析算法8.flv 5.2 LL(1)分析的冲突处理.flv 5.3.1 LR(0)分析算法1.flv 5.3.2 LR(0)分析算法2.flv 5.3.3 LR(0)分析算法3.flv 5.3.4 LR(0)分析算法4.flv 5.4 SLR分析算法.flv 5.5 LR(1)分析算法.flv 5.6.1 LR(1)分析工具1.flv 5.6.2 LR(1)分析工具2.flv 5.6.3 LR(1)分析工具3.flv 6.1.1 语法制导翻译1.flv 6.1.2 语法制导翻译2.flv 6.1.3 语法制导翻译3.flv 6.2.1 语法制导翻译的实现原理1.flv 6.2.2 语法制导翻译的实现原理2.flv 6.3.1 抽象语法树1.flv 6.3.2 抽象语法树2.flv 6.3.3 抽象语法树3.flv 6.3.4 抽象语法树4.flv 6.4.1 抽象语法树的自动生成1.flv 6.4.2 抽象语法树的自动生成2.flv 7.1.1 语义分析的任务1.flv 7.1.2 语义分析的任务2.flv 7.1.3 语义分析的任务3.flv 7.2.1 语义规则及实现1.flv 7.2.2 语义规则及实现2.flv 7.2.3 语义规则及实现3.flv 7.2.4 语义规则及实现4.flv 7.3.1 符号表1.flv 7.3.2 符号表2.flv 7.3.3 符号表3.flv 7.4 语义分析中的其它问题.flv

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值