當前位置: 首頁>>代碼示例>>C#>>正文


C# AST.addChild方法代碼示例

本文整理匯總了C#中ProgrammingLanguageNr1.AST.addChild方法的典型用法代碼示例。如果您正苦於以下問題:C# AST.addChild方法的具體用法?C# AST.addChild怎麽用?C# AST.addChild使用的例子?那麽, 這裏精選的方法代碼示例或許可以為您提供幫助。您也可以進一步了解該方法所在ProgrammingLanguageNr1.AST的用法示例。


在下文中一共展示了AST.addChild方法的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的C#代碼示例。

示例1: BooleanGREATEROREQUALS2

 public void BooleanGREATEROREQUALS2()
 {
     AST root = new AST(new Token(Token.TokenType.OPERATOR, ">="));
     AST lhs = new AST(new Token(Token.TokenType.NUMBER, "4"));
     AST rhs = new AST(new Token(Token.TokenType.NUMBER, "3"));
     root.addChild(lhs);
     root.addChild(rhs);
     ExpressionEvaluator e = new ExpressionEvaluator(root);
     Assert.AreEqual(1, e.getValue());
 }
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:10,代碼來源:ExpressionEvaluator_TEST.cs

示例2: BooleanAND

 public void BooleanAND()
 {
     AST root = new AST(new Token(Token.TokenType.OPERATOR, "&&"));
     AST lhs = new AST(new Token(Token.TokenType.NUMBER, "1"));
     AST rhs = new AST(new Token(Token.TokenType.NUMBER, "0"));
     root.addChild(lhs);
     root.addChild(rhs);
     ExpressionEvaluator e = new ExpressionEvaluator(root);
     Assert.AreEqual(0, e.getValue());
 }
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:10,代碼來源:ExpressionEvaluator_TEST.cs

示例3: createParameterDefinition

        private AST createParameterDefinition(string typeName, string variableName)
        {
            AST parameter = new AST(new Token(Token.TokenType.PARAMETER, "<PARAMETER>"));

            AST declaration = new AST_VariableDeclaration(new Token(Token.TokenType.VAR_DECLARATION, "<PARAMETER_DECLARATION>"), ReturnValue.getReturnValueTypeFromString(typeName), variableName);
            AST assigment = new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), variableName);

            parameter.addChild(declaration);
            parameter.addChild(assigment);

            return parameter;
        }
開發者ID:substans,項目名稱:Sprak,代碼行數:12,代碼來源:ExternalFunctionCreator.cs

示例4: defineFunction

        private void defineFunction(FunctionDefinition f)
        {
            if (externalFunctions.ContainsKey(f.functionName))
            {
                throw new Error("There is already a function called '" + f.functionName + "'", Error.ErrorType.UNDEFINED, 0, 0);
            }

            AST parameterList = new AST(new Token(Token.TokenType.NODE_GROUP, "<PARAMETER_LIST>"));
            for (int i = 0; i < f.parameterTypes.Length; ++i)
            {
                parameterList.addChild(createParameterDefinition(f.parameterTypes[i], f.parameterNames[i]));
            }

            AST functionNode = createFunctionDefinitionNode(f.returnType, f.functionName, parameterList);

            m_builtInFunctions.Add(functionNode);
            externalFunctions.Add(f.functionName, f.callback);
        }
開發者ID:substans,項目名稱:Sprak,代碼行數:18,代碼來源:ExternalFunctionCreator.cs

示例5: comparisonExpression

        private AST comparisonExpression()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("comparison expression");
            #endif

            AST lhs = plusOrMinusExpression();

            if ( lookAhead(1).getTokenString() == "<" ||
                 lookAhead(1).getTokenString() == ">" ||
                 lookAhead(1).getTokenString() == "<=" ||
                 lookAhead(1).getTokenString() == ">=" ||
                 lookAhead(1).getTokenString() == "!=" ||
                 lookAhead(1).getTokenString() == "=="
                )
            {
                Token operatorToken = match(Token.TokenType.OPERATOR);
                AST rhs = plusOrMinusExpression();
                checkLeftHandSide(lhs, operatorToken);
                checkRightHandSide(rhs, operatorToken);

                AST comparisonExpressionTree = new AST(operatorToken);
                comparisonExpressionTree.addChild(lhs);
                comparisonExpressionTree.addChild(rhs);
                return comparisonExpressionTree;

            } else {
                return lhs;
            }
        }
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:30,代碼來源:Parser.cs

