资源简介
通过给定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
相关资源
- 编译原理实验工具及参考源码(lex&
- 类pascal语言编译器(编译原理实验)
- 编译原理课程设计:词法语法编译器
- 中科院 编译原理 习题及解答
- 编译原理四元式和逆波兰式
- 《编译原理》清华大学版中的pl0扩充
- PL/0功能扩充break功能
- 编译原理LR(0)语法分析
- 编译原理中间代码生成程序
- 编译原理:LR分析程序
- 编译原理实验:词法分析,语法分析
- 吉林大学编译原理课件
- 编译原理龙书答案
- 编译原理 第三章课后习题答案
- 易语言变量和数组的编译原理
- 编译原理语法分析器、词法分析器
- 山东大学编译原理PL/0语言 compiler实验
- FOR循环语句的翻译程序设计简单优先
- NFA的确定化NFA->DFA完整可运行代码
- 哈工大威海编译原理实验报告和源代
- 哈工大威海-编译原理实验报告和源码
- 编译原理课设c编译器
- 赋值语句翻译四元式
- 河北工业大学编译原理实验代码及实
- 编译原理课程设计 while do循环语句翻
- 编译原理课程设计do——while简单优先
- 南开大学编译原理课件及作业
- 华工往年编译原理试卷
- 编译原理课程设计for循环LR法三元式
- 哈工程-编译原理课程设计(2016级)
评论
共有 条评论