亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? parsingtree.java

?? java寫的詞法和語法分析器
?? JAVA
字號:
/*******************
 * class name: ParsingTree
 * task:	generaing a parsing tree for the grammar and the program.
 * @author Administrator
 */
package cminus;

import java.util.*;
import java.io.*;

class ParsingTree extends ParsingTable {
	//stack for storing tokens int the program
	public Stack stackToken = new Stack();
	//stack for storing token types int the program
	public Stack stackTokenType = new Stack();
	//token file which stored tokens in the program.
	public String tokenFile;
	//token type file which stored token types in the program
	public String tokenTypeFile;
	//the root node of parsing tree
	public ParsingTreeNode root;
	/**
	 * construct function.
	 * @param filename:String  -file which storing the grammar .
	 */
	public ParsingTree(String filename) {
		super(filename);
	}
	
	/**
	 * set the token file generated by the scanner.
	 * @param file:String  -file name of the tokens.
	 */
	public void setTokenFile(String file) {
		this.tokenFile = file;
	}
	/**
	 * set the token type file generated by the scanner.
	 * @param file:String  -file name of the tokens.
	 */
	public void setTokenTypeFile(String file) {
		this.tokenTypeFile = file;
	}
	
	/** 
	 * get toknes from token file to the token stack.
	 */
	public void setStackToken() {
		
		this.setTokenFile("tokenFile");
		
		Stack tmp = new Stack();
		try {
			fileIn = new BufferedReader(new FileReader(this.tokenFile));
		} catch (IOException e) {
			System.out.println("File can not found: " + e.getMessage());
		}
		try {
			String line = fileIn.readLine();
			while (line != null && (!line.equals(""))) {
				tmp.push(line.trim());
				line = fileIn.readLine();
			}
			this.stackToken.push("Line--1 $");
			while(!tmp.empty()){
				this.stackToken.push(tmp.pop());
			}
		} catch (IOException e) {
			System.out.println("File read error:" + e.getMessage());
		} finally{
			try{
				fileIn.close();
			}catch(Exception e){}
		}
	}
	
	/** 
	 * get tokne types from token type file to the token type stack.
	 */
	public void setStackTokenType() {
		this.setTokenTypeFile("tokenTypeFile");
		
		Stack tmp = new Stack();
		try {
			fileIn = new BufferedReader(new FileReader(this.tokenTypeFile));
		} catch (IOException e) {
			System.out.println("File can not found: " + e.getMessage());
		}
		try {
			String line = fileIn.readLine();
			while (line != null && (!line.equals(""))) {
				tmp.push(line.trim());
				line = fileIn.readLine();
			}
			this.stackTokenType.push("Line--1 $");
			while(!tmp.empty()){
				this.stackTokenType.push(tmp.pop());
			}
		} catch (IOException e) {
			System.out.println("File read error:" + e.getMessage());
		} finally{
			try{
				fileIn.close();
			}catch(Exception e){}
		}
	}
	
