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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? scanner.java

?? pl0編譯原理源代碼
?? JAVA
字號:
import java.io.BufferedReader;
import java.io.IOException;

/**
 *  詞法分析器負責的工作是從源代碼里面讀取文法符號,這是PL/0編譯器的主要組成部分之一。
 */

public class Scanner {
	/**
	 * 剛剛讀入的字符
	 */
	private char ch = ' ';
	
	/**
	 * 當前讀入的行
	 */
	private char[] line;
	
	/**
	 * 當前行的長度(line length)
	 */
	public int ll = 0;
	
	/**
	 * 當前字符在當前行中的位置(character counter)
	 */
	public int cc = 0;
	
	/**
	 * 當前讀入的符號
	 */
	public Symbol sym;
	
	/**
	 * 保留字列表(注意保留字的存放順序)
	 */
	private String[] word;
	
	/**
	 * 保留字對應(yīng)的符號值
	 */
	private int[] wsym;
	
	/**
	 * 單字符的符號值
	 */
	private int[] ssym;

	// 輸入流
	private BufferedReader in;
	
	/**
	 * 初始化詞法分析器
	 * @param input PL/0 源文件輸入流
	 */
	public Scanner(BufferedReader input) {
		in = input;
		
		// 設(shè)置單字符符號
		ssym = new int[256];
		java.util.Arrays.fill(ssym, Symbol.nul);
		ssym['+'] = Symbol.plus;
		ssym['-'] = Symbol.minus;
		ssym['*'] = Symbol.times;
		ssym['/'] = Symbol.slash;
		ssym['('] = Symbol.lparen;
		ssym[')'] = Symbol.rparen;
		ssym['='] = Symbol.eql;
		ssym[','] = Symbol.comma;
		ssym['.'] = Symbol.period;
		ssym['#'] = Symbol.neq;
		ssym[';'] = Symbol.semicolon;
		
		// 設(shè)置保留字名字,按照字母順序,便于折半查找
		word = new String[] {"begin", "call", "const", "do", "end", "if",
			"odd", "procedure", "read", "then", "var", "while", "write"};
		
		// 設(shè)置保留字符號
		wsym = new int[PL0.norw];
		wsym[0] = Symbol.beginsym;
		wsym[1] = Symbol.callsym;
		wsym[2] = Symbol.constsym;
		wsym[3] = Symbol.dosym;
		wsym[4] = Symbol.endsym;
		wsym[5] = Symbol.ifsym;
		wsym[6] = Symbol.oddsym;
		wsym[7] = Symbol.procsym;
		wsym[8] = Symbol.readsym;
		wsym[9] = Symbol.thensym;
		wsym[10] = Symbol.varsym;
		wsym[11] = Symbol.whilesym;
		wsym[12] = Symbol.writesym;
	}
	
	/**
	 * 讀取一個字符,為減少磁盤I/O次數(shù),每次讀取一行
	 */
	void getch() {
		String l = "";
		try {
			if (cc == ll) {
				while (l.equals(""))
					l = in.readLine().toLowerCase() + "\n";
				ll = l.length();
				cc = 0;
				line = l.toCharArray();
				System.out.println(PL0.interp.cx + " " + l);
				PL0.fa1.println(PL0.interp.cx + " " + l);
			}
		} catch (IOException e) {
			throw new Error("program imcomplete");
		}
		ch = line[cc];
		cc ++;
	}
	
	/**
	 * 詞法分析,獲取一個詞法符號,是詞法分析器的重點
	 */
	public void getsym() {
		// Wirth 的 PL/0 編譯器使用一系列的if...else...來處理
		// 但是你的助教認為下面的寫法能夠更加清楚地看出這個函數(shù)的處理邏輯
		while (Character.isWhitespace(ch))		// 跳過所有空白字符
			getch();
		if (ch >= 'a' && ch <= 'z') {
			// 關(guān)鍵字或者一般標識符
			matchKeywordOrIdentifier();
		} else if (ch >= '0' && ch <= '9') {
			// 數(shù)字
			matchNumber();
		} else {
			// 操作符
			matchOperator();
		}
	}
	
