private void ParseComparison(ParseNode parent) // NonTerminalSymbol: Comparison
{
Token tok;
ParseNode n;
ParseNode node = parent.CreateNode(_scanner.GetToken(TokenType.Comparison), "Comparison");
parent.Nodes.Add(node);
// Concat Rule
ParseAdditive(node); // NonTerminal Rule: Additive
// Concat Rule
tok = _scanner.LookAhead(TokenType.COMPARISON, TokenType.IN); // Option Rule
if (tok.Type == TokenType.COMPARISON
|| tok.Type == TokenType.IN)
{
tok = _scanner.LookAhead(TokenType.COMPARISON, TokenType.IN); // Choice Rule
switch (tok.Type)
{
// Choice Rule
case TokenType.COMPARISON:
do
{
// OneOrMore Rule
// Concat Rule
tok = _scanner.Scan(TokenType.COMPARISON); // Terminal Rule: COMPARISON
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.COMPARISON)
{
tree.Errors.Add(
new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.COMPARISON.ToString(), 0x1001,
tok));
return;
}
// Concat Rule
ParseAdditive(node); // NonTerminal Rule: Additive
tok = _scanner.LookAhead(TokenType.COMPARISON); // OneOrMore Rule
} while (tok.Type == TokenType.COMPARISON); // OneOrMore Rule
break;
case TokenType.IN:
// Concat Rule
tok = _scanner.Scan(TokenType.IN); // Terminal Rule: IN
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.IN)
{
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.IN.ToString(),
0x1001, tok));
return;
}
// Concat Rule
tok = _scanner.Scan(TokenType.OPENSQUARE); // Terminal Rule: OPENSQUARE
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.OPENSQUARE)
{
tree.Errors.Add(
new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OPENSQUARE.ToString(), 0x1001,
tok));
return;
}
// Concat Rule
ParseValueList(node); // NonTerminal Rule: ValueList
// Concat Rule
tok = _scanner.Scan(TokenType.CLOSESQUARE); // Terminal Rule: CLOSESQUARE
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.CLOSESQUARE)
{
tree.Errors.Add(
new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CLOSESQUARE.ToString(), 0x1001,
tok));
return;
}
break;
default:
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected COMPARISON or IN.", 0x0002, tok));
break;
} // Choice Rule
}
parent.Token.UpdateRange(node.Token);
} // NonTerminalSymbol: Comparison