資源簡介
通過給定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? 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
評論
共有 條評論