Untitled
unknown
plain_text
a year ago
7.0 kB
4
Indexable
grammar Latino; program : statement_list EOF; statement_list : statement statement_list | ; statement : ID statement2 | statement_builtin_function | function_definition | if_statement | switch_statement | for_desde_statement | for_para_statement | while_statement | do_while_statement | ROMPER | return; statement2 : increment_op | decrement_op | attribute_access2; switch_statement : ELEGIR exp switch_body optional_defecto FIN; switch_body : CASO caso_value TKN_COLON switch_body3 statement statement_list switch_body2 | defecto; switch_body2 : CASO caso_value TKN_COLON switch_body3 statement statement_list switch_body2 | ; switch_body3 : CASO caso_value TKN_COLON switch_body3 | ; caso_value : TKN_REAL | TKN_STR; defecto : defecto_keyword TKN_COLON statement statement_list; optional_defecto : defecto_keyword TKN_COLON statement statement_list | ; defecto_keyword : DEFECTO | OTRO; for_desde_statement : DESDE TKN_OPENING_PAR ID assignment TKN_SEMICOLON exp TKN_SEMICOLON statement TKN_CLOSING_PAR statement statement_list FIN; for_para_statement : PARA ID EN rango statement statement_list FIN; rango : RANGO TKN_OPENING_PAR rango_params TKN_CLOSING_PAR; rango_params : signed_number rango_params_tail; rango_params_tail : TKN_COMMA signed_number rango_params_tail2 | ; rango_params_tail2 : TKN_COMMA signed_number | ; signed_number : TKN_MINUS TKN_REAL | TKN_REAL; while_statement : MIENTRAS exp statement statement_list FIN; do_while_statement : REPETIR statement statement_list HASTA exp; if_statement : SI exp statement statement_list osi_statements sino_statement FIN; osi_statements : OSI exp statement statement_list osi_statements | ; sino_statement : SINO statement statement_list | ; function_definition : FUN ID TKN_OPENING_PAR function_params TKN_CLOSING_PAR statement statement_list FIN | FUNCION ID TKN_OPENING_PAR function_params TKN_CLOSING_PAR statement statement_list FIN; function_definition_without_id : FUN TKN_OPENING_PAR function_params TKN_CLOSING_PAR statement statement_list FIN | FUNCION TKN_OPENING_PAR function_params TKN_CLOSING_PAR statement statement_list FIN; function_params : ID function_params_tail | ; function_params_tail : TKN_COMMA ID function_params_tail | ; return : return_keyword exp; return_keyword : RETORNAR | RET | RETORNO; call_function : TKN_OPENING_PAR function_args TKN_CLOSING_PAR; function_args : exp function_args2 | ; function_args2 : TKN_COMMA exp function_args2 | ; statement_builtin_function : builtin_function_zero_args TKN_OPENING_PAR TKN_CLOSING_PAR | builtin_function_one_arg TKN_OPENING_PAR exp TKN_CLOSING_PAR | IMPRIMIRF TKN_OPENING_PAR TKN_STR function_args2 TKN_CLOSING_PAR | ACADENA TKN_OPENING_PAR exp TKN_CLOSING_PAR; builtin_function_zero_args : LIMPIAR; builtin_function_one_arg : ESCRIBIR | PONER | IMPRIMIR; builtin_function_in_exp : builtin_function_in_exp_keyword TKN_OPENING_PAR exp TKN_CLOSING_PAR; builtin_function_in_exp_keyword : ACADENA | ALOGICO | ANUMERO | TIPO; increment_op : TKN_INCREMENT; decrement_op : TKN_DECREMENT; assignment : simple_assignment | TKN_COMMA multiple_assignment; simple_assignment : augmented_assignment_op exp | TKN_ASSIGN simple_assignment2; simple_assignment2 : exp_list; augmented_assignment_op : TKN_MOD_ASSIGN | TKN_DIV_ASSIGN | TKN_TIMES_ASSIGN | TKN_MINUS_ASSIGN | TKN_PLUS_ASSIGN; multiple_assignment : id_list TKN_ASSIGN exp_list; id : ID attribute_access; attribute_access : TKN_PERIOD dot_access | bracket_access | ; dot_access : ID attribute_access; bracket_access : TKN_OPENING_BRA bracket_access_value attribute_access; bracket_access_value : exp TKN_CLOSING_BRA; attribute_access2 : TKN_PERIOD dot_access2 | bracket_access2 | call_function | assignment; dot_access2 : ID attribute_access2; bracket_access2 : TKN_OPENING_BRA exp TKN_CLOSING_BRA attribute_access2; id_list : ID id_list1; id_list1 : TKN_COMMA ID id_list1 | ; exp_list : exp exp_list1 | LEER TKN_OPENING_PAR TKN_CLOSING_PAR; exp_list1 : TKN_COMMA exp_list2 | ; exp_list2 : exp exp_list1 | LEER TKN_OPENING_PAR TKN_CLOSING_PAR; exp : exp_bool exp1; exp1 : TKN_OR exp_bool exp1 | ; exp_bool : exp_concat exp_bool1; exp_bool1 : TKN_AND exp_concat exp_bool1 | ; exp_concat : exp_rel exp_concat2; exp_concat2 : TKN_CONCAT exp_rel exp_concat2 | ; exp_rel : exp_sum exp_rel1; exp_rel1 : rel_op exp_sum | ; rel_op : TKN_LESS | TKN_LEQ | TKN_GREATER | TKN_GEQ | TKN_EQUAL | TKN_NEQ | TKN_REGEX; exp_sum : term exp_sum2; exp_sum2 : sum_op term exp_sum2 | ; sum_op : TKN_PLUS | TKN_MINUS; term : exp_pot term2; term2 : mul_op exp_pot term2 | ; mul_op : TKN_DIV | TKN_MOD | TKN_TIMES; exp_pot : factor exp_pot2; exp_pot2 : TKN_POWER factor exp_pot2 | ; factor : TKN_STR | TKN_REAL | VERDADERO | FALSO | NULO | CIERTO | unary_op factor | TKN_OPENING_PAR exp TKN_CLOSING_PAR | builtin_function_in_exp | array | dict | ID factor2; unary_op : TKN_NOT | TKN_MINUS | TKN_PLUS; factor2 : attribute_access factor3; factor3 : call_function | ; array : TKN_OPENING_BRA array_elements TKN_CLOSING_BRA; array_elements : exp array_elements_tail | function_definition_without_id array_elements_tail | ; array_elements_tail : TKN_COMMA array_elements | ; dict : TKN_OPENING_KEY dict_elements TKN_CLOSING_KEY; dict_elements : dict_key TKN_COLON dict_value dict_elements_tail | ; dict_elements_tail : TKN_COMMA dict_elements | ; dict_key : exp; dict_value : exp | function_definition_without_id; TKN_COLON : ':'; TKN_OPENING_PAR : '('; TKN_CLOSING_PAR : ')'; TKN_SEMICOLON : ';'; TKN_COMMA : ','; TKN_MINUS : '-'; TKN_REAL : [0-9]+('.'[0-9]+)?; TKN_STR : '\'' (ESC_SEQ | ~[\\'] | '\\' .)*? '\'' | '"' (ESC_SEQ | ~[\\"] | '\\' .)*? '"'; fragment ESC_SEQ : '\\' [btnfr"'\\] ; TKN_INCREMENT : '++'; TKN_DECREMENT : '--'; TKN_PERIOD : '.'; TKN_OPENING_BRA : '['; TKN_CLOSING_BRA : ']'; TKN_OPENING_KEY : '{'; TKN_CLOSING_KEY : '}'; TKN_ASSIGN : '='; TKN_MOD_ASSIGN : '%='; TKN_DIV_ASSIGN : '/='; TKN_TIMES_ASSIGN : '*='; TKN_MINUS_ASSIGN : '-='; TKN_PLUS_ASSIGN : '+='; TKN_OR : '||'; TKN_AND : '&&'; TKN_CONCAT : '..'; TKN_LESS : '<'; TKN_LEQ : '<='; TKN_GREATER : '>'; TKN_GEQ : '>='; TKN_EQUAL : '=='; TKN_NEQ : '!='; TKN_REGEX : '~='; TKN_PLUS : '+'; TKN_DIV : '/'; TKN_MOD : '%'; TKN_TIMES : '*'; TKN_POWER : '^'; VERDADERO : 'verdadero'; FALSO : 'falso'; NULO : 'nulo'; CIERTO : 'cierto'; TKN_NOT : '!'; IMPRIMIRF : 'imprimirf'; LEER : 'leer'; LIMPIAR : 'limpiar'; ESCRIBIR : 'escribir'; PONER : 'poner'; IMPRIMIR : 'imprimir'; ACADENA : 'acadena'; ALOGICO : 'alogico'; ANUMERO : 'anumero'; TIPO : 'tipo'; ROMPER : 'romper'; ELEGIR : 'elegir'; CASO : 'caso'; DEFECTO : 'defecto'; OTRO : 'otro'; DESDE : 'desde'; PARA : 'para'; EN : 'en'; RANGO : 'rango'; MIENTRAS : 'mientras'; REPETIR : 'repetir'; HASTA : 'hasta'; SI : 'si'; OSI : 'osi'; SINO : 'sino'; FUN : 'fun'; FUNCION : 'funcion'; RETORNAR : 'retornar'; RET : 'ret'; RETORNO : 'retorno'; FIN : 'fin'; ID : [a-zA-Z_][a-zA-Z0-9_]*; WS : [ \t\r\n]+ -> skip ; LINE_COMMENT : '//' ~[\r\n]* -> skip ; LINE_COMMENT_2 : '#' ~[\r\n]* -> skip ; BLOCK_COMMENT : '/*' .*? '*/' -> skip ;
Editor is loading...
Leave a Comment