| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 | //符号表项类function SymItem(name, type, val) {	this.Name = name || "";	this.Type = type || "double";    this.Val = val || 0;}var SymType_INT='int';var SymType_REAL = 'real';//符号表类function SymTable() {	this.SymItemList = new Array();}//定位符号表项SymTable.prototype.position = function(str) {	for ( var i = 0; i < this.SymItemList.length; i++) {		if (str == this.SymItemList[i].Name) {			return this.SymItemList[i];		}	}	return null;}//语法树的节点function Node(type) {	this.type = type; // 节点类型	this.str = type; // 节点的字符串形式	this.children = new Array(); // 节点的孩子链表}//匹配单词Node.prototype.match1 = function(type) {	while (!(Syntax.readall)) {		Syntax.getWord();		if (Syntax.word.type == type) {			Syntax.nextWord();			break;		} else {			if (type == "IDENT") {			    Syntax.error += "<br>错误发生在第" + Syntax.word.rowNum + "行:缺少变量。";			    			} else if (type == "INT") {				Syntax.error += "<br>错误发生在第" + Syntax.word.rowNum + "行:缺少整数。";			} else if (type == "REAL") {				Syntax.error += "<br>错误发生在第" + Syntax.word.rowNum + "行:缺少实数。";			} else {    Syntax.error += "<br>错误发生在第" + Syntax.word.rowNum + "行:缺少" + type + "。";    			}			Syntax.nextWord();		}	}}Node.prototype.match2 = function (s) {    if (!(Syntax.readall)) {        while (!(Syntax.readall)) {            Syntax.getWord();            if (Syntax.word.value == s) {                Syntax.nextWord();                break;            } else {                Syntax.error += "<br>错误发生在第" + Syntax.word.rowNum + "行:缺少 " + s + " 。";                               while (s != Syntax.word.value) {                    Syntax.nextWord();                    if (Syntax.index < tokens.length) {                        Syntax.getWord();                    } else                        break;                }                Syntax.index--;            }            Syntax.nextWord();        }    } else {        Syntax.error += "<br>错误发生在第" + Syntax.word.rowNum + "行:缺少 " + s + " 。";        }}
 |