private void ParseAtom(ParseNode parent)
{
Token tok;
ParseNode n;
ParseNode node = parent.CreateNode(scanner.GetToken(TokenType.Atom), "Atom");
parent.Nodes.Add(node);
tok = scanner.LookAhead(TokenType.VARIABLE, TokenType.STRING, TokenType.NUMBER, TokenType.BOOLEAN, TokenType.BROPEN);
switch (tok.Type)
{
case TokenType.VARIABLE:
tok = scanner.Scan(TokenType.VARIABLE);
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.VARIABLE)
{
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.VARIABLE.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
return;
}
break;
case TokenType.STRING:
tok = scanner.Scan(TokenType.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, 0, tok.StartPos, tok.StartPos, tok.Length));
return;
}
break;
case TokenType.NUMBER:
tok = scanner.Scan(TokenType.NUMBER);
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.NUMBER)
{
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.NUMBER.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
return;
}
break;
case TokenType.BOOLEAN:
tok = scanner.Scan(TokenType.BOOLEAN);
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.BOOLEAN)
{
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.BOOLEAN.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
return;
}
break;
case TokenType.BROPEN:
tok = scanner.Scan(TokenType.BROPEN);
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.BROPEN)
{
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.BROPEN.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
return;
}
ParseExpr(node);
tok = scanner.Scan(TokenType.BRCLOSE);
n = node.CreateNode(tok, tok.ToString());
node.Token.UpdateRange(tok);
node.Nodes.Add(n);
if (tok.Type != TokenType.BRCLOSE)
{
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found. Expected " + TokenType.BRCLOSE.ToString(), 0x1001, 0, tok.StartPos, tok.StartPos, tok.Length));
return;
}
break;
default:
tree.Errors.Add(new ParseError("Unexpected token '" + tok.Text.Replace("\n", "") + "' found.", 0x0002, 0, tok.StartPos, tok.StartPos, tok.Length));
break;
}
parent.Token.UpdateRange(node.Token);
}