Formatting.
parent
2d649a149b
commit
0e6bdecf2a
|
@ -13,24 +13,17 @@ Parser::Parser(Context * context)
|
|||
|
||||
Parser::~Parser()
|
||||
{
|
||||
//dtor
|
||||
|
||||
}
|
||||
|
||||
void Parser::erase_all()
|
||||
{
|
||||
/*tree.delete_all_children();
|
||||
tree.root = new ProgramNode();
|
||||
*/
|
||||
|
||||
error_message = "***ERRORS DURING PARSING***\n";
|
||||
|
||||
position_in_stream = 0;
|
||||
in_statement = false;
|
||||
this->token_stream = vector<Token>();
|
||||
delete program;
|
||||
program = new ProgramNode();
|
||||
|
||||
|
||||
}
|
||||
string Parser::show_tokens()
|
||||
{
|
||||
|
@ -80,8 +73,6 @@ void Parser::interpret()
|
|||
{
|
||||
program->add_statement(statement());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
bool Parser::peek(string s)
|
||||
|
@ -106,7 +97,6 @@ bool Parser::expect(string s)
|
|||
string error_message = "Error: expected ";
|
||||
error_message += s;
|
||||
error_message += " but received: " + tok_value + "\n";
|
||||
|
||||
error(error_message);
|
||||
return false;
|
||||
}
|
||||
|
@ -115,13 +105,11 @@ bool Parser::expect(string s)
|
|||
|
||||
bool Parser::is_type()
|
||||
{
|
||||
|
||||
if(tok_value == "def" || tok_value == "string" || tok_value == "num")
|
||||
{
|
||||
read_next();
|
||||
return true;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
return false;
|
||||
|
@ -139,13 +127,11 @@ bool Parser::is_function_name()
|
|||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ASTStatement * Parser::statement()
|
||||
{
|
||||
BasicStatement * stat = new BasicStatement();
|
||||
|
||||
if(accept("{"))
|
||||
{
|
||||
while(!accept("}"))
|
||||
|
@ -153,25 +139,18 @@ ASTStatement * Parser::statement()
|
|||
stat->children.push_back( statement());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
else if(is_type())
|
||||
{
|
||||
DeclarationStatement * declaration = new DeclarationStatement(context);
|
||||
std::string identifier = tok_value;
|
||||
|
||||
read_next();
|
||||
|
||||
declaration->add_name(identifier);
|
||||
|
||||
if(accept("="))
|
||||
{
|
||||
ASTExpression * ae = expr();
|
||||
declaration->add_right_value(ae);
|
||||
accept(";");
|
||||
}
|
||||
|
||||
|
||||
if(expect("("))
|
||||
{
|
||||
int argc = 0;
|
||||
|
@ -189,19 +168,14 @@ ASTStatement * Parser::statement()
|
|||
expect(",");
|
||||
}
|
||||
expect(")");
|
||||
|
||||
if(!accept(";"))
|
||||
{
|
||||
|
||||
declaration->add_body(statement());
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
delete stat;
|
||||
return declaration;
|
||||
|
||||
}
|
||||
else if(accept("if"))
|
||||
{
|
||||
|
@ -212,7 +186,6 @@ ASTStatement * Parser::statement()
|
|||
{
|
||||
ifStatement->add_else_block(statement());
|
||||
}
|
||||
|
||||
delete stat;
|
||||
return ifStatement;
|
||||
}
|
||||
|
@ -221,8 +194,6 @@ ASTStatement * Parser::statement()
|
|||
RepeatStatement * repeat = new RepeatStatement();
|
||||
repeat->add_iteration_number(expr()->evaluate());
|
||||
repeat->add_body(statement());
|
||||
|
||||
//similar stuff
|
||||
delete stat;
|
||||
return repeat;
|
||||
}
|
||||
|
@ -231,37 +202,30 @@ ASTStatement * Parser::statement()
|
|||
WhileNode * while_node = new WhileNode();
|
||||
while_node->add_condition(expr());
|
||||
while_node->add_body(statement());
|
||||
|
||||
delete stat;
|
||||
return while_node;
|
||||
}
|
||||
else if(accept("return"))
|
||||
{
|
||||
|
||||
if(!peek(";"))
|
||||
{
|
||||
stat->add_expression(expr());
|
||||
}
|
||||
expect(";");
|
||||
|
||||
return stat;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
stat->add_expression(expr());
|
||||
while(!expect(";") && tok_value != "") read_next();
|
||||
return stat;
|
||||
|
||||
}
|
||||
|
||||
return stat;
|
||||
}
|
||||
|
||||
ASTExpression * Parser::prim_expr()
|
||||
{
|
||||
|
||||
if(current_token.get_type() == t_integer)
|
||||
{
|
||||
ConstantExpression * ce;
|
||||
|
@ -288,13 +252,11 @@ ASTExpression * Parser::prim_expr()
|
|||
ConstantExpression * ce;
|
||||
if(tok_value == "true")
|
||||
{
|
||||
|
||||
ce = new ConstantExpression( SenchaObject(true));
|
||||
read_next();
|
||||
}
|
||||
else if (tok_value == "false")
|
||||
{
|
||||
|
||||
ce = new ConstantExpression(SenchaObject(false));
|
||||
read_next();
|
||||
}
|
||||
|
@ -324,7 +286,6 @@ ASTExpression * Parser::prim_expr()
|
|||
read_next();
|
||||
return new IncorrectExpression(error_message);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
ASTExpression * Parser::postfix_expr()
|
||||
|
@ -347,7 +308,6 @@ ASTExpression * Parser::postfix_expr()
|
|||
}
|
||||
expect(")");
|
||||
}
|
||||
|
||||
return function_call;
|
||||
}
|
||||
}
|
||||
|
@ -378,7 +338,6 @@ ASTExpression * Parser::mul_expr()
|
|||
delete be;
|
||||
return ae;
|
||||
}
|
||||
|
||||
return be;
|
||||
}
|
||||
|
||||
|
@ -407,7 +366,6 @@ ASTExpression * Parser::add_expr()
|
|||
delete be;
|
||||
return ae;
|
||||
}
|
||||
|
||||
return be;
|
||||
}
|
||||
|
||||
|
@ -436,8 +394,6 @@ ASTExpression * Parser::rel_expr()
|
|||
delete be;
|
||||
return ae;
|
||||
}
|
||||
|
||||
|
||||
return be;
|
||||
}
|
||||
|
||||
|
@ -466,7 +422,6 @@ ASTExpression * Parser::eq_expr()
|
|||
delete be;
|
||||
return ae;
|
||||
}
|
||||
|
||||
return be;
|
||||
}
|
||||
|
||||
|
@ -495,7 +450,6 @@ ASTExpression * Parser::log_expr()
|
|||
delete be;
|
||||
return ae;
|
||||
}
|
||||
|
||||
return be;
|
||||
}
|
||||
|
||||
|
@ -504,7 +458,6 @@ ASTExpression * Parser::expr()
|
|||
Assignment * assignment = new Assignment( context);
|
||||
auto name = tok_value;
|
||||
ASTExpression * left = log_expr();
|
||||
|
||||
if(accept("="))
|
||||
{
|
||||
ASTExpression * right = expr();
|
||||
|
@ -515,11 +468,9 @@ ASTExpression * Parser::expr()
|
|||
|
||||
return assignment;
|
||||
}
|
||||
|
||||
else
|
||||
{
|
||||
delete assignment;
|
||||
return left;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue