Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Package bemtevi;
- Helpers
- digito = ['0' .. '9'];
- espaco = ' ';
- tab = 9;
- rc = 13;
- nl = 10;
- maiusculas = ['A'..'Z'];
- minusculas = ['a'..'z'];
- letras = maiusculas | minusculas;
- aspa = 39;
- tudo = [0 .. 0xFFFF];
- tudomenosnl = [tudo-nl];
- tracotraco = '--';
- tudomenosaspas = [tudo-aspa];
- not_eol = [tudo - [rc + nl]];
- not_single = [not_eol - 39];
- not_double = [not_eol - 34];
- under = 95;
- virgula = 44;
- negative = 45;
- exponencial = 'e' | 'E';
- chaveesquerda = '{';
- chavedireita = '}';
- d_tudomenoschave = [tudo - chavedireita];
- e_tudomenoschave = [tudo - chaveesquerda];
- comentario_linhas = tracotraco tudomenosnl*;
- comentario_bloco = chaveesquerda d_tudomenoschave* chavedireita;
- Tokens
- classe = 'molde';
- objeto = 'objeto';
- initmolde = 'contem';
- final = 'fim';
- atribuicaoobjeto = '.';
- heranca = 'se passa por';
- funcao = 'funcao';
- separaparametros = '|';
- principal = '>>';
- comunicao = 'Comunicao';
- pontovirgula = ';';
- doispontos = ':';
- vazio = (espaco | rc | nl | tab)+;
- se = 'se';
- entao = 'entao';
- senao = 'senao';
- sum = '+';
- sub = '-';
- mult = '*';
- div = '/';
- mod = '%';
- define = '=';
- igualigual = '==';
- menorque = '<';
- lte = '<=';
- not = '!';
- and = 'e';
- or = 'ou';
- paresquerdo = '(';
- pardireito = ')';
- colcheteesquerdo = '[';
- colchetedireito = ']';
- constante = 'constante';
- tipobool = 'Bool';
- tipotexto = 'Texto';
- tiponumero = 'Numero';
- numero = ((digito)+ virgula* (digito)* | (digito)+ exponencial negative* (digito));
- stringconteudo = '"' not_double* '"';
- booleano = 'verdade' | 'falso';
- comentario_linhas = tracotraco tudomenosnl*;
- identificador = (minusculas) (letras | under)*;
- identificadorconst = (minusculas) (letras)*;
- identificadormolde = (maiusculas) (minusculas)*;
- comentario = (comentario_linhas | comentario_bloco);
- escreva = 'escreva';
- lertexto = 'leiaTexto';
- lernumero = 'leiaNumero';
- lerbool = 'leiaBool';
- Ignored Tokens
- vazio,
- comentario;
- Productions
- programa = {programa} familia? def_molde+;
- outra_familia = {outra_familia} pontovirgula relacao;
- familia = {familia} relacao outra_familia* atribuicaoobjeto;
- relacao = {relacao} classe [esq]:identificadormolde heranca [dir]:identificadormolde;
- def_molde = {def_molde} classe identificadormolde initmolde atributos metodos final;
- atributo_auxiliar = {decconst} dec_const | {decobj} dec_obj;
- atributos = {atributos} atributo_auxiliar*;
- metodos = {metodos} dec_funcao*;
- dec_funcao = {sem_corpo} funcao doispontos tipo identificador paresquerdo parametros pardireito pontovirgula
- |{com_corpo} funcao doispontos tipo identificador paresquerdo parametros pardireito bloco_expressoes
- |{com_principal} principal funcao doispontos tipo identificador paresquerdo parametros pardireito bloco_expressoes;
- parametros = {com_param} parametro separaparametros_parametro*
- |{sem_param};
- separaparametros_parametro = separaparametros parametro ;
- parametro = {tipo_id} tipo identificador |
- {assinatura} assinatura ;
- assinatura = tipo identificador paresquerdo parametros_assinatura pardireito ;
- parametros_assinatura = {com_param_assinatura} parametro_assinatura separaparametros_parametro_assinatura* |
- {sem_param_assinatura} ;
- separaparametros_parametro_assinatura = separaparametros parametro_assinatura ;
- parametro_assinatura = {tipo} tipo |
- {assinatura} assinatura ;
- obj_funcao = ident_atrib_objt identificador paresquerdo parametros pardireito pontovirgula;
- dec_const = constante doispontos termo identificador pontovirgula;
- dec_const_attribuido = {com_objeto} constante doispontos termo identificador define atributo pontovirgula
- |{com_termo} constante doispontos [esq]:termo identificador define [dir]:termo pontovirgula
- |{com_objeto_attr} constante doispontos termo identificador define obj_funcao;
- dec_obj = objeto doispontos tipo_molde identificador pontovirgula;
- exp =
- {fator} fator
- |{seternario} seternario
- |{bloco} bloco_expressoes;
- fator =
- {termo} termo
- |{soma} fator sum termo
- |{subtracao} fator sub termo
- |{multiplicao} fator mult termo
- |{divisao} fator div termo
- |{ii} fator igualigual termo
- |{mq} fator menorque termo
- |{e} fator and termo
- |{ou} fator or termo;
- termo =
- {type} tipo_base
- |{id} identificador
- |{numero} numero
- |{cadeia} stringconteudo
- |{booleano} booleano
- |{par} paresquerdo exp pardireito;
- seternario = se paresquerdo exp [verdade]: exp senao [falso]:exp;
- tipo_molde = identificadormolde;
- tipo =
- {base} tipo_base
- |{molde} tipo_molde;
- tipo_base =
- {numero} tiponumero
- |{texto} tipotexto
- |{bool} tipobool;
- bloco_expressoes = colcheteesquerdo dec_cons_dec_obj_definicao* exp* colchetedireito;
- dec_cons_dec_obj_definicao =
- {declararconstante} dec_const
- |{dec_obj}dec_obj
- |{definicao} definicao
- |{chamarfuncao} chamada_funcao
- |{dec_const_attribuido} dec_const_attribuido;
- chamada_funcao = {qualquerfuncao} ident_atrib_objt identificador paresquerdo parametros pardireito pontovirgula;
- definicao = {id} identificador define exp pontovirgula
- |{atributo} atributo define exp pontovirgula;
- atributo = ident_atrib_objt identificador atribuicaoobjeto_identificador*;
- ident_atrib_objt = identificador atribuicaoobjeto;
- atribuicaoobjeto_identificador = atribuicaoobjeto identificador;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement