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

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

?? parser.java

?? java語言開發的基于tiny語言的編譯器
?? JAVA
字號:

package jeex.tiny;

import java.io.*;
import java.util.*;
import jeex.tiny.Tree.*;
/**
 * A class for building the abstract syntax tree.
 */
class Parser implements Tokens {
	Scanner S;
	
	Parser(Scanner s) {
		this.S = s;
	}
	/**
	 * Main entry.
	 * Program -> StmtSeq
	 */
	Tree Program() {
		Tree tree = StmtSeq();
		return tree;
	}
	/**
	 * StmtSeq -> Statement { ";" Statement }
	 */
	Tree StmtSeq() {
		Vector v = new Vector();
		v.add(Statement());
		while(true) {
			while(S.token == SEMI) {
				accept(SEMI);
				v.add(Statement());
				if (S.token == ELSE || S.token == UNTIL || S.token == END || S.token == EOF)
					break;
			}
			if (S.token == ELSE || S.token == UNTIL 
					|| S.token == END || S.token == EOF) { // end of statement sequence
				break;
			}
			//must be syntax error, and continue to parse
			if (S.token != SEMI) {
				syntaxErrorNoSkip("Expect: " + TokenUtil.tokenToString(SEMI));
				v.add(Statement());
			}
		}
		// if there exists only a statement, return the statement and do not create StmtSeq.
		if (v.size() == 1) {
			return (Tree)v.get(0);
		} else {
			return new StmtSeq(v);
		}
	}
	/**
	 * Statement -> IfStmt | RepeatStmt | AssignStmt | ReadStmt | WriteStmt
	 */
	Tree Statement() {
		Tree tree;
		switch(S.token) {
			case IF: tree = IfStmt(); break;
			case REPEAT: tree = RepeatStmt(); break;
			case READ: tree = ReadStmt(); break;
			case WRITE: tree = WriteStmt(); break;
			case IDENT:	tree = AssignStmt(); break;
			default:
				syntaxError("No such statement begin with " + TokenUtil.tokenToString(S.token));
				tree = new ErrorTree();
		}
		return tree;
	}
	/**
	 * IfStmt -> "IF" Expr "THEN" StmtSeq [ "ELSE" StmtSeq ] "END"
	 */
	Tree IfStmt() {
		accept(IF);
		Tree cond = Expr();
		accept(THEN);
		Tree thenPart = StmtSeq();
		Tree elsePart = null;
		if (S.token == ELSE) {
			S.nextToken();
			elsePart = StmtSeq();
		}
		accept(END);
		return new IfStmt(cond,thenPart,elsePart);
	}
	/**
	 * RepeatStmt -> "REPEAT" StmtSeq "UNTIL" Expr
	 */
	Tree RepeatStmt() {
		accept(REPEAT);
		Tree statements = StmtSeq();
		accept(UNTIL);
		Tree cond = Expr();
		return new RepeatStmt(cond,statements);
	}
	/**
	 * WriteStmt -> "WRITE" Expr
	 */
	Tree WriteStmt() {
		accept(WRITE);
		return new WriteStmt(Expr());
	}
	/**
	 * ReadStmt -> "READ" "IDENT"
	 */
	Tree ReadStmt() {
		accept(READ);
		Tree tree ;
		if(S.token != IDENT) {
			syntaxError("Read statement must be follow an identifier");
			tree = new ErrorTree();
		} else {
			S.nextToken();
			tree = new ReadStmt(new Ident(S.identName));
		}
		return tree;
	}
	/**
	 * AssignStmt -> "IDENT" ":=" Expr
	 */
	Tree AssignStmt() {
		accept(IDENT);
		String ident = S.identName;
		accept(ASSIGN);
		Tree expr = Expr();
		return new AssignStmt(new Ident(ident),expr);
	}
	/**
	 * Expr -> SimpleExpr [Comparisonop SimpleExpr ]
	 * Comparisonop -> "<" | "="
	 */
	Tree Expr() {
		Tree tree = SimpleExpr();
		Tree second = null;
		int op = 0;
		if(S.token == LT || S.token == EQ) {
			op = S.token;
			S.nextToken();
			second = SimpleExpr();
			tree = new Expr(tree,op,second);
		}
		return tree;
	}
	/**
	 * SimpleExpr -> Term { Addop Term }
	 * Addop -> "+" | "-"
	 */
	Tree SimpleExpr() {
		Tree tree = Term();
		while(S.token == PLUS || S.token == MINUS) {
			int op = S.token;
			S.nextToken();
			Tree right = Term();
			Tree left = tree;
			tree = new Operation(op,left,right);
		}		
		return tree;
	}
	/**
	 * Term -> Factor { Mulop Factor }
	 * Mulop -> "*" | "/"
	 */
	Tree Term() {
		Tree tree = Factor();
		while(S.token == MUL || S.token == DIV) {
			int op = S.token;
			S.nextToken();
			Tree right = Factor();
			Tree left = tree;
			tree = new Operation(op,left,right);
		}
		return tree;
	}
	/**
	 * Factor -> "(" Expr ")" | "NUMBER" | "IDENT"
	 */
	Tree Factor() {
		Tree tree = null;
		switch(S.token) {
			case LPAREN: {
				S.nextToken();
				tree = new ParExpr(Expr());
				accept(RPAREN);
				break;
			}
			case NUMBER: {
				tree = new Literal(Integer.parseInt((String)S.literalValue));
				S.nextToken();
				break;
			}
			case IDENT: {
				tree = new Ident(S.identName);
				S.nextToken();
				break;
			}
			default:
				tree = new ErrorTree();
				syntaxError("Error factor");
		}
		return tree;
	}
	
