private void ParseNewJson(ParseNode parent) // NonTerminalSymbol: NewJson
{
Token tok;
ParseNode n;
ParseNode node = parent.CreateNode(_scanner.GetToken(TokenType.NewJson), "NewJson");
parent.Nodes.Add(node);
tok = _scanner.LookAhead(TokenType.OPENCURLY, TokenType.NEW); // Choice Rule
switch (tok.Type)
{
// Choice Rule
case TokenType.OPENCURLY:
// Concat Rule
tok = _scanner.Scan(TokenType.OPENCURLY); // Terminal Rule: OPENCURLY
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.OPENCURLY)
{
tree.Errors.Add(
new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OPENCURLY.ToString(), 0x1001, tok));
return;
}
// Concat Rule
ParseField(node); // NonTerminal Rule: Field
// Concat Rule
tok = _scanner.LookAhead(TokenType.COMMA); // ZeroOrMore Rule
while (tok.Type == TokenType.COMMA)
{
// Concat Rule
tok = _scanner.Scan(TokenType.COMMA); // Terminal Rule: COMMA
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.COMMA)
{
tree.Errors.Add(new ParseError(
"Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.COMMA.ToString(), 0x1001, tok));
return;
}
// Concat Rule
ParseField(node); // NonTerminal Rule: Field
tok = _scanner.LookAhead(TokenType.COMMA); // ZeroOrMore Rule
}
// Concat Rule
tok = _scanner.Scan(TokenType.CLOSECURLY); // Terminal Rule: CLOSECURLY
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.CLOSECURLY)
{
tree.Errors.Add(
new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CLOSECURLY.ToString(), 0x1001,
tok));
return;
}
break;
case TokenType.NEW:
// Concat Rule
tok = _scanner.Scan(TokenType.NEW); // Terminal Rule: NEW
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.NEW)
{
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.NEW.ToString(),
0x1001, tok));
return;
}
// Concat Rule
tok = _scanner.Scan(TokenType.OPENPAREN); // Terminal Rule: OPENPAREN
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.OPENPAREN)
{
tree.Errors.Add(
new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.OPENPAREN.ToString(), 0x1001, tok));
return;
}
// Concat Rule
ParseField(node); // NonTerminal Rule: Field
// Concat Rule
tok = _scanner.LookAhead(TokenType.COMMA); // ZeroOrMore Rule
while (tok.Type == TokenType.COMMA)
{
// Concat Rule
tok = _scanner.Scan(TokenType.COMMA); // Terminal Rule: COMMA
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.COMMA)
{
tree.Errors.Add(new ParseError(
"Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.COMMA.ToString(), 0x1001, tok));
return;
}
// Concat Rule
ParseField(node); // NonTerminal Rule: Field
tok = _scanner.LookAhead(TokenType.COMMA); // ZeroOrMore Rule
}
// Concat Rule
tok = _scanner.Scan(TokenType.CLOSEPAREN); // Terminal Rule: CLOSEPAREN
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.CLOSEPAREN)
{
tree.Errors.Add(
new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.CLOSEPAREN.ToString(), 0x1001,
tok));
return;
}
break;
default:
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected OPENCURLY or NEW.", 0x0002, tok));
break;
} // Choice Rule
parent.Token.UpdateRange(node.Token);
} // NonTerminalSymbol: NewJson