private void ParseStatement(ParseNode parent) // NonTerminalSymbol: Statement
{
Token tok;
ParseNode n;
ParseNode node = parent.CreateNode(_scanner.GetToken(TokenType.Statement), "Statement");
parent.Nodes.Add(node);
// Concat Rule
tok = _scanner.Scan(TokenType.IDENTIFIER); // Terminal Rule: IDENTIFIER
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.IDENTIFIER)
{
tree.Errors.Add(
new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.IDENTIFIER.ToString(), 0x1001, tok));
return;
}
// Concat Rule
tok = _scanner.LookAhead(TokenType.OPENPAREN, TokenType.OPENSQUARE); // Option Rule
if (tok.Type == TokenType.OPENPAREN
|| tok.Type == TokenType.OPENSQUARE)
{
ParseCall(node); // NonTerminal Rule: Call
}
// Concat Rule
tok = _scanner.LookAhead(TokenType.DOT); // Option Rule
if (tok.Type == TokenType.DOT)
{
// Concat Rule
tok = _scanner.Scan(TokenType.DOT); // Terminal Rule: DOT
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.DOT)
{
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.DOT.ToString(),
0x1001, tok));
return;
}
// Concat Rule
ParseStatement(node); // NonTerminal Rule: Statement
}
parent.Token.UpdateRange(node.Token);
} // NonTerminalSymbol: Statement