示例6: booleanExpression

        private AST booleanExpression()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("boolean expression");
            #endif

            AST lhs = comparisonExpression();

            if ( lookAhead(1).getTokenString() == "&&" ||
                 lookAhead(1).getTokenString() == "||"
                )
            {
                Token operatorToken = match(Token.TokenType.OPERATOR);
                //Console.WriteLine ("Matched operator token " + operatorToken.getTokenString() + " at line " + operatorToken.LineNr + " and pos " + operatorToken.LinePosition);

                AST rhs = booleanExpression();
                checkLeftHandSide(lhs, operatorToken);
                checkRightHandSide(rhs, operatorToken);

                AST booleanExpressionTree = new AST(operatorToken);
                booleanExpressionTree.addChild(lhs);
                booleanExpressionTree.addChild(rhs);
                return booleanExpressionTree;

            } else {
                return lhs;
            }
        }
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:28,代碼來源:Parser.cs

示例7: loop

        private AST loop()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("loop");
            #endif
            AST loopBlockStatements = new AST(new Token(Token.TokenType.STATEMENT_LIST, "<LOOP_BLOCK_STATEMENTS>"));

            AST_LoopNode loopTree = new AST_LoopNode(match(Token.TokenType.LOOP));

            bool isForeachLoop = false;
            if(lookAheadType(1) != Token.TokenType.NEW_LINE)
            {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("foreach loop!");
            #endif
                isForeachLoop = true;

                // __index__
                AST_VariableDeclaration loopIndexDeclaration
                = new AST_VariableDeclaration(new Token(Token.TokenType.VAR_DECLARATION, "<VAR_DECL>"),
                                                        ReturnValueType.NUMBER,
                                                        "__index__");
                loopBlockStatements.addChild(loopIndexDeclaration);

                AST_Assignment loopIndexAssignment
                    = new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), "__index__");
                loopIndexAssignment.addChild(new AST(new TokenWithValue(Token.TokenType.NUMBER, "-1", new ReturnValue(-1.0f))));

                loopBlockStatements.addChild(loopIndexAssignment);

                // match
                //match(Token.TokenType.PARANTHESIS_LEFT);
                AST arrayExpression = expression();
                //match(Token.TokenType.PARANTHESIS_RIGHT);

                // __array__ (is a copy of the array to loop over)
                AST_VariableDeclaration loopArrayDeclaration
                = new AST_VariableDeclaration(new Token(Token.TokenType.VAR_DECLARATION, "<VAR_DECL>"),
                                                        ReturnValueType.ARRAY,
                                                        "__array__");
                loopBlockStatements.addChild(loopArrayDeclaration);

                AST_Assignment loopArrayAssignment =
                    new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), "__array__");

                if(arrayExpression != null) {
                    loopArrayAssignment.addChild(arrayExpression);
                }
                else {
                    throw new Error("Can't understand array expression in loop", Error.ErrorType.SYNTAX,
                                    loopArrayAssignment.getToken().LineNr,
                                    loopArrayAssignment.getToken().LinePosition);
                }

                loopBlockStatements.addChild(loopArrayAssignment);

                // __indexes__ (holds all the indexes in the array, since it works like a SortedDictionary)
                // __indexes = getIndexes(__array__)
                AST_VariableDeclaration indexesDeclaration
                = new AST_VariableDeclaration(new Token(Token.TokenType.VAR_DECLARATION, "<VAR_DECL>"),
                                                        ReturnValueType.ARRAY,
                                                        "__indexes__");
                loopBlockStatements.addChild(indexesDeclaration);

                AST_FunctionCall getArrayIndexes = new AST_FunctionCall(new Token(Token.TokenType.FUNCTION_CALL,
                                                                                  "getIndexes"));
                AST argumentList = new AST(new Token(Token.TokenType.NODE_GROUP, "<ARGUMENT_LIST>"));
                argumentList.addChild(new Token(Token.TokenType.NAME, "__array__"));
                getArrayIndexes.addChild(argumentList);

                AST_Assignment indexesAssignment =
                new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), "__indexes__");
                indexesAssignment.addChild(getArrayIndexes);
                loopBlockStatements.addChild(indexesAssignment);
            }
            else
            {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("infinite loop!");
            #endif
            }

            /*
             * 		loopParentTree
             * 			__index__-declaration
             * 			__array__-declaration & assigment
             * 			loop tree
             * 				loop body
             * 					foreach stuff
             * 					rest of statements
             * 					goto beginning of loop
             *
             * */

            allowLineBreak();
            AST loopBody = statementList(false);
            loopBody.addChild(new AST(new Token(Token.TokenType.GOTO_BEGINNING_OF_LOOP, "<GOTO_BEGINNING_OF_LOOP>")));
            allowLineBreak();
            match(Token.TokenType.BLOCK_END);

