Formatting.

functions
Justyna Ilczuk 2012-12-28 15:40:54 +01:00
parent 2d649a149b
commit 0e6bdecf2a
1 changed files with 267 additions and 316 deletions

View File

@ -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;
}
}