public SymbolTable() { Level++; var symbolList = new SymbolList(); symbolTable.AddLast(symbolList); Current = symbolTable.Last; }
private void InterpretDecVariable(TreeNode node, int type, SymbolList table) { var variable = node; if (variable.MiddleNode == null) { string value = null; if (variable.RightNode != null) { value = InterpretExp(variable.RightNode.MiddleNode); } if (type == TokenType.Int) { Codes.AddLast(new Quadruple(InstructionType.Int, value, null, variable.LeftNode.Value, Line)); Line++; var symbol = new Symbol(variable.LeftNode.Value, SymbolType.IntValue, Level); SymbolTable.Register(symbol); } else if (type == TokenType.Real) { Codes.AddLast(new Quadruple(InstructionType.Real, value, null, variable.LeftNode.Value, Line)); Line++; var symbol = new Symbol(variable.LeftNode.Value, SymbolType.RealValue, Level); SymbolTable.Register(symbol); } else if (type == TokenType.Char) { Codes.AddLast(new Quadruple(InstructionType.Char, value, null, variable.LeftNode.Value, Line)); Line++; var symbol = new Symbol(variable.LeftNode.Value, SymbolType.CharValue, Level); SymbolTable.Register(symbol); } } else if (variable.MiddleNode != null) //数组暂时不能初始化 { if (variable.RightNode != null) { throw new InterpretException("ERROR : 初始化非法.\n"); } var len = InterpretArrayDim(variable.MiddleNode, out var dim); if (type == TokenType.Int) { Codes.AddLast(new Quadruple(InstructionType.Int, dim.ToString(), len, variable.LeftNode.Value, Line)); Line++; var symbol = new Symbol(variable.LeftNode.Value, SymbolType.IntArray, Level); SymbolTable.Register(symbol); } else if (type == TokenType.Real) { Codes.AddLast(new Quadruple(InstructionType.Real, dim.ToString(), len, variable.LeftNode.Value, Line)); Line++; var symbol = new Symbol(variable.LeftNode.Value, SymbolType.RealArray, Level); SymbolTable.Register(symbol); } else if (type == TokenType.Char) { Codes.AddLast(new Quadruple(InstructionType.Char, dim.ToString(), len, variable.LeftNode.Value, Line)); Line++; var symbol = new Symbol(variable.LeftNode.Value, SymbolType.CharArray, Level); SymbolTable.Register(symbol); } } }