1%The grammar files are saved in grammars.pl
    2
    3statement_with_semicolon(Data,Return_type,return(To_return)) -->
    4	return_(Data,[
    5		expr(Data,Return_type,To_return)
    6	]).
    7	
    8statement_with_semicolon(Data,_,plus_plus(Name)) --> 
    9        plus_plus_(Data,[
   10			var_name_(Data,int,Name)
   11        ]),!.
   12
   13statement_with_semicolon(Data,_,minus_minus(Name)) --> 
   14	minus_minus_(Data,[var_name_(Data,int,Name)]),!.
   15
   16statement_with_semicolon(Data,_,initialize_constant(Type,Name,Expr)) -->
   17	initialize_constant_(Data,[
   18		var_name_(Data,Type,Name),
   19		type(Data,Type),
   20		expr(Data,Type,Expr)
   21	]).
   22
   23
   24statement_with_semicolon(Data,_,set_array_size(Name,Size,Type)) -->
   25	set_array_size_(Data,[
   26		var_name_(Data,Name,[array,Type]),
   27		expr(Data,int,Size),
   28		type(Data,Type)
   29	]).
   30
   31statement_with_semicolon(Data,_,set_dict(Name,Index,Expr,Type)) -->
   32	set_dict_(Data,[
   33		var_name_(Data,[dict,Type],Name),
   34		parentheses_expr(Data,string,Index),
   35		expr(Data,Type,Expr)
   36	]).
   37statement_with_semicolon(Data,_,set_array_index(Name,Index,Expr,Type)) -->
   38	set_array_index_(Data,[
   39		var_name_(Data,[array,Type],Name),
   40		parentheses_expr(Data,int,Index),
   41		parentheses_expr(Data,Type,Expr)
   42	]).
   43
   44
   45statement_with_semicolon(Data,_,set_var(Name,Expr,Type)) -->
   46	set_var_(Data,[
   47		var_name_(Data,Type,Name),
   48		expr(Data,Type,Expr)
   49	]).
   50	
   51statement_with_semicolon(Data,_,set_instance_var(Name,Expr,Type)) -->
   52	set_var_(Data,[
   53		expr(Data,Type,this(Name)),
   54		expr(Data,Type,Expr)
   55	]).	
   56
   57statement_with_semicolon(Data,_,initialize_empty_var(Type,Name)) -->
   58	initialize_empty_var_(Data,[
   59		var_name_(Data,Type,Name),
   60		type(Data,Type)
   61	]).
   62
   63statement_with_semicolon(Data,_,throw(Expr)) -->
   64	throw_(Data,expr(Data,string,Expr)).
   65
   66statement_with_semicolon(Data,_,initialize_var(Name,Expr,Type)) -->
   67	initialize_var_(Data,[
   68		var_name_(Data,Type,Name),
   69		expr(Data,Type,Expr),
   70		type(Data,Type)
   71	]).
   72
   73statement_with_semicolon(Data,_,append_to_array(Name,Expr,Type)) -->
   74        append_to_array_(Data,[
   75			var_name_(Data,[array,Type],Name),
   76            expr(Data,Type,Expr)
   77        ]).
   78
   79statement_with_semicolon(Data,_,reverse_list_in_place(List,Type)) -->
   80	reverse_list_in_place_(Data,[
   81		parentheses_expr(Data,[array,Type],List)
   82	]).
   83
   84
   85statement_with_semicolon(Data,_,plus_equals(Name,Expr)) -->
   86		plus_equals_(Data,[
   87			var_name_(Data,int,Name),
   88            expr(Data,int,Expr)
   89		]).
   90
   91statement_with_semicolon(Data,_,divide_equals(Name,Expr)) -->
   92		divide_equals_(Data,[
   93			var_name_(Data,int,Name),
   94            expr(Data,int,Expr)
   95		]).
   96
   97
   98statement_with_semicolon(Data,_,modulo_equals(Name,Expr)) -->
   99		modulo_equals_(Data,[
  100			var_name_(Data,int,Name),
  101            expr(Data,int,Expr)
  102		]).
  103
  104statement_with_semicolon(Data,_,array_plus_equals(Name,Expr,Type)) -->
  105		array_plus_equals_(Data,[
  106			var_name_(Data,[array,Type],Name),
  107            expr(Data,[array,Type],Expr)
  108		]).
  109
  110statement_with_semicolon(Data,_,string_plus_equals(Name,Expr)) -->
  111		string_plus_equals_(Data,[
  112			var_name_(Data,string,Name),
  113            expr(Data,string,Expr)
  114		]).
  115
  116statement_with_semicolon(Data,_,minus_equals(Name,Expr)) -->
  117	minus_equals_(Data,[
  118		var_name_(Data,int,Name),
  119		expr(Data,int,Expr)
  120	]).
  121statement_with_semicolon(Data,_,append_to_string(Name,Expr)) -->
  122	append_to_string_(Data,[
  123		var_name_(Data,string,Name),
  124		expr(Data,string,Expr)
  125	]).
  126
  127
  128statement_with_semicolon(Data,_,times_equals(Name,Expr)) -->
  129	times_equals_(Data,[
  130		var_name_(Data,int,Name),
  131		expr(Data,int,Expr)
  132	]).
  133
  134statement_with_semicolon(Data,_,assert(Expr)) -->
  135        assert_(Data,[expr(Data,bool,Expr)]).
  136
  137
  138statement_with_semicolon(Data,Type,println(Expr,Type)) -->
  139        println_(Data,[
  140			expr(Data,Type,Expr),
  141			Type
  142		]).
  143
  144statement_with_semicolon(Data,Type, function_call(Name,Params1,Params2)) -->
  145    function_call_(Data,[
  146		function_name(Data,Type,Name,Params2),
  147		function_call_parameters(Data,Params1,Params2)
  148	])