资源简介
通过给定LR分析表,对输入的字符串进行分析,输出字符串在给定LR分析表下的分析过程
代码片段和文件信息
package courseDesign;
import java.util.linkedList;
/**
*
* @author YLS
*
*/
public class SLR1Anilays {
//(频繁的增删操作使用链表可以提升速度)
/*状态栈*/
private linkedList stateStack = new linkedList();
/*符号栈*/
private linkedList symbolStack = new linkedList();
/*输入串*/
private String inputStr = “i*i+i#“;
/*分析过程的结果表*/
private linkedListnkedList> anilysisResult = new linkedListnkedList>();
/*分析结果表的行*/
private linkedList resultRow = null;
private SLR1AnilaysTable slr1AnilaysTable = new SLR1AnilaysTable();
private int step = 0;//步骤;
private int statusIndex = 0;//状态栈中的索引(0i)
private String operate = ““;
public static void main(String[] args) {
SLR1Anilays slr1Anilays = new SLR1Anilays();
System.out.println(“输入SLR1分析表:\n“);
slr1Anilays.slr1AnilaysTable.printTable();
System.out.println(“\n\n输入分析串:\n“+slr1Anilays.inputStr);
System.out.println(“\n\n输出串分析过程:“);
slr1Anilays.run();
for (linkedList result : slr1Anilays.anilysisResult) {
for (int i = 0; i < result.size(); i++) {
if (i == 0) {
System.out.printf(“%-8s“ result.get(i));
}else if (i == 3|| i == 4) {
System.out.printf(“%-12s“ result.get(i));
}else {
System.out.printf(“%-20s“ result.get(i));
}
}
System.out.println();
}
}
public void run() {
System.out.printf(“%-13s“ “步骤“);
System.out.printf(“%-42s“ “状态栈“);
System.out.printf(“%-41s“ “符号栈“);
System.out.printf(“%-20s“ “输入串“);
System.out.printf(“%-12s“ “ACTION“);
System.out.printf(“%-20s\n“ “GOTO“);
String temp = ““;
stateStack.addFirst(0);//状态栈的初始值
symbolStack.addFirst(“#“);//符号栈中初始值
for (int i = 0; i <= inputStr.length();) {//输入串
if (inputStr.length() == 0) {
break;
}
temp = inputStr.substring(0 1);
statusIndex = stateStack.getLast();
if (statusIndex < 0) {
stateStack.removeLast();
statusIndex = stateStack.getLast();
}
//action或者goto操作(Si或者ri)
operate = slr1AnilaysTable.getSTATUS().get(statusIndex).get(temp);
if (slr1AnilaysTable.formatMoveIn(operate) >= 0) {
moveIn(temp);
i++;
} else if (slr1AnilaysTable.formatMoveOutState(operate) > 0) {//规约
i --;
while(true) {
if ((stateStack.getLast() <= 0 || slr1AnilaysTable.formatMoveIn(operate) >= 0) || (slr1AnilaysTable.formatMoveOutState(operate) < 0)) {//循环出口
moveIn(temp);
break;
}
moveOut();
operate = slr1AnilaysTable.getSTATUS().get(stateStack.getLast()).get(temp);
}
}
}
}
/**
* 移进操作
*/
public void moveIn(String temp) {
resultRow = new linkedList();
resultRow.add(String.valueOf(++step));//步骤
resultRow.add(stateStack.toString());//状态列
resultRow.add(symbolStack.toString().replace(‘‘ ‘ ‘));//符号列
resultRow.add(inputStr);//输入串
resultRow.add(operate);//ACTION操作
resultRow.add(““);//GOTO操作
stateStack.add(
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 232 2017-05-04 18:44 SLR1\.classpath
文件 380 2017-05-04 18:44 SLR1\.project
文件 4732 2017-05-04 18:45 SLR1\bin\courseDesign\SLR1Anilays.class
文件 8074 2017-05-04 18:45 SLR1\bin\courseDesign\SLR1AnilaysTable.class
文件 4559 2017-05-04 18:45 SLR1\src\courseDesign\SLR1Anilays.java
文件 9318 2017-05-04 18:45 SLR1\src\courseDesign\SLR1AnilaysTable.java
目录 0 2017-05-04 18:45 SLR1\bin\courseDesign
目录 0 2017-05-04 18:45 SLR1\src\courseDesign
目录 0 2017-05-04 18:45 SLR1\bin
目录 0 2017-05-04 18:45 SLR1\src
目录 0 2017-05-04 18:44 SLR1
----------- --------- ---------- ----- ----
27295 11
相关资源
- 哈工大软件学院编译原理语法分析源
- 2013集美大学编译原理部分考试题目
- 编译原理词法、语法、语义分析器
- 编译原理词法分析程序代码
- 湖南农大-编译原理2010期末考试试卷
- 编译原理实验 语义分析与中间代码
- 编译原理 语法分析器
- 编译原理目标代码
- 无符号数的词法分析程序
- 编译原理实验代码四则表达式编译及
- 西安电子科技大学编译原理大作业C
- 河北工业大学编译原理实验
- 编译原理课程设计——编译器
- 递归下降分析法的实现
- 词法分析器含代码及实验报告
- 编译原理课程设计含报告,源程序和
- 语义分析实验报告 经典
- 西安电子科技大学编译原理大作业代
- 编译原理文法的预测分析法
- 哈工大编译原理实验三次合一
- 编译原理实验----词法分析、分析预测
- 编译原理课程设计+源代码
- 四川大学编译原理课程设计报告C-词法
- 编译原理,词法分析&语法分析及源代
- 赋值语句词法和语法分析程序
- 《编译原理》课程设计指导书 算术表
- 常州工学院编译原理试卷A
- yacc实现的语法分析器
- 编译原理实验报告
- 编译原理实验报告 词法分析器实验报
评论
共有 条评论