	/**
	 * Generate the parsing tree ,the tree is stored in memory , 
	 * and if get the root node, means get the tree.
	 *
	 */
	public void parsingAction() {
		Stack parsingStack = new Stack();
		ParsingTreeNode first  = new ParsingTreeNode();
		first.data = "$";
		parsingStack.push(first);
		//generating the root node of the parsing tree
		this.root = new ParsingTreeNode();
		String rootData =(String)this.listGrammar[0].get(0); 
		root.data = rootData;
		parsingStack.push(root);
		try{
		//Get the top value on the parsing stack
		ParsingTreeNode stackGot = (ParsingTreeNode)parsingStack.get(parsingStack.size()-1);
		String stackGotData = stackGot.data.trim();
		while(!stackGotData.equals("$")){
			String tmp1 = (String)this.stackTokenType.get(this.stackToken.size()-1);
			String tmp2[] = tmp1.split(" ");
			String tokenTypeStackPoped = tmp2[1].trim();
			// if the top of the parsing stack is terminal tokenTypeStackPoped
			// and it is equals with the top the token type stack
			if(this.tokenPro.isTerminal(stackGotData)&& stackGotData.equals(tokenTypeStackPoped)){
				//match;
				parsingStack.pop();	//pop the parsing stack
				this.stackTokenType.pop();//advanced the input
				String tmp3 = (String)this.stackToken.pop();
				String tmp4[] = tmp3.split(" ");
				String tokenStackPoped = tmp4[1].trim();
				if(!tokenTypeStackPoped.equals(tokenStackPoped)){
					ParsingTreeNode tmp = new ParsingTreeNode();
					tmp.data = tokenStackPoped;
					stackGot.child[0] = tmp;
				}
			}
			// else if the top of the stack is nonterminal and 
			// the top of the token type stack is terminal or is '$'
			else if((!this.tokenPro.isTerminal(stackGotData))&&
					(this.tokenPro.isTerminal(tokenTypeStackPoped)||tokenTypeStackPoped.equals("$"))
					){
				String tableContent = this.parsingTable[this.listNonTerminals.indexOf(stackGotData)]
				                                        [this.listTerminals.indexOf(tokenTypeStackPoped)];
				if(tableContent != null && !tableContent.equals("")&&tableContent.length()>0){
					//generate;
					parsingStack.pop();//pop the parsing stack
					
					//reserved the sequence and push to the stack
					String left[] = tableContent.split("→");
					String right[] = left[1].split(" ");
					ParsingTreeNode nodes[] = new ParsingTreeNode[right.length];
					for (int i = 0; i < left.length; i++) {
						left[i] = left[i].trim();
					}
					for (int i = 0; i < right.length; i++) {
						right[i] = right[i].trim();
						nodes[i] = new ParsingTreeNode();
						nodes[i].data = right[i];
					}
					for(int i = right.length-1;i>=0;i--){
						if(stackGot.child[i] == null){
							stackGot.child[i] = new ParsingTreeNode();
							stackGot.child[i] = nodes[i];
							if(!nodes[i].data.equalsIgnoreCase("EMPTY")){
								parsingStack.push(nodes[i]);
							}
						}
						else{
							stackGot.child[i] = nodes[i];
							if(!nodes[i].data.equalsIgnoreCase("EMPTY")){
								parsingStack.push(nodes[i]);
							}
						}
					}
					//pushing to parsing stack has done!
				}
				else{
					System.err.println("-----------------------------------------------------");
					System.err.println("Error: \n\t1.Syntax error has taken place at line: "+tmp2[0].substring(5));
					System.err.println("-----------------------------------------------------");
					try{
						System.in.read();
						System.exit(0);
					}catch(IOException e){
						e.printStackTrace();
					}
				}
			}
			else {
				System.err.println("Generating parsing tree error...");
			}
			stackGot = (ParsingTreeNode)parsingStack.get(parsingStack.size()-1);
			stackGotData = stackGot.data.trim();
		}//end of while
		String tmp6 = (String)this.stackTokenType.get(this.stackToken.size()-1);
		String tmp7[] = tmp6.split(" ");
		String tokenTypeStackPoped  = tmp7[1];
		if(stackGotData.equals("$")&&tokenTypeStackPoped.equals("$")){
			//accept();
			System.out.println("The operation of generating parsing tree has done!");
		}
		else{
			System.err.println("Generating parsing tree error...");
		}
		}
		catch(IndexOutOfBoundsException e){
			System.err.println("Index out of bounds error [parsingAction]:"+e.getMessage());
		}catch(NullPointerException e){
			System.err.println("Null pointer exception "+e.getMessage());
		}
		catch(Exception e){
			System.err.println("Generating parsing tree error:"+e.getMessage());
		}
		
	}//end of function

	/**
	 * Anonymous class for ParsingTree.
	 * The class definit the tree node for parsing tree.
	 * @author Administrator
	 *
	 */
	public class ParsingTreeNode {
		public String data;
		ParsingTreeNode [] child ;
		public ParsingTreeNode(){
			int count = getMaxChildNum();
			child = new ParsingTreeNode[count];
			this.data = null;
		}
		boolean isLeaf(){
			boolean isleaf = false;
			for(int i = 0;i<this.child.length;i++){
				if(child[i]==null){
					isleaf = true;
				}else{
					isleaf = false;
					break;
				}
			}
			return isleaf;
		}
	}
	
