Пример #1
0
        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);
        }
Пример #2
0
        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);
        }