this.tempString+=strChar[i];
System.out.print(strChar[i]);
result+=strChar[i];
}
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]=tempString;
ch=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;
}
}
analysisString=analysisTable[row][column];
if(!
analysisString.equals("")){
if(!
analysisString.equals("ε")){
for(inti=analysisString.length()-1;i>=0;i--){
stack[++top]=analysisString.charAt(i);
}
}
printStack();
dataStrings[dataRow][1]=tempString;
printStr();
dataStrings[dataRow][2]=tempString;
System.out.print(analysisTable[row][0]+"->"+analysisString+"\n");
dataStrings[dataRow][3]=analysisTable[row][0]+"->"+analysisString;
result+=analysisTable[row][0]+"->"+analysisString;
if(!
analysisString.equals("ε")){
dataStrings[dataRow][4]="POP,PUSH("+analysisString+")";
result+="\t\tPOP,PUSH("+analysisString+")\r\n";
}else{
dataStrings[dataRow][4]="POP";
result+="\t\tPOP\r\n";
}
if(stack[top]==''){
top--;
}
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;
}
}
}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=null;
privateLL1_OpertionmOpertion;
privateStringLanguage=newString();
privateStringanalysisString=newString();
privateStringresult=newString();
/**
*Launchtheapplication.
*@paramargs
*/
publicstaticvoidmain(String[]args){
try{
LL1SWTwindow=newLL1SWT();
window.open();
}catch(Exceptione){
e.printStackTrace();
}
}
/**
*Openthewindow.
*/
publicvoidopen(){
Displaydisplay=Display.getDefault();
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{