<semicolon> ::= ";"
<dashes> ::= [-_]
<coma> ::= ","
<empty_spc> ::= " "
<new_line> ::= "\n"
<empty_chrs> ::= (<new_line> | <empty_spc>)*
<int> ::= -?[1-9][0-9]*
<bool> ::= "true" | "false"
<char> ::= [a-zA-Z]+
<string> ::= <char> | <dashes> | <int>
<str_comment> ::= "/*"
<end_comment> ::= "*/"
<oneline_comment> ::= "//"
<op_sum> ::= "+"
<op_minus> ::= "-"
<op_multiply> ::= "*"
<op_division> ::= "/"
<op_asignat> ::= "="
<op_comp_equal> ::= "=="
<op_max> ::= ">"
<op_min> ::= "<"
<op_min_equal> ::= "<="
<op_max_equal> ::= ">="
<op_not> ::= "!"
<op_diff> ::= "!="
<comparation_logic> ::= <int> |
<identifier> |
<comparation_logic><op_diff><comparation_logic> |
<comparation_logic><op_comp_equal><comparation_logic> |
<op_not><identifier>
<comparation_int> ::= <int> |
<identifier> |
<comparation_int><op_max><comparation_int>|
<comparation_int><op_min><comparation_int>|
<comparation_int><op_min_equal><comparation_int>|
<comparation_int><op_max_equal><comparation_int>|
<srt_bracket> ::= "{"
<end_bracket> ::= "}"
<str_parenth> ::= ")"
<end_parenth> ::= "("
<continue> ::= "continue"
<break> ::= "break"
<identifier> ::= <char>(<char>|<int>|<dashes>)*
<expr> ::= <expr_simp> | <expr_comp>
<expr_comp> ::= <function_def> |
<if_stmt> |
<else_stmt> |
<elif_stmt> |
<while_stmt> |
<for_stmt> |
<new_line>
<expr_simp> ::= <int> |
<bool> |
<math_op> |
<identifier> |
<asignat> |
<continue> |
<break>
<math_exp> ::= <int> |
<identifier> |
<math_exp> <op_sum> <math_exp> |
<math_exp> <op_minus> <math_exp> |
<math_exp> <op_multiply> <math_exp> |
<math_exp> <op_division> <math_exp>
<asignat> ::= <identifier> <op_asign> <expr>
<if_stmt> ::= "if" <str_parenth> (<bool>|<comparation_int>|<comparation_logic>)+ <end_parenth>
<str_bracket>
(<expr_simp>|<expr_comp>)+
<end_bracket>
(<elif_stmt>|<else_stmt>)*
<else_stmt> ::= "else" <str_bracket> (<expr_simp>|<expr_comp>)+ <end_bracket>
<elif_stmt> ::= "if" <str_parenth> (<bool>|<comparation_int>|<comparation_logic>)+ <end_parenth>
<str_bracket>
(<expr_simp>|<expr_comp>)+
<end_bracket>
(<elif_stmt>)*
(<else_stmt>)*
<while_stmt> ::= "while" <str_parenth> (<bool>|<comparation_int>|<comparation_logic>)+ <end_parenth>
<str_bracket>
(<expr_simp>|<expr_comp>)+
<end_bracket>
<for_stmt> ::= "for"
<str_parenth>
<asignat> <semicolon>
<comparation_int> <semicolon>
<identifier><op_sum><op_sum>
<end_parenth>
<str_bracket>
(<expr_simp>|<expr_comp>)+
<end_bracket>