Refactor SyntaxNode parent setting

This commit is contained in:
Alexander Luzgarev 2018-04-07 13:44:57 +02:00
parent e748f89fdf
commit 0ba85620a6

View File

@ -1,13 +1,12 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Reflection.Metadata;
using Lexer; using Lexer;
namespace Parser namespace Parser
{ {
public class SyntaxFactory public class SyntaxFactory
{ {
private static SyntaxNode SetParent(SyntaxNode parent) private static T SetParent<T>(T parent) where T : SyntaxNode
{ {
foreach (var node in parent.Children) foreach (var node in parent.Children)
{ {
@ -51,8 +50,7 @@ namespace Parser
body, body,
end, end,
semicolonOrComma); semicolonOrComma);
SetParent(result); return SetParent(result);
return result;
} }
public FunctionOutputDescriptionNode FunctionOutputDescription( public FunctionOutputDescriptionNode FunctionOutputDescription(
@ -69,8 +67,7 @@ namespace Parser
.ToList(), .ToList(),
equalitySign equalitySign
); );
SetParent(result); return SetParent(result);
return result;
} }
public ParameterListNode ParameterList(List<SyntaxNode> nodes) public ParameterListNode ParameterList(List<SyntaxNode> nodes)
@ -82,15 +79,13 @@ namespace Parser
node => node is TokenNode tokenNode && tokenNode.Token.Kind != TokenKind.Comma node => node is TokenNode tokenNode && tokenNode.Token.Kind != TokenKind.Comma
) )
.ToList()); .ToList());
SetParent(result); return SetParent(result);
return result;
} }
public StatementListNode StatementList(List<SyntaxNode> nodes) public StatementListNode StatementList(List<SyntaxNode> nodes)
{ {
var result = new StatementListNode(nodes); var result = new StatementListNode(nodes);
SetParent(result); return SetParent(result);
return result;
} }
public FunctionInputDescriptionNode FunctionInputDescription( public FunctionInputDescriptionNode FunctionInputDescription(
@ -105,8 +100,7 @@ namespace Parser
closingBracket closingBracket
}; };
var result = new FunctionInputDescriptionNode(children, openingBracket, parameterList, closingBracket); var result = new FunctionInputDescriptionNode(children, openingBracket, parameterList, closingBracket);
SetParent(result); return SetParent(result);
return result;
} }
public TokenNode Token(Token token) public TokenNode Token(Token token)
@ -136,8 +130,7 @@ namespace Parser
endKeyword, endKeyword,
semicolonOrComma, semicolonOrComma,
optionalCommasAfterExpression); optionalCommasAfterExpression);
SetParent(result); return SetParent(result);
return result;
} }
public SwitchCaseNode SwitchCase( public SwitchCaseNode SwitchCase(
@ -159,8 +152,7 @@ namespace Parser
caseIdentifier, caseIdentifier,
statementList, statementList,
optionalCommasAfterIdentifier); optionalCommasAfterIdentifier);
SetParent(result); return SetParent(result);
return result;
} }
public AssignmentExpressionNode AssignmentExpression( public AssignmentExpressionNode AssignmentExpression(
@ -175,8 +167,7 @@ namespace Parser
rhs rhs
}; };
var result = new AssignmentExpressionNode(children, lhs, assignmentSign, rhs); var result = new AssignmentExpressionNode(children, lhs, assignmentSign, rhs);
SetParent(result); return SetParent(result);
return result;
} }
public UnaryPrefixOperationExpressionNode UnaryPrefixOperationExpression( public UnaryPrefixOperationExpressionNode UnaryPrefixOperationExpression(
@ -189,8 +180,7 @@ namespace Parser
operand operand
}; };
var result = new UnaryPrefixOperationExpressionNode(children, operation, operand); var result = new UnaryPrefixOperationExpressionNode(children, operation, operand);
SetParent(result); return SetParent(result);
return result;
} }
public UnaryPostfixOperationExpressionNode UnaryPostfixOperationExpression( public UnaryPostfixOperationExpressionNode UnaryPostfixOperationExpression(
@ -203,8 +193,7 @@ namespace Parser
operation operation
}; };
var result = new UnaryPostfixOperationExpressionNode(children, operand, operation); var result = new UnaryPostfixOperationExpressionNode(children, operand, operation);
SetParent(result); return SetParent(result);
return result;
} }
public BinaryOperationExpressionNode BinaryOperationExpression( public BinaryOperationExpressionNode BinaryOperationExpression(
@ -219,8 +208,7 @@ namespace Parser
rhs rhs
}; };
var result = new BinaryOperationExpressionNode(children, lhs, operation, rhs); var result = new BinaryOperationExpressionNode(children, lhs, operation, rhs);
SetParent(result); return SetParent(result);
return result;
} }
public IdentifierNameNode IdentifierName( public IdentifierNameNode IdentifierName(
@ -257,16 +245,14 @@ namespace Parser
{ {
var children = new List<SyntaxNode> {expression}; var children = new List<SyntaxNode> {expression};
var result = new ExpressionStatementNode(children, expression, null); var result = new ExpressionStatementNode(children, expression, null);
SetParent(result); return SetParent(result);
return result;
} }
public ExpressionStatementNode ExpressionStatement(ExpressionNode expression, TokenNode semicolonOrComma) public ExpressionStatementNode ExpressionStatement(ExpressionNode expression, TokenNode semicolonOrComma)
{ {
var children = new List<SyntaxNode> {expression, semicolonOrComma}; var children = new List<SyntaxNode> {expression, semicolonOrComma};
var result = new ExpressionStatementNode(children, expression, semicolonOrComma); var result = new ExpressionStatementNode(children, expression, semicolonOrComma);
SetParent(result); return SetParent(result);
return result;
} }
public CellArrayElementAccessExpressionNode CellArrayElementAccessExpression( public CellArrayElementAccessExpressionNode CellArrayElementAccessExpression(
@ -282,8 +268,7 @@ namespace Parser
openingBrace, openingBrace,
indices, indices,
closingBrace); closingBrace);
SetParent(result); return SetParent(result);
return result;
} }
public FunctionCallExpressionNode FunctionCallExpression( public FunctionCallExpressionNode FunctionCallExpression(
@ -305,8 +290,7 @@ namespace Parser
openingBracket, openingBracket,
parameters, parameters,
closingBracket); closingBracket);
SetParent(result); return SetParent(result);
return result;
} }
public FunctionCallParameterListNode FunctionCallParameterList(List<SyntaxNode> nodes) public FunctionCallParameterListNode FunctionCallParameterList(List<SyntaxNode> nodes)
@ -316,8 +300,7 @@ namespace Parser
nodes nodes
.OfType<ExpressionNode>() .OfType<ExpressionNode>()
.ToList()); .ToList());
SetParent(result); return SetParent(result);
return result;
} }
public ArrayElementListNode ArrayElementList(List<SyntaxNode> nodes) public ArrayElementListNode ArrayElementList(List<SyntaxNode> nodes)
@ -327,8 +310,7 @@ namespace Parser
nodes nodes
.OfType<ExpressionNode>() .OfType<ExpressionNode>()
.ToList()); .ToList());
SetParent(result); return SetParent(result);
return result;
} }
public CompoundNameNode CompoundName(List<SyntaxNode> nodes) public CompoundNameNode CompoundName(List<SyntaxNode> nodes)
@ -338,8 +320,7 @@ namespace Parser
nodes nodes
.OfType<IdentifierNameNode>() .OfType<IdentifierNameNode>()
.ToList()); .ToList());
SetParent(result); return SetParent(result);
return result;
} }
public ArrayLiteralExpressionNode ArrayLiteralExpression( public ArrayLiteralExpressionNode ArrayLiteralExpression(
@ -358,8 +339,7 @@ namespace Parser
openingSquareBracket, openingSquareBracket,
elements, elements,
closingSquareBracket); closingSquareBracket);
SetParent(result); return SetParent(result);
return result;
} }
public CellArrayLiteralExpressionNode CellArrayLiteralExpression( public CellArrayLiteralExpressionNode CellArrayLiteralExpression(
@ -378,8 +358,7 @@ namespace Parser
openingBrace, openingBrace,
elements, elements,
closingBrace); closingBrace);
SetParent(result); return SetParent(result);
return result;
} }
public EmptyExpressionNode EmptyExpression() public EmptyExpressionNode EmptyExpression()
@ -403,8 +382,7 @@ namespace Parser
leftOperand, leftOperand,
dot, dot,
rightOperand); rightOperand);
SetParent(result); return SetParent(result);
return result;
} }
public WhileStatementNode WhileStatement( public WhileStatementNode WhileStatement(
@ -432,8 +410,7 @@ namespace Parser
body, body,
end, end,
semicolonOrComma); semicolonOrComma);
SetParent(result); return SetParent(result);
return result;
} }
public StatementNode AppendSemicolonOrComma(StatementNode statement, TokenNode semicolonOrComma) public StatementNode AppendSemicolonOrComma(StatementNode statement, TokenNode semicolonOrComma)
@ -473,8 +450,7 @@ namespace Parser
elseKeyword, elseKeyword,
elseBody, elseBody,
endKeyword); endKeyword);
SetParent(result); return SetParent(result);
return result;
} }
public ParenthesizedExpressionNode ParenthesizedExpression( public ParenthesizedExpressionNode ParenthesizedExpression(
@ -493,8 +469,7 @@ namespace Parser
openParen, openParen,
expression, expression,
closeParen); closeParen);
SetParent(result); return SetParent(result);
return result;
} }
public ForStatementNode ForStatement( public ForStatementNode ForStatement(
@ -519,8 +494,7 @@ namespace Parser
body, body,
endKeyword, endKeyword,
optionalCommasAfterAssignment); optionalCommasAfterAssignment);
SetParent(result); return SetParent(result);
return result;
} }
public IndirectMemberAccessNode IndirectMemberAccess( public IndirectMemberAccessNode IndirectMemberAccess(
@ -539,8 +513,7 @@ namespace Parser
openingBracket, openingBracket,
indirectMemberName, indirectMemberName,
closingBracket); closingBracket);
SetParent(result); return SetParent(result);
return result;
} }
public NamedFunctionHandleNode NamedFunctionHandle( public NamedFunctionHandleNode NamedFunctionHandle(
@ -556,8 +529,7 @@ namespace Parser
children, children,
atSign, atSign,
functionName); functionName);
SetParent(result); return SetParent(result);
return result;
} }
public LambdaNode Lambda( public LambdaNode Lambda(
@ -576,8 +548,7 @@ namespace Parser
atSign, atSign,
input, input,
body); body);
SetParent(result); return SetParent(result);
return result;
} }
public TryCatchStatementNode TryCatchStatement( public TryCatchStatementNode TryCatchStatement(
@ -602,8 +573,7 @@ namespace Parser
catchKeyword, catchKeyword,
catchBody, catchBody,
endKeyword); endKeyword);
SetParent(result); return SetParent(result);
return result;
} }
public TryCatchStatementNode TryCatchStatement( public TryCatchStatementNode TryCatchStatement(
@ -624,8 +594,7 @@ namespace Parser
null, null,
null, null,
endKeyword); endKeyword);
SetParent(result); return SetParent(result);
return result;
} }
public CommandExpressionNode CommandExpression( public CommandExpressionNode CommandExpression(
@ -641,8 +610,7 @@ namespace Parser
children, children,
identifierName, identifierName,
arguments); arguments);
SetParent(result); return SetParent(result);
return result;
} }
public BaseClassInvokationNode BaseClassInvokation( public BaseClassInvokationNode BaseClassInvokation(
@ -661,8 +629,7 @@ namespace Parser
methodName, methodName,
atToken, atToken,
baseClassNameAndArguments); baseClassNameAndArguments);
SetParent(result); return SetParent(result);
return result;
} }
} }
} }