public override ICodeNode Parse(Token token) { // Create the ASSIGN node. ICodeNode assignNode = ICodeFactory.CreateICodeNode(ICodeNodeTypeImplementation.ASSIGN); string targetName = token.text.ToLower(); SymbolTableEntry targetID = symbolTableStack.Lookup(targetName); if (targetID == null) targetID = symbolTableStack.EnterLocal(targetName); targetID.AppendLineNumber(token.lineNumber); token = NextToken(); ICodeNode variableNode = ICodeFactory.CreateICodeNode(ICodeNodeTypeImplementation.VARIABLE); variableNode.SetAttribute(ICodeKeyImplementation.ID, targetID); assignNode.AddChild(variableNode); if (token.type == PascalTokenType.COLON_EQUALS) token = NextToken(); else errorHandler.flag(token, PascalErrorCode.MISSING_COLON_EQUALS, this); ExpressionParser expressionParser = new ExpressionParser(this); assignNode.AddChild(expressionParser.Parse(token)); return assignNode; }