	/**
	 * 分析關(guān)鍵字或者一般標識符
	 */
	void matchKeywordOrIdentifier() {
		int i;
		StringBuilder sb = new StringBuilder(PL0.al);
		// 首先把整個單詞讀出來
		do {
			sb.append(ch);
			getch();
		} while (ch >= 'a' && ch <= 'z' || ch >= '0' && ch <= '9');
		String id = sb.toString();
		
		// 然后搜索是不是保留字(請注意使用的是什么搜索方法)
		i = java.util.Arrays.binarySearch(word, id);
		
		// 最后形成符號信息
		if (i < 0) {
			// 一般標識符
			sym = new Symbol(Symbol.ident);
			sym.id = id;
		} else {
			// 關(guān)鍵字
			sym = new Symbol(wsym[i]);
		}
	}
	
	/**
	 * 分析數(shù)字
	 */
	void matchNumber() {
		int k = 0;
		sym = new Symbol(Symbol.number);
		do {
			sym.num = 10*sym.num + Character.digit(ch, 10);
			k++;
			getch();
		} while (ch>='0' && ch<='9'); 				// 獲取數(shù)字的值
		k--;
		if (k > PL0.nmax)
			Err.report(30);
	}
	
	/**
	 * 分析操作符
	 */
	void matchOperator() {
		// 請注意這里的寫法跟Wirth的有點不同
		switch (ch) {
		case ':':		// 賦值符號
			getch();
			if (ch == '=') {
				sym = new Symbol(Symbol.becomes);
				getch();
			} else {
				// 不能識別的符號
				sym = new Symbol(Symbol.nul);
			}
			break;
		case '<':		// 小于或者小于等于
			getch();
			if (ch == '=') {
				sym = new Symbol(Symbol.leq);
				getch();
			} else {
				sym = new Symbol(Symbol.lss);
			}
			break;
		case '>':		// 大于或者大于等于
			getch();
			if (ch == '=') {
				sym = new Symbol(Symbol.geq);
				getch();
			} else {
				sym = new Symbol(Symbol.gtr);
			}
			break;
		default:		// 其他為單字符操作符(如果符號非法則返回nil)
			sym = new Symbol(ssym[ch]);
			if (sym.symtype != Symbol.period)
				getch();
			break;
		}
	}	
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级蜜桃2在线观看| 日av在线不卡| 91欧美一区二区| 亚洲丝袜制服诱惑| 在线观看一区二区精品视频| 一二三区精品视频| 制服.丝袜.亚洲.另类.中文| 久久精品国产免费看久久精品| 日韩欧美激情在线| 国产99久久久精品| 一区二区三区在线观看欧美| 欧美日韩一区二区三区四区五区 | 精品国产乱码久久久久久影片| 美国三级日本三级久久99| 久久综合九色综合欧美98| 成人精品在线视频观看| 亚洲综合视频在线| 欧美va亚洲va国产综合| 成人永久看片免费视频天堂| 亚洲黄色小说网站| 精品久久久久一区二区国产| 波多野结衣一区二区三区 | 亚洲尤物视频在线| 欧美一区二区三区在线| 成人综合婷婷国产精品久久 | 欧美一级片在线看| 国产成人亚洲综合色影视| 亚洲精品一卡二卡| 欧美精品一区二区三区蜜臀 | 亚洲电影一区二区| 精品成人一区二区三区四区| 99免费精品视频| 免费日韩伦理电影| 国产精品成人在线观看| 欧美精品精品一区| 成人一区二区三区视频| 五月激情综合网| 国产精品每日更新在线播放网址| 91精品国产综合久久香蕉麻豆| jlzzjlzz亚洲日本少妇| 日本中文一区二区三区| 亚洲精品日韩一| 久久九九国产精品| 欧美一区二区三区四区久久| av在线播放不卡| 国产一区二区视频在线| 三级欧美韩日大片在线看| 亚洲图片欧美激情| 久久午夜国产精品| 69久久99精品久久久久婷婷| 一本久久综合亚洲鲁鲁五月天| 精品无码三级在线观看视频| 午夜精品免费在线观看| 亚洲视频1区2区| 国产欧美日韩麻豆91| 日韩女优毛片在线| 91精品在线麻豆| 色综合激情久久| 97se狠狠狠综合亚洲狠狠| 国内精品久久久久影院薰衣草| 亚洲成a人片在线观看中文| 亚洲欧美日韩中文播放 | 亚洲精品日韩专区silk| 中文字幕乱码一区二区免费| 精品国产乱码久久久久久老虎 | 欧美成人艳星乳罩| 在线电影一区二区三区| 色噜噜狠狠色综合中国| 91小视频免费看| 成人av免费在线| av男人天堂一区| 大陆成人av片| a级高清视频欧美日韩| 春色校园综合激情亚洲| 国产一区在线观看视频| 韩国中文字幕2020精品| 精品一区二区国语对白| 蜜桃av噜噜一区| 老司机午夜精品| 精品一区二区三区蜜桃| 久草精品在线观看| 欧美在线观看你懂的| 日本精品一区二区三区高清| 91国内精品野花午夜精品| 色欧美日韩亚洲| 欧美性受极品xxxx喷水| 欧美做爰猛烈大尺度电影无法无天| 色婷婷激情一区二区三区| 在线精品视频一区二区三四| 欧美日韩在线三区| 91精品国产一区二区三区香蕉| 欧美一区日韩一区| 久久伊人中文字幕| 国产欧美日韩在线| 亚洲欧美二区三区| 三级欧美在线一区| 国产一区二区免费视频| 成人国产免费视频| 欧美丝袜自拍制服另类| 欧美精品久久一区二区三区| 精品久久久久久久久久久久久久久 | 午夜欧美大尺度福利影院在线看| 亚洲二区在线视频| 激情综合网天天干| 成人高清av在线| 欧美色图在线观看| 日韩美女视频在线| 中文字幕一区二区三区四区| 一区二区激情视频| 精品亚洲porn| 日本韩国欧美在线| 日韩欧美一二三| 国产91精品久久久久久久网曝门| 成人午夜视频免费看| 欧美性淫爽ww久久久久无| 2017欧美狠狠色| 一级特黄大欧美久久久| 精品一区二区三区影院在线午夜 | 不卡的av在线| 欧美久久久一区| 国产精品女上位| 日韩在线一区二区| 成人一区二区三区中文字幕| 在线91免费看| 中文字幕中文字幕一区| 日本欧美在线观看| 不卡av在线网| 日韩欧美一级二级三级久久久| 最新成人av在线| 久久福利资源站| 在线观看精品一区| 亚洲国产精品成人综合| 丝瓜av网站精品一区二区| 99re热视频这里只精品| 久久综合丝袜日本网| 午夜精品久久久久| 波多野结衣的一区二区三区| 久久综合久久久久88| 亚洲va欧美va人人爽| 国产激情91久久精品导航| 4438亚洲最大| 亚洲精品免费一二三区| 国产成人精品免费| 欧美mv日韩mv| 日本在线播放一区二区三区| 91久久精品国产91性色tv| 久久美女高清视频| 蜜桃一区二区三区四区| 欧美乱熟臀69xxxxxx| 亚洲精品欧美激情| 成人aa视频在线观看| 久久久久久久免费视频了| 久久成人麻豆午夜电影| 欧美丰满高潮xxxx喷水动漫 | 亚洲国产综合在线| 91视频在线观看免费| 国产精品夫妻自拍| 国产不卡高清在线观看视频| 精品久久久三级丝袜| 欧美日韩一区久久| 一区二区三区丝袜| 在线观看av一区二区| 综合久久久久久| av在线不卡观看免费观看| 中文字幕第一区综合| 国产成人久久精品77777最新版本| 26uuu精品一区二区| 国产在线视视频有精品| 精品999在线播放| 韩国精品一区二区| 精品日韩成人av| 国产精品一二三| 国产婷婷色一区二区三区在线| 国产激情一区二区三区| 欧美国产综合一区二区| 成人午夜av影视| 国产精品女上位| 日本道色综合久久| 亚洲v日本v欧美v久久精品| 欧美老女人在线| 日本va欧美va瓶| 2020国产精品| 99久久综合精品| 午夜精品久久久久影视| 欧美大片拔萝卜| 成人亚洲一区二区一| 中文字幕一区二区三区蜜月| 色综合天天狠狠| 免费观看91视频大全| 久久九九99视频| 91久久精品网| 久久精品国产秦先生| 国产精品污网站| 在线视频国内一区二区| 奇米色一区二区三区四区| 国产亚洲自拍一区| 日本久久电影网| 九九视频精品免费| 国产精品福利一区| 日韩精品一区二区三区中文精品|