⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ll1up_down.java

📁 LL(1)文法分析字符串
💻 JAVA
字号:
package sun;
import java.util.*;

import javax.swing.JOptionPane;
public class LL1up_down {

	/**
	 * LL(1)文法自上而下分析,判断输入符号串是否是此文法的句子,文法与分析表已知。
	 * 文法见书本P77例5.6,分析表见书本P79表5.1
	 */
	public static void main(String[] args) {
		
		Hashtable<String,String> analysisTab=new Hashtable<String,String>();
		AnalysisTable analysisTable=new AnalysisTable();
		analysisTable.AnalysisTab(analysisTab);
		
            //分析栈
			Stack<String> stackAnalysis=new Stack<String>();
			
		   //输入串栈
			Stack<String> stackLeft=new Stack<String>();	
			
			//步骤计数器
			int iCount=0;
			
			String left="";
			String right="";
			String strat=JOptionPane.showInputDialog(null, "输入文法识别符号:", "LL(1)文法", JOptionPane.INFORMATION_MESSAGE);
			String strValue=JOptionPane.showInputDialog(null, "输入待分析字符串:", "LL(1)文法", JOptionPane.INFORMATION_MESSAGE);

			//初始化分析栈&输入串
			stackAnalysis.push("#");
			stackAnalysis.push(strat);
			System.out.println("分析栈内的字符串为 "+stackAnalysis.toString()+"\n");
			strValue+="#";
			System.out.println("文法识别符号为 "+strat+"\n");
			System.out.println("待分析串为 "+strValue+"\n");
			for(int i=strValue.length()-1 ; i>=0 ; i -- ){
				stackLeft.push(strValue.substring(i, i+1));
			}
			System.out.println("符号栈内的字符串为 "+stackLeft.toString()+"\n");
			String output="分析表";
			output+="------------------------";
			System.out.println(output);
			
			//开始分析
			while(!stackAnalysis.empty()&& !stackLeft.empty()){
				left=stackAnalysis.pop().toString();
				
				right=stackLeft.pop().toString();
				
				iCount++;
				
			  if(analysisTab.get(left+right)!=""){
					if(!left.equals(right)){
						
						System.out.println(iCount + "\t" + stackAnalysis.toString() + left  + "\t\t" +
								right+ stackLeft.toString() + "\t"+"寻找产生式"+"\t"+left+" ::= "+analysisTab.get(left+right));
						
						for(int j=analysisTab.get(left+right).length()-1 ; j>=0 ; j--){
							
							//匹配就从右向左依次入栈
						    String strChar=analysisTab.get(left+right).substring(j,j+1);
						    
						    if(!strChar.equals("$"))
						    	stackAnalysis.push(strChar);
						    }	
						
						//把取出的字符串仍然送回
						stackLeft.push(right);
						}
					
					else{
						System.out.println(iCount + "\t" + stackAnalysis.toString()+ left + "\t\t" 
							+  right+stackLeft.toString() + "\t" + "'" + left + "'匹配" );
						
						if(left.equals("#")&&right.equals("#"))
							System.out.println(++iCount + "\t" + stackAnalysis.toString() + "\t\t" 
									+ stackLeft.toString() + "\t" + "分析成功" );
						
						}
					}
			
			else{
				System.out.println(++iCount + "\t" +  stackAnalysis.toString() + left + "\t" 
							+ right+ stackLeft.toString()+ "\t" + "分析不成功" );
				}
			
}
	}
}
		
			

	

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -