Advertisement
BenjaminWade

.sable

Sep 17th, 2023
51
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.00 KB | Source Code | 0 0
  1. Package bemtevi;
  2.  
  3. Helpers
  4. digito = ['0' .. '9'];
  5. espaco = ' ';
  6. tab = 9;
  7. rc = 13;
  8. nl = 10;
  9. maiusculas = ['A'..'Z'];
  10. minusculas = ['a'..'z'];
  11. letras = maiusculas | minusculas;
  12. aspa = 39;
  13. tudo = [0 .. 0xFFFF];
  14. tudomenosnl = [tudo-nl];
  15. tracotraco = '--';
  16. tudomenosaspas = [tudo-aspa];
  17. not_eol = [tudo - [rc + nl]];
  18. not_single = [not_eol - 39];
  19. not_double = [not_eol - 34];
  20. under = 95;
  21. virgula = 44;
  22. negative = 45;
  23. exponencial = 'e' | 'E';
  24. chaveesquerda = '{';
  25. chavedireita = '}';
  26. d_tudomenoschave = [tudo - chavedireita];
  27. e_tudomenoschave = [tudo - chaveesquerda];
  28. comentario_linhas = tracotraco tudomenosnl*;
  29. comentario_bloco = chaveesquerda d_tudomenoschave* chavedireita;
  30.  
  31. Tokens
  32. classe = 'molde';
  33. objeto = 'objeto';
  34. initmolde = 'contem';
  35. final = 'fim';
  36. atribuicaoobjeto = '.';
  37. heranca = 'se passa por';
  38. funcao = 'funcao';
  39. separaparametros = '|';
  40. principal = '>>';
  41. comunicao = 'Comunicao';
  42. pontovirgula = ';';
  43. doispontos = ':';
  44. vazio = (espaco | rc | nl | tab)+;
  45. se = 'se';
  46. entao = 'entao';
  47. senao = 'senao';
  48. sum = '+';
  49. sub = '-';
  50. mult = '*';
  51. div = '/';
  52. mod = '%';
  53. define = '=';
  54. igualigual = '==';
  55. menorque = '<';
  56. lte = '<=';
  57. not = '!';
  58. and = 'e';
  59. or = 'ou';
  60. paresquerdo = '(';
  61. pardireito = ')';
  62. colcheteesquerdo = '[';
  63. colchetedireito = ']';
  64. constante = 'constante';
  65. tipobool = 'Bool';
  66. tipotexto = 'Texto';
  67. tiponumero = 'Numero';
  68. numero = ((digito)+ virgula* (digito)* | (digito)+ exponencial negative* (digito));
  69. stringconteudo = '"' not_double* '"';
  70. booleano = 'verdade' | 'falso';
  71. comentario_linhas = tracotraco tudomenosnl*;
  72. identificador = (minusculas) (letras | under)*;
  73. identificadorconst = (minusculas) (letras)*;
  74. identificadormolde = (maiusculas) (minusculas)*;
  75. comentario = (comentario_linhas | comentario_bloco);
  76. escreva = 'escreva';
  77. lertexto = 'leiaTexto';
  78. lernumero = 'leiaNumero';
  79. lerbool = 'leiaBool';
  80.  
  81. Ignored Tokens
  82. vazio,
  83. comentario;
  84.  
  85.  
  86. Productions
  87.  
  88. programa = {programa} familia? def_molde+;
  89.  
  90. outra_familia = {outra_familia} pontovirgula relacao;
  91. familia = {familia} relacao outra_familia* atribuicaoobjeto;
  92.  
  93. relacao = {relacao} classe [esq]:identificadormolde heranca [dir]:identificadormolde;
  94.  
  95.  
  96. def_molde = {def_molde} classe identificadormolde initmolde atributos metodos final;
  97.  
  98. atributo_auxiliar = {decconst} dec_const | {decobj} dec_obj;
  99. atributos = {atributos} atributo_auxiliar*;
  100. metodos = {metodos} dec_funcao*;
  101.  
  102. dec_funcao = {sem_corpo} funcao doispontos tipo identificador paresquerdo parametros pardireito pontovirgula
  103. |{com_corpo} funcao doispontos tipo identificador paresquerdo parametros pardireito bloco_expressoes
  104. |{com_principal} principal funcao doispontos tipo identificador paresquerdo parametros pardireito bloco_expressoes;
  105.  
  106. parametros = {com_param} parametro separaparametros_parametro*
  107. |{sem_param};
  108.  
  109. separaparametros_parametro = separaparametros parametro ;
  110.  
  111. parametro = {tipo_id} tipo identificador |
  112. {assinatura} assinatura ;
  113.  
  114. assinatura = tipo identificador paresquerdo parametros_assinatura pardireito ;
  115.  
  116. parametros_assinatura = {com_param_assinatura} parametro_assinatura separaparametros_parametro_assinatura* |
  117. {sem_param_assinatura} ;
  118.  
  119. separaparametros_parametro_assinatura = separaparametros parametro_assinatura ;
  120.  
  121. parametro_assinatura = {tipo} tipo |
  122. {assinatura} assinatura ;
  123.  
  124. obj_funcao = ident_atrib_objt identificador paresquerdo parametros pardireito pontovirgula;
  125.  
  126. dec_const = constante doispontos termo identificador pontovirgula;
  127.  
  128. dec_const_attribuido = {com_objeto} constante doispontos termo identificador define atributo pontovirgula
  129. |{com_termo} constante doispontos [esq]:termo identificador define [dir]:termo pontovirgula
  130. |{com_objeto_attr} constante doispontos termo identificador define obj_funcao;
  131.  
  132. dec_obj = objeto doispontos tipo_molde identificador pontovirgula;
  133.  
  134. exp =
  135. {fator} fator
  136. |{seternario} seternario
  137. |{bloco} bloco_expressoes;
  138.  
  139. fator =
  140. {termo} termo
  141. |{soma} fator sum termo
  142. |{subtracao} fator sub termo
  143. |{multiplicao} fator mult termo
  144. |{divisao} fator div termo
  145. |{ii} fator igualigual termo
  146. |{mq} fator menorque termo
  147. |{e} fator and termo
  148. |{ou} fator or termo;
  149.  
  150. termo =
  151. {type} tipo_base
  152. |{id} identificador
  153. |{numero} numero
  154. |{cadeia} stringconteudo
  155. |{booleano} booleano
  156. |{par} paresquerdo exp pardireito;
  157.  
  158.  
  159. seternario = se paresquerdo exp [verdade]: exp senao [falso]:exp;
  160.  
  161. tipo_molde = identificadormolde;
  162.  
  163.  
  164. tipo =
  165. {base} tipo_base
  166. |{molde} tipo_molde;
  167.  
  168. tipo_base =
  169. {numero} tiponumero
  170. |{texto} tipotexto
  171. |{bool} tipobool;
  172.  
  173. bloco_expressoes = colcheteesquerdo dec_cons_dec_obj_definicao* exp* colchetedireito;
  174.  
  175. dec_cons_dec_obj_definicao =
  176. {declararconstante} dec_const
  177. |{dec_obj}dec_obj
  178. |{definicao} definicao
  179. |{chamarfuncao} chamada_funcao
  180. |{dec_const_attribuido} dec_const_attribuido;
  181.  
  182. chamada_funcao = {qualquerfuncao} ident_atrib_objt identificador paresquerdo parametros pardireito pontovirgula;
  183.  
  184.  
  185. definicao = {id} identificador define exp pontovirgula
  186. |{atributo} atributo define exp pontovirgula;
  187.  
  188. atributo = ident_atrib_objt identificador atribuicaoobjeto_identificador*;
  189.  
  190. ident_atrib_objt = identificador atribuicaoobjeto;
  191.  
  192. atribuicaoobjeto_identificador = atribuicaoobjeto identificador;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement