55
55
private ParseNode ParseTerm(TokenStream tokenStream, ref ParserState state)
57
57
var node = new ParseNode(ParseNodeKind.InfixOperator);
58
node.Children.Add(ParseImplicitTermOptional(tokenStream, ref state));
58
node.Children.Add(ParseFirstImplicitTermOptional(tokenStream, ref state));
59
59
switch (tokenStream.Current.Symbol)
61
61
case SymbolKind.Cross:
73
private ParseNode ParseFirstImplicitTermOptional(TokenStream tokenStream, ref ParserState state)
75
var node = new ParseNode(ParseNodeKind.PrefixOperator);
76
node.Children.Add(new ParseNode(Token.FromKind(SymbolKind.Dot, tokenStream.Current.Position)));
77
node.Children.Add(ParseSignedValue(tokenStream, ref state));
78
var implicitTermNode = ParseImplicitTermOptional(tokenStream, ref state);
79
if (implicitTermNode != null)
80
node.Children.Add(implicitTermNode);
73
84
private ParseNode ParseImplicitTermOptional(TokenStream tokenStream, ref ParserState state)
75
var node = new ParseNode(ParseNodeKind.PostfixOperator);
76
node.Children.Add(ParseSignedValue(tokenStream, ref state));
78
while ((valueNode = ParseValueOptional(tokenStream, ref state)) != null)
79
node.Children.Add(valueNode);
86
var valueNode = ParseValueOptional(tokenStream, ref state);
87
if (valueNode == null)
89
var node = new ParseNode(ParseNodeKind.PrefixOperator);
80
90
node.Children.Add(new ParseNode(Token.FromKind(SymbolKind.Dot, tokenStream.Current.Position)));
91
node.Children.Add(valueNode);
92
var implicitTermNode = ParseImplicitTermOptional(tokenStream, ref state);
93
if (implicitTermNode != null)
94
node.Children.Add(implicitTermNode);