	private void accept(int token) {
		if (S.token == token) {
			S.nextToken();
		} else {
			syntaxError("Expect " + TokenUtil.tokenToString(token));
		}
	}
	
	void syntaxError(String msg) {
		syntaxErrorNoSkip(msg);
		while(S.token != SEMI && S.token != EOF) {
			S.nextToken();
		}
	}
	
	void syntaxErrorNoSkip(String msg) {
		Log.error("Syntax error at line " + S.line + " : " + msg);		
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩免费视频一区| 亚洲最大的成人av| 国产精品香蕉一区二区三区| 久久午夜免费电影| 国产成人aaa| 午夜欧美视频在线观看| 国产亚洲欧美一区在线观看| 色综合久久中文综合久久牛| 午夜av区久久| 亚洲欧洲制服丝袜| 精品人在线二区三区| 成人av网址在线观看| 天堂成人国产精品一区| 亚洲欧洲一区二区在线播放| 蓝色福利精品导航| 亚洲一区二区美女| 亚洲精品欧美综合四区| 欧美韩国一区二区| 国产三级精品视频| 久久久美女艺术照精彩视频福利播放| 欧美日韩在线不卡| 色伊人久久综合中文字幕| 国产成人在线免费| 国产高清精品久久久久| 久久爱另类一区二区小说| 日韩不卡手机在线v区| 首页欧美精品中文字幕| 亚洲成人黄色小说| 亚洲综合久久久| 日韩高清国产一区在线| 奇米影视一区二区三区| 国内精品在线播放| 国产一区啦啦啦在线观看| 韩国三级中文字幕hd久久精品| 美女免费视频一区| 国产精品一二三区在线| 大尺度一区二区| 欧美日韩aaa| 国产亚洲欧美在线| 亚洲自拍偷拍av| 蜜桃av噜噜一区| 成人av网站免费| 51精品久久久久久久蜜臀| www激情久久| 樱桃视频在线观看一区| 美女网站视频久久| 色综合久久久久久久久| 日韩视频一区二区在线观看| 国产午夜亚洲精品理论片色戒| 中文字幕一区二区三区蜜月 | 亚洲黄色性网站| 奇米色777欧美一区二区| jvid福利写真一区二区三区| 91视视频在线直接观看在线看网页在线看| 免费看日韩精品| 色视频一区二区| 国产午夜精品一区二区三区视频| 日韩电影在线观看电影| 国产成人精品影视| 2欧美一区二区三区在线观看视频| 亚洲欧美日韩电影| 91麻豆swag| 99久久精品一区二区| 99精品欧美一区二区蜜桃免费| 久久久久国产精品免费免费搜索| 国产精品正在播放| 亚洲小说欧美激情另类| 成人动漫一区二区在线| 91精品国产美女浴室洗澡无遮挡| 1024亚洲合集| www.成人网.com| 国产精品无圣光一区二区| 丝袜亚洲另类欧美| 色婷婷av一区二区三区软件 | 一本到不卡免费一区二区| 精品国产乱码久久久久久免费 | 国产一区二区三区免费| 国产精品麻豆一区二区| 色狠狠一区二区| 久久97超碰国产精品超碰| 精品欧美久久久| 成人一区二区三区| 亚洲国产精品天堂| 欧美videossexotv100| 国产suv精品一区二区三区| 亚洲天堂网中文字| 欧美三级三级三级| 国产成人av资源| 日韩不卡在线观看日韩不卡视频| 欧美极品aⅴ影院| 91精品国产乱| 欧美三区免费完整视频在线观看| 精品国产91久久久久久久妲己| 国内精品久久久久影院色| 亚洲欧美日韩久久| 亚洲免费av网站| 中文字幕视频一区二区三区久| 国产日韩精品一区二区浪潮av| 日韩一区二区三| 91精品国产全国免费观看| 日本久久一区二区三区| 成人午夜视频福利| 国产成人亚洲精品青草天美| 日韩经典一区二区| 天天影视色香欲综合网老头| 亚洲欧美日韩在线| 亚洲视频在线一区观看| 国产精品美女一区二区| 国产精品色婷婷久久58| ...av二区三区久久精品| 国产精品久久精品日日| 欧美激情综合五月色丁香| 2023国产精品| 国产精品全国免费观看高清 | 91免费看视频| 欧美日韩精品专区| 精品精品欲导航| 国产欧美日韩视频一区二区| 中文字幕一区二区三区四区| 亚洲女同ⅹxx女同tv| 一区二区三区精品在线| 蜜桃视频第一区免费观看| 国产精品一区专区| 欧美无砖专区一中文字| 日韩欧美亚洲国产精品字幕久久久| 欧美一级欧美三级| 久久蜜桃av一区精品变态类天堂| 中文字幕一区二区三区四区 | 欧美一级电影网站| 1区2区3区精品视频| 日韩精品色哟哟| 成人激情午夜影院| 91精品国产麻豆国产自产在线 | 精品成人一区二区三区四区| 1024成人网| 国产精品一卡二| 欧美一区二区视频在线观看2022| 亚洲国产精品99久久久久久久久| 亚洲成av人综合在线观看| 国产精品亚洲一区二区三区妖精| 国产成人精品网址| 欧美日韩久久久一区| 国产精品第13页| 国产成人在线色| 久久综合五月天婷婷伊人| 午夜国产精品一区| 91香蕉视频在线| 国产精品成人一区二区艾草| 久久99国产精品久久99果冻传媒| 欧美午夜一区二区三区| 亚洲高清免费一级二级三级| 在线国产电影不卡| 亚洲一区二区三区中文字幕| 色天天综合色天天久久| 一区二区三区中文字幕电影| 欧美亚洲一区二区在线观看| 一区二区三区国产豹纹内裤在线| 日本久久一区二区| 免费观看成人av| 国产视频一区二区在线| 国产成人在线色| 亚洲日本中文字幕区| 欧美裸体bbwbbwbbw| 免播放器亚洲一区| 久久久亚洲欧洲日产国码αv| 丁香婷婷综合色啪| 亚洲成人第一页| 久久久久久一二三区| 99久久综合精品| 久久超级碰视频| 一区二区三区在线不卡| 欧美一级在线视频| 91同城在线观看| 国产久卡久卡久卡久卡视频精品| 亚洲人快播电影网| 久久亚洲春色中文字幕久久久| 在线一区二区视频| 国产成人一区二区精品非洲| 日韩av在线发布| 亚洲不卡av一区二区三区| 久久久www免费人成精品| 欧美老年两性高潮| 9i在线看片成人免费| 国产在线看一区| 久久激情综合网| 国产精品乱码一区二三区小蝌蚪| 国产精品99久久久久久久女警 | 99精品视频中文字幕| 91福利国产精品| 久久综合网色—综合色88| 中文字幕乱码亚洲精品一区| 国产欧美一区二区三区鸳鸯浴| 久久综合给合久久狠狠狠97色69| 久久九九久久九九| 亚洲男帅同性gay1069| 蜜桃免费网站一区二区三区| 欧美国产精品中文字幕| 中文幕一区二区三区久久蜜桃| 日韩伦理免费电影| 一区二区三区四区视频精品免费|