//符号表项类
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 += "
错误发生在第" + Syntax.word.rowNum + "行:缺少变量。";
			    
			} else if (type == "INT") {
				Syntax.error += "
错误发生在第" + Syntax.word.rowNum + "行:缺少整数。";
			} else if (type == "REAL") {
				Syntax.error += "
错误发生在第" + Syntax.word.rowNum + "行:缺少实数。";
			} else {
    Syntax.error += "
错误发生在第" + 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 += "
错误发生在第" + 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 += "
错误发生在第" + Syntax.word.rowNum + "行:缺少 " + s + " 。";
    
    }
}