资源简介
利用Java编写简单的C语言词法分析器,实现编译原理课程的第一部分:词法分析器
代码片段和文件信息
package com.ant.model;
public class MyModel {
private String source;
private String target;
private StringBuffer SBSource;
private StringBuffer SBTarget = new StringBuffer();
private StringBuffer lexBuf = new StringBuffer();//用于存储预读的词素,进行判断分析
private String lexStr;
private int state = 0;//表明当前所处状态
private int start = 0;//表明状态转化图的出示状态
private char c;
private int begin = 0;//类似指针,表明读取字符所在位置
private int forward = 0;//类似指针,用于表明向前搜索的位置
private SymTable sym_Table = new SymTable();//符号表,用于存放预定义的关键字信息,及分析过程中新添加的标识符
private int flags = 1;//用于标记终态是否需要指针后移一位,0,需要;1,不需要
public MyModel() {
}
public MyModel(String source){
//接受源代码,并以StringBuffer的形式存储
this.source = source;
SBSource = new StringBuffer(source);
analysis();
}
public void analysis(){
//对源代码进行分析
System.out.println(source.length());
while(begin < source.length()){
SBTarget.append(nextToken() +‘\n‘);
lexBuf.delete(0 lexBuf.length());
start = state = 0;
System.out.println(begin + “w“);
}
System.out.println(begin);
System.out.println(source.length());
System.out.println(forward);
}
public String nextToken(){
//词法分析器的核心代码,根据状态转化图,对每一个词素进行识别,并将记号及其属性返回
/**
* case 0~16:完成对运算符的识别
* case 17~19:完成对标识符的识别,并通过查找符号表,实现关键字的判断
*/
while(true){
switch(state){
case 0: c = nextChar();
if(c == ‘ ‘||c == ‘\t‘|| c == ‘\n‘){
state = 0;
forward = ++begin;
System.out.println(forward);
}
else{
switch(c){
case ‘<‘: state = 13; break;
case ‘>‘: state = 15; break;
case ‘-‘: state = 3; break;
case ‘!‘: state = 4; break;
case ‘+‘: state = 5; break;
case ‘*‘: state = 6; break;
case ‘/‘: state = 7; break;
case ‘%‘: state = 8; break;
case ‘=‘: state = 9; break;
case ‘&‘: state = 10; break;
case ‘^‘: state = 11; break;
case ‘|‘: state = 12; break;
case ‘#‘:
case ‘(‘:
case ‘)‘:
case ‘[‘:
case ‘]‘:
case ‘{‘:
case ‘}‘:
case ‘“‘:
case ‘.‘:
case ‘~‘:
case ‘?‘:
case ‘:‘:
case ‘;‘:
case ‘‘: state = 1; break;
default: state = fail();
}
}
break;
case 1:
return final_state();
case 2:
flags = 0;
return final_state();
case 3:
lexBuf.append(c);
forward++;
c = nextChar();
switch(c){
case ‘>‘:
case ‘-‘:
case ‘=‘: state = 1;break;
default: state = 2;
}
break;
case 4:
lexBuf.append(c);
forward++;
c = nextChar();
if(c == ‘=‘) state = 1;
else state = 2;
break;
case 5:
lexBuf.append(c);
forward++;
c = nextChar();
switch(c){
case ‘+‘:
case ‘=‘: state = 1;break;
default: state = 2;
}
break;
case 6:
lexBuf.append(c);
forward++;
c = nextChar();
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2010-10-17 23:29 C语言词法分析器\
文件 11654 2010-10-17 22:49 C语言词法分析器\analysis.jar
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\
文件 386 2010-10-17 22:47 C语言词法分析器\MyAnalysis\.classpath
文件 1043 2010-10-17 22:47 C语言词法分析器\MyAnalysis\.project
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\.settings\
文件 493 2010-10-17 22:46 C语言词法分析器\MyAnalysis\.settings\.jsdtscope
文件 629 2010-10-14 20:26 C语言词法分析器\MyAnalysis\.settings\org.eclipse.jdt.core.prefs
文件 240 2010-10-17 22:47 C语言词法分析器\MyAnalysis\.settings\org.eclipse.wst.common.component
文件 229 2010-10-17 22:47 C语言词法分析器\MyAnalysis\.settings\org.eclipse.wst.common.project.facet.core.xm
文件 49 2010-10-17 22:46 C语言词法分析器\MyAnalysis\.settings\org.eclipse.wst.jsdt.ui.superType.container
文件 6 2010-10-17 22:46 C语言词法分析器\MyAnalysis\.settings\org.eclipse.wst.jsdt.ui.superType.name
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\bin\
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\bin\com\
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\bin\com\ant\
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\bin\com\ant\model\
文件 6793 2010-10-17 21:59 C语言词法分析器\MyAnalysis\bin\com\ant\model\MyModel.class
文件 1376 2010-10-17 15:21 C语言词法分析器\MyAnalysis\bin\com\ant\model\SymTable$Symbol.class
文件 4589 2010-10-17 15:21 C语言词法分析器\MyAnalysis\bin\com\ant\model\SymTable.class
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\bin\com\ant\viewer\
文件 724 2010-10-15 07:30 C语言词法分析器\MyAnalysis\bin\com\ant\viewer\MyAnalyor$1.class
文件 723 2010-10-15 07:30 C语言词法分析器\MyAnalysis\bin\com\ant\viewer\MyAnalyor$2.class
文件 746 2010-10-15 07:30 C语言词法分析器\MyAnalysis\bin\com\ant\viewer\MyAnalyor$3.class
文件 3377 2010-10-15 07:30 C语言词法分析器\MyAnalysis\bin\com\ant\viewer\MyAnalyor.class
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\bin\me
文件 39 2010-10-17 22:47 C语言词法分析器\MyAnalysis\bin\me
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\src\
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\src\com\
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\src\com\ant\
目录 0 2010-10-17 23:29 C语言词法分析器\MyAnalysis\src\com\ant\model\
文件 8680 2010-10-17 21:59 C语言词法分析器\MyAnalysis\src\com\ant\model\MyModel.java
............此处省略6个文件信息
- 上一篇:韵达物流管理系统
- 下一篇:JSP+SQL水费管理系统
相关资源
- 编译原理课程设计-java版
- 编译原理 C、Java语言词法分析器java实
- 广州大学编译原理实验报告1-3.zip
- 编译原理实验 词法分析设计 MFC
- 语义分析—编译原理
- java编写的算符优先分析法分析器
- 华中科技大学 编译原理 面向过程的
- 山东大学编译原理实验报告含代码
- Compiler_mean3tmp.rar
- 西安交通大学编译原理实验代码及报
- 编译原理第3版[刘铭][实验程序源代码
- 用Java做编译原理正规式转换成NFA.ra
- 编译原理课程设计含报告和可运行源
- 词法分析器实现java和c++
- 编译原理课程设计(附报告和可运行
- 现代编译原理虎书,包含c版和java版中
- 现代编译器的Java实现.(美)Andrew.W
- 编译原理java实现所需jar包-个人博客文
- 编译原理-虎书-龙书-鲸书
- C语言词法分析器(Java版.带界面)
- java编写的LR语法分析器编译原理实验
- 词法分析器Java语言编写附实验报告
- JAVA 编译原理 SLR(1)算法模拟器
- java 中间代码生成 编译原理
- 编译原理词法分析器 java版
- java 写的 用优先函数分析 数学表达式
- 符号串的最左和最右推导
- 编译原理词法分析器实现Java带界面源
- 编译原理综合实习 JavaCC实现 可翻译
- 编译原理 王生原 董渊 书后源代码
评论
共有 条评论