//.........這裏部分代碼省略.........
開發者ID:substans,項目名稱:Sprak,代碼行數:101,代碼來源:Parser.cs

示例8: loop

        private AST loop()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("loop");
            #endif
            AST loopBlockStatements = new AST(new Token(Token.TokenType.STATEMENT_LIST, "<LOOP_BLOCK_STATEMENTS>"));

            AST_LoopNode loopTree = new AST_LoopNode(match(Token.TokenType.LOOP));

            string loopVariableName = "@"; // default name if no name is specified directly after 'loop' keyword

            bool isForeachLoop = false;
            if(lookAheadType(1) != Token.TokenType.NEW_LINE)
            {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("foreach loop!");
            #endif
                isForeachLoop = true;

                // __index__
                AST_VariableDeclaration loopIndexDeclaration
                = new AST_VariableDeclaration(new Token(Token.TokenType.VAR_DECLARATION, "<VAR_DECL>"),
                                                        ReturnValueType.NUMBER,
                                                        "__index__");
                loopBlockStatements.addChild(loopIndexDeclaration);

                AST_Assignment loopIndexAssignment
                    = new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), "__index__");
                loopIndexAssignment.addChild(new AST(new TokenWithValue(Token.TokenType.NUMBER, "-1", -1.0f)));

                loopBlockStatements.addChild(loopIndexAssignment);

                Token savePoint = lookAhead(1); // will backtrack from here if matching loopVariable + loopRangeExpression fails
                //Console.WriteLine("Created save point at token " + savePoint);

                Token loopVariable = null;
                AST loopRangeExpression = null; // what the loop will loop through

                if ((lookAheadType (1) == Token.TokenType.NAME && lookAheadType(2) == Token.TokenType.IN) ||
                    (lookAheadType (1) == Token.TokenType.NAME && lookAheadType(2) == Token.TokenType.FROM))
                {
                    loopVariable = match (Token.TokenType.NAME);

                    if(lookAheadType(1) == Token.TokenType.IN) {
                        match (Token.TokenType.IN);
                    }
                    else if(lookAheadType(1) == Token.TokenType.FROM) {
                        // proceed
                    }

                    try {
                        //Console.WriteLine ("Found a potential loop variable " + loopVariable.getTokenString() + ", trying to match loop range expression with a loop variable");
                        loopRangeExpression = expression();
                        if(loopRangeExpression == null) {
                            //Console.WriteLine ("null! Failed to match statement after loop variable, will backtrack and assume this loop does not use a loop variable");
                            backtrackToToken (savePoint);
                        } else {
                            loopVariableName = loopVariable.getTokenString();
                            //Console.WriteLine("Success, loop variable is called: " + loopVariableName);
                        }
                    }
                    catch(Error e) {
                        //Console.WriteLine ("Failed to match statement after loop variable, will backtrack and assume this loop does not use a loop variable");
                        backtrackToToken (savePoint);
                    }
                }

                if (loopRangeExpression == null) {
                    //Console.WriteLine ("There is no loop variable, trying to match a bare loop range expression");
                    loopRangeExpression = expression();
                }

                if (loopRangeExpression == null) {
                    throw new Error ("Failed to match the expression after 'loop'", Error.ErrorType.SYNTAX, loopTree.getToken ().LineNr, loopTree.getToken ().LinePosition);
                }

                //Console.WriteLine ("Loop range/array expression: ");
                //(new ASTPainter ()).PaintAST (loopRangeExpression);

                // __array__ (is a copy of the array to loop over)
                AST_VariableDeclaration loopArrayDeclaration = new AST_VariableDeclaration(
                    new Token(Token.TokenType.VAR_DECLARATION, "<VAR_DECL>"),
                    ReturnValueType.UNKNOWN_TYPE,
                    "__array__");

                loopBlockStatements.addChild(loopArrayDeclaration);

                AST_Assignment loopArrayAssignment =
                    new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), "__array__");

                if(loopRangeExpression != null) {
                    loopArrayAssignment.addChild(loopRangeExpression);
                }
                else {
                    throw new Error("Can't understand array expression in loop", Error.ErrorType.SYNTAX,
                                    loopArrayAssignment.getToken().LineNr,
                                    loopArrayAssignment.getToken().LinePosition);
                }

                loopBlockStatements.addChild(loopArrayAssignment);
