public ICodeNode Parse(Token token) { var node_type = new PascalCodeNodeType(CodeNodeType.Assign); var assign_node = PascalCodeFactory.CreateCodeNode(node_type); string target_name = token.m_Text; node_type = new PascalCodeNodeType(CodeNodeType.Variable); var variable_node = PascalCodeFactory.CreateCodeNode(node_type); assign_node.AddChild(variable_node); token = NextToken(); if (token.m_Text == ":=") { token = NextToken(); var expression_parser = new PascalExpressionParser(this); assign_node.AddChild(expression_parser.Parse(token)); } else { // error: assignment without := } return(assign_node); }
public ICodeNode Parse(Token token) { token = NextToken(); // consume the "if" token // create an if node var node_type = new PascalCodeNodeType(CodeNodeType.If); var if_node = PascalCodeFactory.CreateCodeNode(node_type); var expression_parser = new PascalExpressionParser(this); if_node.AddChild(expression_parser.Parse(token)); // consume the "then" token token = NextToken(); var statement_parser = new PascalStatementParser(this); if_node.AddChild(statement_parser.Parse(token)); token = CurrentToken(); if ((PascalTokenType)token.m_Type == PascalTokenType.Else) { token = NextToken(); // consume the "else" token if_node.AddChild(statement_parser.Parse(token)); } return(if_node); }