}
System.out.print("\t\t\t");
result+="\t\t\t"}
publicvoidanalysis(Stringline){//LL
(1)分析strChar=line.toCharArray();length=strChar.length;
StringanalysisString=newString();
charch=strChar[strPointer];chartopX;
intfinish=0,flag=0;
introw=0,column=0;
System.out.print("步骤\t\t分析栈\t\t剩余字符\t\t所用产生式\t\t动作\n");
result+="步骤\t\t分析栈\t\t剩余字符\t\t所用产生式\t\t动作\r\n";
dataStrings
[0][0]=
dataRow+++""
System.out
.print(
dataRow+"\t\t");
result+=
dataRow
+"\t\t";
printStack();
dataStrings
[0][1]=
tempString;
printStr();
dataStrings
[0][2]=
tempString;
dataStrings
[0][4]=
"初始化";
result+=
"\t\t
初始化\r\n";
System.out
.print(
"\n");
do{
topX=stack[top--];
dataStrings[dataRow][0]=dataRow+
System.out.print(dataRow+"\t\t");result+=dataRow+"\t\t";
for(inti=0;i<9;i++){//判断是否为非终结符
if(checkChar(topX)){
flag=1;break;
}}
if(flag==1){//如果是终结符
if(topX=='#'){finish=1;
System.out.println("over");result+="over\r\n";
break;
}
if(topX==ch){printStack();dataStrings[dataRow][1]=tempStringch=strChar[++strPointer];printStr();
dataStrings[dataRow][2]=tempString;
System.out.print("匹配\n");
dataStrings[dataRow][4]="GETNEXT(I)"result+="\t\tGETNEXT(I)\r\n"flag=0;
this.dataRow++;
}else{
printStack();
dataStrings[dataRow][1]=tempString;
printStr();
dataStrings[dataRow][2]=tempString;
System.out.print("错误\n");
result+="\t\t错误\r\n";
this.dataRow++;
break;
}
}else{
for(inti=0;i<6;i++){
if(topX==analysisTable[i][0].charAt(0)){row=i;break;
for(inti=0;i<9;i++){
if(ch==analysisTable[0][i].charAt(0)){column=i;break;
}
}
i--){
stack[++top]=analysisString.charAt(i);}
}
printStack();
dataStrings[dataRow][1]=tempString;
printStr();
dataStrings[dataRow][2]=tempString;
System.out.print(analysisTable[row][0]+dataStrings[dataRow][3]=
analysisTable[row][0]+"->"+analysisString;
result+=analysisTable[row][0]+"->"+analysisString;
if(!
analysisString.equals("「)){
dataStrings[dataRow][4]=
"POP,PUSH("+analysisString+")"result+=
}
if(stack[top]==''){
top--;
}
this.dataRow++;
}else{
printStack();
dataStrings[dataRow][1]=tempStringprintStr();
dataStrings[dataRow][2]=tempString
System.out.print("出错\n");result+="\t\t错误\r\n";
this.dataRow++;
break;
}
}
}while(finish==0);
}
publicString[][]getDataStrings(){returndataStrings;
}
publicvoidsetDataStrings(String[][]dataStrings){this.dataStrings=dataStrings;
}
publicintgetDataRow(){
returndataRow;
}
publicvoidsetDataRow(intdataRow){this.dataRow=dataRow;
}
publicStringgetResult(){
returnresult;
}
publicvoidsetResult(Stringresult){this.result=result;
}
}
2、界面类
packageLL1Analysis;
importjava.io.BufferedReader;
importjava.io.File;
importjava.io.FileReader;
importjava.io.FileWriter;
importorg.eclipse.swt.widgets.Display;
importorg.eclipse.swt.widgets.FileDialog;
importorg.eclipse.swt.widgets.MessageBox;
importorg.eclipse.swt.widgets.Shell;
importorg.eclipse.swt.widgets.Menu;
importorg.eclipse.swt.widgets.TableItem;
importorg.eclipse.swt.SWT;
importorg.eclipse.swt.widgets.MenuItem;
importorg.eclipse.swt.custom.ScrolledComposite;
importorg.eclipse.swt.widgets.Text;
importorg.eclipse.swt.widgets.Table;
importorg.eclipse.swt.widgets.TableColumn;
importorg.eclipse.swt.events.SelectionAdapter;
importorg.eclipse.swt.events.SelectionEvent;
publicclassLL1SWT{
protectedShellshell;privateTexttext;
privateTexttext_1;
privateTabletable;
privateMessageBoxmessageBox;privateFilesourceFile=nullprivateLL1_OpertionmOpertion
privateString
Language=newString();
=newString();
privateStringanalysisString
privateString
result=newString();
/**
*Launchtheapplication.
*@paramargs
*/
publicstaticvoidmain(String[]args){try{
LL1SWTwindow=newLL1SWT();window.open();
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*Openthewindow.*/
getDefault();
publicvoidopen(){Displaydisplay=Display.createContents();shell.open();
shell.layout();
while(!
shell.isDisposed()){
if(!
display.readAndDispatch()){display.sleep();
}
/**
*Createcontentsofthewindow.
*/
protectedvoidcreateContents(){
shell=newShell();
shell.setSize(570,424);
shell.setText("LL
(1)\u5206\u6790\u5668");
Menumenu=newMenu(shell,SWT.BAR);
shell.setMenuBar(menu);
MenuItemmenuItem=newMenuItem(menu,SWT.NONE);
menuItem.addSelectionListener(newSelectionAdapter(){@Override
publicvoidwidgetSelected(SelectionEvente){
try{
newTextTable();
}catch(Exceptione2){
e2.printStackTrace();
}
}
});
menuItem.setText("\u65B0\u5EFA");
MenuItemmenuItem_1=newMenuItem(menu,SWT.NONE);menuItem_1.addSelectionListener(newSelectionAdapter(){@Override
publicvoidwidgetSelected(SelectionEvente){
openFile();
}
});
menuItem_1.setText("\u6253\u5F00");
MenuItemmenuItem_3=newMenuItem(menu,SWT.NONE);menuItem_3.addSelectionListener(newSelectionAdapter(){@Override
publicvoidwidgetSelected(SelectionEvente){try{analysis();
}catch(Exceptione2){e2.printStackTrace();
}
}
});menuItem_3.setText("\u5206\u6790");
MenuItemmenuItem_2=newMenuItem(menu,SWT.NONE);menuItem_2.addSelectionListener(newSelectionAdapter(){@Override
publicvoidwidgetSelected(SelectionEvente){saveFile();
}
});menuItem_2.setText("\u4FDD\u5B58");
MenuItemmenuItem_4=newMenuItem(menu,SWT.NONE);menuItem_4.addSelectionListener(newSelectionAdapter(){@O