//.........這裏部分代碼省略.........
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:101,代碼來源:Parser.cs

示例9: FunctionArgumentList

        AST FunctionArgumentList()
        {
            match (Token.TokenType.PARANTHESIS_LEFT);

            AST argumentList = new AST (new Token (Token.TokenType.NODE_GROUP, "<ARGUMENT_LIST>"));
            if (lookAheadType (1) != Token.TokenType.PARANTHESIS_RIGHT) {
                while (true) {
                    AST expressionTree = expression ();
                    if (expressionTree != null) {
                        argumentList.addChild (expressionTree);
                        // add arguments as subtrees
                    }
                    else {
                        throw new Error ("Something is wrong with the argument list", Error.ErrorType.SYNTAX, lookAhead (1).LineNr, lookAhead (1).LinePosition);
                    }
                    if (lookAheadType (1) == Token.TokenType.COMMA) {
                        match (Token.TokenType.COMMA);
                        continue;
                    }
                    else {
                        // Is something wrong?
                        if (lookAheadType (1) == Token.TokenType.NEW_LINE || lookAheadType (1) == Token.TokenType.EOF) {
                            throw new Error ("Ending parenthesis is missing in function call", Error.ErrorType.SYNTAX, lookAhead (1).LineNr, lookAhead (1).LinePosition);
                        }
                        else
                            if (lookAheadType (1) == Token.TokenType.NAME || lookAheadType (1) == Token.TokenType.QUOTED_STRING || lookAheadType (1) == Token.TokenType.NUMBER) {
                                //throw new Error("A comma is missing in argument list", Error.ErrorType.SYNTAX, lookAhead(1).LineNr, lookAhead(1).LinePosition);
                                // allow missing commas in function call
                                continue;
                            }
                        break;
                    }
                }
            }
            match (Token.TokenType.PARANTHESIS_RIGHT);
            return argumentList;
        }
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:37,代碼來源:Parser.cs

示例10: foreachStuff

        private AST foreachStuff(string pLoopVariableName)
        {
            AST statementList = new AST(new Token(Token.TokenType.STATEMENT_LIST, "<FOREACH_STATEMENTS>"));

            // increase __index__
            AST incrementNode = new AST(new Token(Token.TokenType.OPERATOR, "+"));
            incrementNode.addChild(new AST(new Token(Token.TokenType.NAME, "__index__")));
            incrementNode.addChild(new AST(new TokenWithValue(Token.TokenType.NUMBER, "1", 1.0f)));
            AST_Assignment assignmentNode = new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), "__index__");
            assignmentNode.addChild(incrementNode);
            statementList.addChild(assignmentNode);

            // if(__index__ >= count(__indexes__)) { break }
            AST_FunctionCall lengthOfArray = new AST_FunctionCall(new Token(Token.TokenType.FUNCTION_CALL, "Count"));
            AST argumentList = new AST(new Token(Token.TokenType.NODE_GROUP, "<ARGUMENT_LIST>"));
            argumentList.addChild(new Token(Token.TokenType.NAME, "__indexes__"));
            lengthOfArray.addChild(argumentList);

            AST breakStatement = new AST_IfNode(new Token(Token.TokenType.IF, "IF"));
            AST operatorTree = new AST(new Token(Token.TokenType.OPERATOR, ">="));
            operatorTree.addChild(new Token(Token.TokenType.NAME, "__index__"));
            operatorTree.addChild(lengthOfArray);

            breakStatement.addChild(operatorTree);
            breakStatement.addChild(new Token(Token.TokenType.BREAK, "break"));
            statementList.addChild(breakStatement);

            // Loop variable
            AST_VariableDeclaration declarationTree =
                new AST_VariableDeclaration(new Token(Token.TokenType.VAR_DECLARATION, "<VAR_DECL>"), ReturnValueType.UNKNOWN_TYPE, pLoopVariableName);
            statementList.addChild(declarationTree);

            AST arrayIndexLookup = new AST(new Token(Token.TokenType.ARRAY_LOOKUP, "__indexes__"));
            arrayIndexLookup.addChild(new AST(new Token(Token.TokenType.NAME, "__index__")));

            AST arrayValueLookup = new AST(new Token(Token.TokenType.ARRAY_LOOKUP, "__array__"));
            arrayValueLookup.addChild(arrayIndexLookup);

            AST_Assignment assignmentTree =
                new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), pLoopVariableName);
            assignmentTree.addChild(arrayValueLookup);
            statementList.addChild(assignmentTree);

            return statementList;
        }
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:45,代碼來源:Parser.cs

