private void ParseValue(ParseNode parent) // NonTerminalSymbol: Value
{
Token tok;
ParseNode n;
ParseNode node = parent.CreateNode(_scanner.GetToken(TokenType.Value), "Value");
parent.Nodes.Add(node);
tok = _scanner.LookAhead(TokenType.STRING, TokenType.INTEGER, TokenType.REAL); // Choice Rule
switch (tok.Type)
{
// Choice Rule
case TokenType.STRING:
tok = _scanner.Scan(TokenType.STRING); // Terminal Rule: STRING
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.STRING)
{
tree.Errors.Add(new ParseError(
"Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.STRING.ToString(), 0x1001, tok));
return;
}
break;
case TokenType.INTEGER:
tok = _scanner.Scan(TokenType.INTEGER); // Terminal Rule: INTEGER
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.INTEGER)
{
tree.Errors.Add(new ParseError(
"Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.INTEGER.ToString(), 0x1001, tok));
return;
}
break;
case TokenType.REAL:
tok = _scanner.Scan(TokenType.REAL); // Terminal Rule: REAL
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.REAL)
{
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.REAL.ToString(),
0x1001, tok));
return;
}
break;
default:
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected STRING, INTEGER, or REAL.",
0x0002, tok));
break;
} // Choice Rule
parent.Token.UpdateRange(node.Token);
} // NonTerminalSymbol: Value