• 大小: 9KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-07-19
  • 语言: 其他
  • 标签: 编译原理  

资源简介

通过给定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


评论

共有 条评论