示例11: parameterList

        private AST parameterList()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("parameter list");
            #endif

            AST parameterListTree = new AST(new Token(Token.TokenType.NODE_GROUP, "<PARAMETER_LIST>", lookAhead(1).LineNr, lookAhead(1).LinePosition));

            if (lookAheadType(1) != Token.TokenType.PARANTHESIS_RIGHT) {

                while(true) {

                    AST parameterTree = parameter();
                    parameterListTree.addChild(parameterTree);

                    if (lookAheadType(1) == Token.TokenType.COMMA) {
                        match(Token.TokenType.COMMA);
                        continue;
                    } else {
                        break;
                    }
                }
            }

            return parameterListTree;
        }
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:26,代碼來源:Parser.cs

示例12: parameter

        private AST parameter()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("parameter");
            #endif

            AST parameterTree = new AST(new Token(Token.TokenType.PARAMETER, "<PARAMETER>", lookAhead(1).LineNr, lookAhead(1).LinePosition));

            AST type = null;

            if(lookAheadType(1) == Token.TokenType.BUILT_IN_TYPE_NAME) {
                type = new AST(match(Token.TokenType.BUILT_IN_TYPE_NAME));
            } else {
                type = new AST(new Token(Token.TokenType.BUILT_IN_TYPE_NAME, "var"));
            }
            AST name = new AST(match(Token.TokenType.NAME));

            AST declaration = new AST_VariableDeclaration(new Token(Token.TokenType.VAR_DECLARATION, "<PARAMETER_DECLARATION>"),
                                                          ExternalFunctionCreator.GetReturnTypeFromString(type.getTokenString()), name.getTokenString());

            AST assigment = new AST_Assignment(new Token(Token.TokenType.ASSIGNMENT, "="), name.getTokenString());

            parameterTree.addChild(declaration);
            parameterTree.addChild(assigment);

            return parameterTree;
        }
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:27,代碼來源:Parser.cs

示例13: negativeExpression

        private AST negativeExpression()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("negative expression");
            #endif
            match(Token.TokenType.OPERATOR); // the minus sign

            AST negativeExpressionTree = new AST(new Token(Token.TokenType.OPERATOR, "*"));

            AST minusSign = new AST(new TokenWithValue(Token.TokenType.NUMBER, "-1", lookAhead(1).LineNr, lookAhead(1).LinePosition, -1.0f));
            AST expressionTree = parenthesisExpression();
            //operand();
            negativeExpressionTree.addChild(minusSign);
            negativeExpressionTree.addChild(expressionTree);

            return negativeExpressionTree;
        }
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:17,代碼來源:Parser.cs

示例14: notStatement

 private AST notStatement()
 {
     var notAST = new AST(match(Token.TokenType.NOT));
     var expr = expression();
     notAST.addChild(expr);
     return notAST;
 }
開發者ID:eriksvedang,項目名稱:Sprak,代碼行數:7,代碼來源:Parser.cs

示例15: declarationAndAssignment

        private AST declarationAndAssignment()
        {
            #if WRITE_DEBUG_INFO
            Console.WriteLine("declaration and assignment");
            #endif

            AST_VariableDeclaration declarationTree = declaration();
            Token assignmentToken = match(Token.TokenType.ASSIGNMENT);
            AST expressionTree = expression();

            if(expressionTree != null) {
                AST_Assignment assignmentTree = new AST_Assignment(assignmentToken, declarationTree.Name);

                assignmentTree.addChild(expressionTree);

                AST declarationAndAssignmentTree =
                        new AST(new Token(Token.TokenType.STATEMENT_LIST, "<DECLARATION_AND_ASSIGNMENT>", declarationTree.getToken().LineNr, declarationTree.getToken().LinePosition));
                declarationAndAssignmentTree.addChild(declarationTree);
                declarationAndAssignmentTree.addChild(assignmentTree);

                return declarationAndAssignmentTree;
            } else {
                throw new Error("The expression after = makes no sense", Error.ErrorType.SYNTAX,
                    lookAhead(1).LineNr, lookAhead(1).LinePosition);
            }
        }
開發者ID:bloomingbridges,項目名稱:hxSprak,代碼行數:26,代碼來源:Parser.cs


注:本文中的ProgrammingLanguageNr1.AST.addChild方法示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。