1%The grammar files are saved in grammars.pl
    2
    3statement_with_semicolon(Data,Return_type,return(To_return1)) -->
    4	return_(Data,[expr(Data,Return_type,To_return1)]).
    5	
    6statement_with_semicolon(Data,_,plus_plus(Name)) --> 
    7        plus_plus_(Data,[
    8			var_name_(Data,int,Name)
    9        ]).
   10
   11statement_with_semicolon(Data,_,minus_minus(Name)) --> 
   12	minus_minus_(Data,[var_name_(Data,int,Name)]).
   13
   14statement_with_semicolon(Data,_,initialize_constant(Type,Name,Expr)) -->
   15	initialize_constant_(Data,[
   16		var_name_(Data,Type,Name),
   17		type(Data,Type),
   18		expr(Data,Type,Expr)
   19	]).
   20
   21
   22statement_with_semicolon(Data,Type, function_call(Name,Params1,Params2)) -->
   23    function_call_(Data,[
   24		function_name(Data,Type,Name,Params2),
   25		function_call_parameters(Data,Params1,Params2)
   26	]).
   27
   28
   29statement_with_semicolon(Data,_,set_array_size(Name,Size,Type)) -->
   30	set_array_size_(Data,[
   31		var_name_(Data,Name,[array,Type]),
   32		expr(Data,int,Size),
   33		type(Data,Type)
   34	]).
   35
   36statement_with_semicolon(Data,_,set_dict(Name,Index,Expr,Type)) -->
   37	set_dict_(Data,[
   38		var_name_(Data,[dict,Type],Name),
   39		symbol(Index),
   40		expr(Data,Type,Expr)
   41	]).
   42statement_with_semicolon(Data,_,set_array_index(Name,Index,Expr,Type)) -->
   43	set_array_index_(Data,[
   44		var_name_(Data,[array,Type],Name),
   45		parentheses_expr(Data,int,Index),
   46		parentheses_expr(Data,Type,Expr)
   47	]).
   48
   49
   50statement_with_semicolon(Data,_,set_var(Name1,Expr1,Type)) -->
   51	set_var_(Data,[
   52		var_name_(Data,Type,Name1),
   53		expr(Data,Type,Expr1)
   54	]).
   55	
   56	
   57
   58statement_with_semicolon(Data,_,initialize_empty_var(Type1,Name1)) -->
   59	initialize_empty_var_(Data,[
   60		var_name_(Data,Type1,Name1),
   61		type(Data,Type1)
   62	]).
   63
   64statement_with_semicolon(Data,_,throw(Expr1)) -->
   65	throw_(Data,expr(Data,string,Expr1)).
   66
   67statement_with_semicolon(Data,_,initialize_var(Name,Expr,Type)) -->
   68	initialize_var_(Data,[
   69		var_name_(Data,Type,Name),
   70		expr(Data,Type,Expr),
   71		type(Data,Type)
   72	]).
   73
   74statement_with_semicolon(Data,_,append_to_array(Name,Expr,Type)) -->
   75        append_to_array_(Data,[
   76			var_name_(Data,[array,Type],Name),
   77            expr(Data,Type,Expr)
   78        ]).
   79
   80
   81statement_with_semicolon(Data,_,plus_equals(Name,Expr)) -->
   82		plus_equals_(Data,[
   83			var_name_(Data,int,Name),
   84            expr(Data,int,Expr)
   85		]).
   86        
   87statement_with_semicolon(Data,_,minus_equals(Name,Expr)) -->
   88	minus_equals_(Data,[
   89		var_name_(Data,int,Name),
   90		expr(Data,int,Expr)
   91	]).
   92statement_with_semicolon(Data,_,append_to_string(Name,Expr)) -->
   93	append_to_string_(Data,[
   94		var_name_(Data,string,Name),
   95		expr(Data,string,Expr)
   96	]).
   97
   98statement_with_semicolon(Data,_,times_equals(Name,Expr)) -->
   99	times_equals_(Data,[
  100		var_name_(Data,int,Name),
  101		expr(Data,int,Expr)
  102	]).
  103
  104statement_with_semicolon(Data,_,assert(Expr)) -->
  105        assert_(Data,[expr(Data,bool,Expr)]).
  106
  107%print without newline
  108statement_with_semicolon(Data,_,print(Expr,Type)) -->
  109        print_(Data,[expr(Data,Type,Expr)]).
  110
  111%print with newline
  112statement_with_semicolon(Data,Type,println(Expr)) -->
  113        println_(Data,[
  114			expr(Data,Type,Expr)
  115		]).
  116
  117statement_with_semicolon(Data,_,initialize_vars(Vars,Type)) -->
  118		initialize_vars_(Data,[
  119			initialize_vars_list(Data,Type,Vars),
  120			type(Data,Type)
  121		]).
  122statement_with_semicolon(Data,_,declare_vars(Vars,Type)) -->
  123		declare_vars_(Data,[
  124			vars_list(Data,Type,Vars),
  125			type(Data,Type)
  126		]).
  127
  128%This is for parallel assignment.
  129statement_with_semicolon(Data,_,multiple_assignment(Vars,Exprs,Type)) -->
  130		multiple_assignment_(Data,[
  131			vars_list(Data,Type,Vars),
  132			initializer_list_(Data,Type,Exprs),
  133			type(Data,Type)
  134		])