资源简介
参照C语言版本,用Java写的语义分析程序,采用递归下降分析法,对算术表达式、赋值语句进行语义分析并生成四元式序列。在实验三递归下降分析法的基础上改的。
用Eclipse做的,有运行结果截图。
代码片段和文件信息
package org.test;
import java.util.ArrayList;
import org.test.WordAnalyzer;
public class SemanticAnalyzer {
WordAnalyzer wa = new WordAnalyzer();
private int tempIndex = 1;
private boolean isError = false;
class Quadruple {//用内部类表示四元式
String result;
String ag1;
String op;
String ag2;
public Quadruple(String result String ag1) {
this.result = result;
this.ag1 = ag1;
this.op = ““;
this.ag2 = ““;
}
public Quadruple(String result String ag1 String op String ag2) {
this.result = result;
this.ag1 = ag1;
this.op = op;
this.ag2 = ag2;
}
}
ArrayList quadList = new ArrayList();//四元式序列
public String newtemp() {//生成临时变量
return “t“ + tempIndex++;
}
public int lrparser() {
int schain = 0;
if (wa.syn == 1) {
wa.scaner();
schain = yujuchuan();
if (wa.syn == 6) { // “end”
wa.scaner();
if (wa.syn == 0 && isError == false) // “end”之后是“#”并且没有出错,则分析成功
System.out.println(“语义分析成功!“);
} else {
if (isError == false) // 之前分析都成功,但没有“end”
System.out.println(“语义分析出错!缺少“end”“);
isError = true;
}
} else {
System.out.println(“语义分析出错!缺少“begin”“);
isError = true;
}
return (schain);
}
public int yujuchuan() {//分析语句串
int schain = 0;
schain = statement(); // 分析第一条语句
while (wa.syn == 26) {// 为“;”时,分析下一条语句
wa.scaner();
if (wa.syn == 6)
break;
schain = statement();
}
return (schain);
}
public int statement() {//分析语句
int schain=0;
String txex;
if (wa.syn == 10) { //语句的开始是标识符,读下一个单词符号
tx = wa.token.toString();
wa.scaner();
if (wa.syn == 18) { //为“:=” 赋值时,分析表达式
wa.scaner();
ex = expression();
quadList.add(new Quadruple(tx ex));
schain = 0;
} else {
System.out.println(“语义分析出错!表达式错误“);
isError = true;
}
} else {
System.out.println(“语义分析出错!语句错误“);
isError = true;
}
return schain;
}
public String expression() {//分析表达式
String txe1e2op;
e1 = term(); //分析第一项
while (wa.syn == 13 || wa.syn == 14) { // 为“+”或“-”时,分析下一项
op = wa.token.toString();
wa.scaner();
e2 = term();
tx = newtemp();
quadList.add(new Quadruple(tx e1 op e2));
e1 = tx;
}
return(e1);
}
public String term() {//分析项
String txe1e2op;
e1 = factor(); //分析第一个因子
while (wa.syn == 15 || wa.syn == 16) { //为“*”或“/”时,分析下一个因子
op = wa.token.toString();
wa.scaner();
e2 = factor();
tx = newtemp();
quadList.add(new Quadruple(tx e1 op e2));
e1 = tx;
}
return(e1);
}
public String factor() {//分析因子
String fx = ““;
if (wa.syn == 10) { //为标识符时,这一项分析结束
fx = wa.token.toString();
wa.scaner();
} else if( wa.syn == 11) {//为整数时,这一项分析结束
fx += wa.sum;
wa.scaner();
} else if (wa.syn == 27) { //为“(”时,分析“(”里的表达式
wa.scaner();
fx = expression();
if (wa.syn == 28) //表达式分析结束且下一个单词符号为“)”时,这一项分析结束
wa.scan
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 301 2017-12-31 16:59 .classpath
文件 398 2017-12-31 16:59 .project
目录 0 2017-12-31 16:59 .settings\
文件 598 2017-12-31 16:59 .settings\org.eclipse.jdt.core.prefs
目录 0 2017-12-31 16:59 src\
目录 0 2017-12-25 10:08 src\org\
目录 0 2017-12-25 10:08 src\org\test\
文件 4353 2018-01-20 22:45 src\org\test\SemanticAnalyzer.java
文件 2289 2017-12-25 09:59 src\org\test\WordAnalyzer.java
文件 8726 2017-12-25 22:27 实验结果.PNG
- 上一篇:编译原理实验三语义分析JavaCC代码
- 下一篇:JAVA考试试题
相关资源
- 编译原理课程设计-java版
- 编译原理 C、Java语言词法分析器java实
- 广州大学编译原理实验报告1-3.zip
- 编译原理实验 词法分析设计 MFC
- 语义分析—编译原理
- java编写的算符优先分析法分析器
- 华中科技大学 编译原理 面向过程的
- 山东大学编译原理实验报告含代码
- Compiler_mean3tmp.rar
- 西安交通大学编译原理实验代码及报
- 编译原理第3版[刘铭][实验程序源代码
- 用Java做编译原理正规式转换成NFA.ra
- 编译原理课程设计含报告和可运行源
- 词法分析器实现java和c++
- 语义分析实验(java版
- 编译原理课程设计(附报告和可运行
- 现代编译原理虎书,包含c版和java版中
- 现代编译器的Java实现.(美)Andrew.W
- 编译原理java实现所需jar包-个人博客文
- 编译原理-虎书-龙书-鲸书
- java编写的LR语法分析器编译原理实验
- 基于MiniC的语义分析Javacc实现
- JAVA 编译原理 SLR(1)算法模拟器
- java 中间代码生成 编译原理
- 编译原理词法分析器 java版
- java 写的 用优先函数分析 数学表达式
- 符号串的最左和最右推导
- 编译原理词法分析器实现Java带界面源
- 用java语言编写的递归下降语法分析器
- 编译原理综合实习 JavaCC实现 可翻译
评论
共有 条评论