	/**
	 * the main function ,just for testing use.
	 * @param args--not used.
	 */
	public static void main(String args[]) {
		ParsingTree tree  = new ParsingTree("test10");
		tree.setStackToken();
		tree.setStackTokenType();
		tree.parsingAction();
		System.out.println("done");
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久久久久黄色| 美女脱光内衣内裤视频久久网站| 中文在线资源观看网站视频免费不卡| 天天综合网 天天综合色| 欧美日韩日日夜夜| 爽好久久久欧美精品| 91精品国产免费久久综合| 青青草国产成人av片免费| 精品国产乱码久久久久久夜甘婷婷| 狠狠色丁香久久婷婷综| 久久久久久久久99精品| 成人91在线观看| 一区二区在线观看视频| 欧美一区二区三区公司| 国产一区二区三区四区五区美女 | 成人黄动漫网站免费app| 欧美激情中文字幕| 91色.com| 日韩和欧美的一区| 国产亚洲va综合人人澡精品 | 国产欧美精品一区aⅴ影院| www.视频一区| 午夜激情综合网| 久久久久久久久蜜桃| 一本大道久久a久久精品综合| 亚洲3atv精品一区二区三区| 日韩一二三区不卡| 高清久久久久久| 亚洲午夜一二三区视频| 精品国产乱码久久久久久久久| 成人午夜视频在线| 午夜日韩在线观看| 欧美精彩视频一区二区三区| 91黄视频在线| 国内精品嫩模私拍在线| 亚洲毛片av在线| 日韩一区二区不卡| 97国产一区二区| 精品一区二区免费| 亚洲综合色成人| 国产视频一区二区三区在线观看| 欧美偷拍一区二区| 成人性生交大片免费看中文| 日韩国产精品大片| 亚洲素人一区二区| 精品国产乱码久久久久久影片| 91国产成人在线| 成人午夜在线播放| 麻豆成人在线观看| 亚洲一级二级在线| 国产精品夫妻自拍| 26uuu精品一区二区在线观看| 欧美亚洲另类激情小说| 成人深夜福利app| 精品中文字幕一区二区小辣椒| 艳妇臀荡乳欲伦亚洲一区| 亚洲国产另类av| 成人欧美一区二区三区在线播放| 精品久久久三级丝袜| 欧美日韩精品电影| 一本到高清视频免费精品| 国产精品乡下勾搭老头1| 日本欧美肥老太交大片| 一区二区三区**美女毛片| 国产精品天天摸av网| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 亚洲欧美日本韩国| 日本一区二区三级电影在线观看 | 91精品国产综合久久久久久| 欧美日韩亚洲国产综合| 免费观看一级欧美片| 美女被吸乳得到大胸91| 欧美mv日韩mv国产网站| 99re这里只有精品6| 久久国产综合精品| 国产精品久久久久永久免费观看 | 日本中文字幕不卡| 日本伊人色综合网| 亚洲综合免费观看高清完整版| 国产女人水真多18毛片18精品视频 | 色婷婷av一区二区三区大白胸| 成人av免费在线播放| 岛国一区二区三区| 岛国一区二区三区| 91亚洲男人天堂| 日本福利一区二区| 欧美日韩一级大片网址| 欧美美女黄视频| 欧美成人综合网站| 久久精品视频一区| 国产精品久线在线观看| 亚洲黄网站在线观看| 亚洲自拍另类综合| 日韩精品一级二级 | 欧美高清性hdvideosex| 欧美顶级少妇做爰| 久久综合成人精品亚洲另类欧美 | 欧美性猛交一区二区三区精品| 91久久精品一区二区二区| 欧美午夜在线一二页| 91精品国模一区二区三区| 久久综合视频网| 中文字幕中文字幕一区二区 | 久久久久久免费| 国产精品免费人成网站| 亚洲自拍欧美精品| 美女国产一区二区三区| 国产成人夜色高潮福利影视| 日韩视频在线你懂得| 精品国产sm最大网站| 日本一区二区三区四区在线视频| 亚洲女同女同女同女同女同69| 亚洲线精品一区二区三区| 免费的国产精品| 国产成人免费av在线| 欧美午夜精品一区| 欧美精品一区二区三区蜜臀| 自拍偷拍欧美激情| 欧美a一区二区| 99re66热这里只有精品3直播| 欧美日韩欧美一区二区| 精品国产伦一区二区三区观看方式 | 日韩国产欧美在线视频| 国产伦精品一区二区三区免费| 91啪九色porn原创视频在线观看| 欧美美女激情18p| 国产精品久久久久四虎| 热久久国产精品| 99久久伊人网影院| 欧美一级黄色录像| 亚洲精品国产a| 精彩视频一区二区三区| 91成人在线观看喷潮| 久久久久久久久久久久久女国产乱| 亚洲精品老司机| 国产成人综合视频| 欧美电影免费观看高清完整版在线观看 | 在线91免费看| 综合色天天鬼久久鬼色| 精品亚洲国产成人av制服丝袜| 色综合久久天天| 亚洲成av人综合在线观看| 国产成人av电影在线播放| 欧美日韩精品一区二区三区四区 | av福利精品导航| 日韩精品一区二区三区swag| 亚洲激情男女视频| 成人福利在线看| 精品国产免费人成电影在线观看四季 | 日韩色视频在线观看| 亚洲制服丝袜一区| 色综合天天在线| 国产精品久久久久久久岛一牛影视 | 日韩中文字幕91| 色噜噜偷拍精品综合在线| 国产欧美精品国产国产专区| 国产又黄又大久久| 日韩欧美电影在线| 日韩电影在线免费| 欧美三级视频在线观看| 亚洲欧美另类久久久精品2019| 成人午夜激情视频| 国产亚洲欧美激情| 国产精品一品二品| 久久午夜老司机| 国产一区二区三区综合| 日韩免费电影网站| 麻豆精品在线播放| 欧美成人一区二区三区片免费| 免费成人在线视频观看| 538在线一区二区精品国产| 亚洲成av人片在线观看无码| 欧美日韩另类国产亚洲欧美一级| 伊人一区二区三区| 欧美色老头old∨ideo| 亚洲一二三四久久| 欧美日韩高清在线| 日本vs亚洲vs韩国一区三区二区| 国产精品色在线| 成人av在线播放网站| 亚洲视频在线一区观看| 色综合久久精品| 亚洲动漫第一页| 欧美电影一区二区| 美女www一区二区| 久久久亚洲国产美女国产盗摄 | **欧美大码日韩| 91福利在线播放| 天堂av在线一区| 日韩欧美一二区| 国产99久久久久| 一区二区三区欧美日韩| 欧美老肥妇做.爰bbww视频| 另类人妖一区二区av| 久久女同性恋中文字幕| 成人h动漫精品| 亚洲国产成人va在线观看天堂| 日韩一区二区三区免费看| 国产一区二区三区精品视频| 国产精品美女一区二区在线观看|