本文整理匯總了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());
}
示例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());
}
示例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;
}
示例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);
}
示例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;
}
}
示例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;
}
}
示例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);
//.........這裏部分代碼省略.........
示例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);
//.........這裏部分代碼省略.........
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例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;
}
示例14: notStatement
private AST notStatement()
{
var notAST = new AST(match(Token.TokenType.NOT));
var expr = expression();
notAST.addChild(expr);
return notAST;
}
示例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);
}
}