资源简介
编译原理 LL1语法分析器:
用JAVA写的一个简单语法分析器;
输入一个表达式,输出表达式判断的结果。
代码片段和文件信息
package re.sa;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class LL1SA {
/*
* 原始文法:
*
* E→E+T|E/T|T
* T→T-F|T*F|F
* F→(E)|i
*/
/*
* 消除左递归
*
* E→TM
* M→+TM|/TM|ε
* T→FN
* N→-FN|*FN|ε
* F→(E)|i
*/
/*
* 求First集和Follow集
*
* First(E)={(i} Follow(E)={)#}
* First(T)={(i} Follow(T)={+/#}
* First(F)={(i} Follow(F)={-*#}
* First(M)={+/ε} Follow(M)={)#}
* First(N)={-*ε} Follow(N)={+/#}
*/
// 构造预测分析表
private String[] Vt = {“+“ “/“ “-“ “*“ “(“ “)“ “i“};
private String[] Vn = {“E“ “T“ “F“ “M“ “N“};
private String[][] M = {
//+=0 /=1 -=2 *=3 (=4 )=5 i=6 #=7
{ ““ ““ ““ ““ “TM“ ““ “TM“ ““} //E=0
{ ““ ““ ““ ““ “FN“ ““ “FN“ ““} //T=1
{ ““ ““ ““ ““ “(E)“ ““ “i“ ““} //F=2
{ “+TM“ “/TM“ ““ ““ “ε“ ““ ““ “ε“} //M=3
{ “ε“ “ε“ “-FN“ “*FN“ ““ ““ ““ “ε“} //N=4
};
//开始分析
private String[] stack = new String[256];
private String stack_top;
private int stack_ptr = -1;
private int ptr = 0;
private char c_temp;
private int Vt_code;
private int Vn_code;
private void get_char(String sentence){
c_temp = sentence.charAt(ptr);
ptr++;
if(c_temp == ‘+‘){
Vt_code = 0;
}else if(c_temp == ‘/‘){
Vt_code = 1;
}else if(c_temp == ‘-‘){
Vt_code = 2;
}else if(c_temp == ‘*‘){
Vt_code = 3;
}else if(c_temp == ‘(‘){
Vt_code = 4;
}else if(c_temp == ‘)‘){
Vt_code = 5;
}else if(c_temp == ‘i‘){
Vt_code = 6;
}else if(c_temp == ‘#‘){
Vt_code = 7;
}
}
private void push(String str){
stack_ptr++;
stack[stack_ptr] = str;
}
private void pull(){
stack_top = stack[stack_ptr];
stack[stack_ptr] = null;
stack_ptr--;
if(stack_top.equals(“E“)){
Vn_code = 0;
}else if(stack_top.equals(“T“)){
Vn_code = 1;
}else if(stack_top.equals(“F“)){
Vn_code = 2;
}else if(stack_top.equals(“M“)){
Vn_code = 3;
}else if(stack_top.equals(“N“)){
Vn_code = 4;
}
}
private boolean isVt(String str){
for(int i = 0; i < Vt.length; i++){
if(str.equals(Vt[i])){
return true;
}
}
return false;
}
private boolean isVn(String str){
for(int i = 0; i < Vn.length; i++){
if(str.equals(Vn[i])){
return true;
}
}
return false;
}
public boolean SyntaxAnalyse(String sentence){
push(“#“);
push(“E“);
get_char(sentence);
boolean flag = true;
while(flag){
pull();
if(isVt(stack_top)){
if(stack_top.equals(String.valueOf(c_temp))){
get_char(sentence);
}else{
return false;
}
}else if(stack_top.equals(“#“)){
if(stack_top.equals(String.valueOf(c_temp))){
flag = false;
}else{
return false;
}
}else if(M[Vn_code][Vt_code] != null){
if(!M[Vn_code][Vt_code].equals(“ε“)){
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
.CA.... 3818 2009-06-04 14:56 sa\LL1SA.java
目录 0 2009-06-04 14:57 sa
----------- --------- ---------- ----- ----
3818 2
相关资源
- 编译原理课程设计-java版
- 编译原理 C、Java语言词法分析器java实
- 广州大学编译原理实验报告1-3.zip
- 用Java实现的基于SNL语言的词法分析与
- 编译原理实验 词法分析设计 MFC
- 语义分析—编译原理
- java编写的算符优先分析法分析器
- 华中科技大学 编译原理 面向过程的
- 山东大学编译原理实验报告含代码
- Compiler_mean3tmp.rar
- 西安交通大学编译原理实验代码及报
- 编译原理第3版[刘铭][实验程序源代码
- 用Java做编译原理正规式转换成NFA.ra
- 编译原理课程设计含报告和可运行源
- 词法分析器实现java和c++
- 语法分析器Java语言编写附实验报告
- java开发的基于LL1文法的语法分析器
- 编译原理课程设计(附报告和可运行
- 现代编译原理虎书,包含c版和java版中
- 现代编译器的Java实现.(美)Andrew.W
- 编译原理java实现所需jar包-个人博客文
- 编译原理-虎书-龙书-鲸书
- LL1语法分析代码有详细解释,压缩包
- java编写的LR语法分析器编译原理实验
- java实现的语法分析程序
- JAVA 编译原理 SLR(1)算法模拟器
- Java实现具有词法匹配、语法分析和中
- java 中间代码生成 编译原理
- 编译原理词法分析器 java版
- java 写的 用优先函数分析 数学表达式
评论
共有 条评论