Advertisement
BenjaminWade

faltando bloco vazio

Sep 17th, 2023
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.77 KB | Software | 0 0
  1. Package bemtevi;
  2.  
  3. Helpers
  4. digito = ['0' .. '9'];
  5. espaco = ' ';
  6. tab = 9;
  7. rc = 13;
  8. nl = 10;
  9. under = 95;
  10. maiusculas = ['A'..'Z'];
  11. minusculas = ['a'..'z'];
  12. letras = maiusculas | minusculas;
  13. aspa = 39;
  14. aspas_duplas = 34;
  15. tudo = [0 .. 0xFFFF];
  16. tudomenosnl = [tudo-nl];
  17. tracotraco = '--';
  18. tudomenosaspas = [tudo-aspa];
  19. not_eol = [tudo - [rc + nl]];
  20. not_single = [not_eol - 39];
  21. not_double = [not_eol - 34];
  22. hifen = '-';
  23. virgula = 44;
  24. negative = 45;
  25. exponencial = 'e' | 'E';
  26. chaveesquerda = '{';
  27. chavedireita = '}';
  28. d_tudomenoschave = [tudo - chavedireita];
  29. e_tudomenoschave = [tudo - chaveesquerda];
  30. comentario_linhas = tracotraco tudomenosnl*;
  31. comentario_bloco = chaveesquerda d_tudomenoschave* chavedireita;
  32.  
  33. Tokens
  34. classe = 'molde';
  35. objeto = 'objeto';
  36. initmolde = 'contem';
  37. final = 'fim';
  38. chamada = '.';
  39. se = 'se';
  40. passa = 'passa';
  41. por = 'por';
  42. funcao = 'funcao';
  43. tipobool = 'Bool';
  44. separador = '|';
  45. principal = '>>';
  46. pontovirgula = ';';
  47. doispontos = ':';
  48. vazio = (espaco | rc | nl | tab)+;
  49. entao = 'entao';
  50. senao = 'senao';
  51. falso = 'falso';
  52. sum = '+';
  53. sub = '-';
  54. mult = '*';
  55. div = '/';
  56. mod = '%';
  57. define = '=';
  58. igualigual = '==';
  59. menorque = '<';
  60. lte = '<=';
  61. not = '!';
  62. and = 'e';
  63. or = 'ou';
  64. paresquerdo = '(';
  65. pardireito = ')';
  66. colcheteesquerdo = '[';
  67. colchetedireito = ']';
  68. constante = 'constante';
  69. tiponumero = 'Numero';
  70. repeticao = 'recursao';
  71. verdadeiro = 'verdade';
  72. tipotexto = 'Texto';
  73. numero = digito+ ( virgula digito+ | exponencial hifen? digito+ )?;
  74. texto = aspas_duplas [tudo - aspas_duplas]* aspas_duplas;
  75. identificador_molde = maiusculas (minusculas | maiusculas | under)*;
  76. identificador_atributo_funcao = minusculas (minusculas | maiusculas | under | digito)*;
  77. comentario = (comentario_linhas | comentario_bloco);
  78.  
  79.  
  80.  
  81. Ignored Tokens
  82. vazio,
  83. comentario;
  84.  
  85.  
  86. Productions
  87.  
  88.  
  89. start {-> P.start } = {start_programa} programa {-> New start.programa (programa.a_programa ) }
  90. | {start_definicao} definicao {-> New start.definicao (definicao )};
  91.  
  92. expr_mat
  93. {-> P.expr_mat } =
  94.  
  95. {fator} fator
  96. {-> fator.expr_mat } |
  97.  
  98. {sum} expr_mat sum fator
  99. {-> New expr_mat.sum (expr_mat , fator.expr_mat ) } |
  100.  
  101. {menos} expr_mat sub fator
  102. {-> New expr_mat.menos (expr_mat , fator.expr_mat ) }
  103. ;
  104.  
  105. fator
  106. {-> P.expr_mat } =
  107.  
  108. {termo} termo
  109. {-> termo.expr_mat } |
  110.  
  111. {mult} fator mult termo
  112. {-> New expr_mat.mult (fator.expr_mat , termo.expr_mat ) } |
  113.  
  114. {div} fator div termo
  115. {-> New expr_mat.div (fator.expr_mat , termo.expr_mat ) } |
  116.  
  117. {mod} fator mod termo
  118. {-> New expr_mat.mod (fator.expr_mat , termo.expr_mat ) }
  119. ;
  120.  
  121. termo {-> P.expr_mat } =
  122. {numero} numero
  123. {-> New expr_mat.numero (numero ) } |
  124.  
  125. {negativo} sub termo
  126. {-> New expr_mat.negativo (termo.expr_mat ) } |
  127.  
  128. {exp_atributo} atributo
  129. {-> New expr_mat.exp_atributo (atributo ) } |
  130.  
  131. {not} not termo
  132. {-> New expr_mat.not (termo.expr_mat ) } |
  133.  
  134. {exp_id} identificador_atributo_funcao
  135. {-> New expr_mat.exp_id (identificador_atributo_funcao ) } |
  136.  
  137. {exp_chamada} chamada
  138. {-> New expr_mat.exp_chamada (chamada ) } |
  139.  
  140. {par} paresquerdo exp_geral pardireito
  141. {-> New expr_mat.par (exp_geral ) }
  142. ;
  143.  
  144.  
  145. //programa
  146. // {-> P.programa } =
  147.  
  148. //{aprogramaprograma1} P.a_def_molde
  149. // {-> New programa.aprogramaprograma1 ([ a_def_molde.def_molde ] ) } |
  150.  
  151. //{aprogramaprograma2} familia P.a_def_molde
  152. // {-> New programa.aprogramaprograma2 (familia , [ a_def_molde.def_molde ] ) }
  153. //;
  154.  
  155.  
  156. //aux_familia
  157. // {-> P.familia } =
  158.  
  159. //{aux_familia} pontovirgula relacao
  160. // {-> New familia.aux_familia (relacao ) }
  161. //;
  162.  
  163. //familia
  164. // {-> P.familia } =
  165.  
  166. //{afamiliafamilia1} relacao T.chamada
  167. // {-> New familia.afamiliafamilia1 (relacao ) } |
  168.  
  169. //{afamiliafamilia2} relacao P.a_aux_familia
  170. // {-> New familia.afamiliafamilia2 (relacao , [ a_aux_familia.familia ]) }
  171. //;
  172.  
  173. // relacao
  174. // {-> P.relacao } =
  175.  
  176. //{relacao} classe [first]: identificador_molde se passa por [second]: identificador_molde
  177. // {-> New relacao.relacao (first , second ) }
  178. // ;
  179. programa {-> a_programa} = {programa} familia? def_molde+ {->New a_programa.ar_programa(familia.a_familia, [def_molde.def_molde])};
  180.  
  181. aux_familia {-> a_familia} = {aux_familia} pontovirgula relacao {-> New a_familia.aux_familia(relacao.a_relacao)};
  182. familia {-> a_familia} = {familia} relacao aux_familia* T.chamada {->New a_familia.ar_familia(relacao.a_relacao, [aux_familia.a_familia])};
  183.  
  184. relacao {-> a_relacao} = {relacao} classe [first]:identificador_molde se passa por [second]:identificador_molde {-> New a_relacao.b_relacao(first, second)};
  185.  
  186. def_molde
  187. {-> P.def_molde } =
  188.  
  189. {def_molde} classe identificador_molde initmolde atributos metodos final
  190. {-> New def_molde.def_molde (identificador_molde , atributos , metodos ) }
  191. ;
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204. aux_atributos
  205. {-> P.aux_atributos } =
  206.  
  207. {dec_cons} dec_cons
  208. {-> New aux_atributos.dec_cons (dec_cons ) } |
  209.  
  210. {dec_obj} dec_obj
  211. {-> New aux_atributos.dec_obj (dec_obj ) }
  212. ;
  213.  
  214. atributos
  215. {-> P.atributos } =
  216.  
  217. {aatributosatributos1}
  218. {-> New atributos.atributos ([ ] ) } |
  219.  
  220. {aatributosatributos2} P.a_aux_atributos
  221. {-> New atributos.atributos ([ a_aux_atributos.aux_atributos ] ) }
  222. ;
  223.  
  224. dec_cons
  225. {-> P.dec_cons } =
  226.  
  227. {def_cons} constante doispontos tipo_primitivo identificador_atributo_funcao pontovirgula
  228. {-> New dec_cons.def_cons (tipo_primitivo , identificador_atributo_funcao) } |
  229.  
  230. {ini_cons} constante doispontos tipo_primitivo definicao
  231. {-> New dec_cons.ini_cons (tipo_primitivo , definicao ) }
  232. ;
  233.  
  234. dec_obj
  235. {-> P.dec_obj } =
  236.  
  237. {def_obj} objeto doispontos tipo_molde identificador_atributo_funcao pontovirgula
  238. {-> New dec_obj.def_obj (tipo_molde , identificador_atributo_funcao ) } |
  239.  
  240. {ini_obj} objeto doispontos tipo_molde definicao
  241. {-> New dec_obj.ini_obj (tipo_molde , definicao ) }
  242. ;
  243.  
  244. tipo_primitivo
  245. {-> P.tipo_primitivo } =
  246.  
  247. {tipobool} tipobool
  248. {-> New tipo_primitivo.tipobool (tipobool ) } |
  249.  
  250. {tiponumero} tiponumero
  251. {-> New tipo_primitivo.tiponumero (tiponumero ) } |
  252.  
  253. {tipotexto} tipotexto
  254. {-> New tipo_primitivo.tipotexto (tipotexto ) }
  255. ;
  256.  
  257. tipo_molde
  258. {-> P.tipo_molde } =
  259.  
  260. {tipo_molde} identificador_molde
  261. {-> New tipo_molde.tipo_molde (identificador_molde ) }
  262. ;
  263.  
  264. tipo
  265. {-> P.tipo } =
  266.  
  267. {tipo_molde} tipo_molde
  268. {-> New tipo.tipo_molde (tipo_molde ) } |
  269.  
  270. {tipo_primitivo} tipo_primitivo
  271. {-> New tipo.tipo_primitivo (tipo_primitivo ) }
  272. ;
  273.  
  274. metodos
  275. {-> P.metodos } =
  276.  
  277. {ametodosmetodos1}
  278. {-> New metodos.metodos ([ ] ) } |
  279.  
  280. {ametodosmetodos2} P.a_dec_funcao
  281. {-> New metodos.metodos ([ a_dec_funcao.dec_funcao ] ) }
  282. ;
  283.  
  284. dec_funcao
  285. {-> P.dec_funcao } =
  286.  
  287. {adeffuncaoinidecfuncao1} funcao doispontos tipo identificador_atributo_funcao paresquerdo pardireito bloco
  288. {-> New dec_funcao.adeffuncaoinidecfuncao1 (tipo , identificador_atributo_funcao , bloco ) } |
  289.  
  290. {adeffuncaoinidecfuncao2} principal funcao doispontos tipo identificador_atributo_funcao paresquerdo pardireito bloco
  291. {-> New dec_funcao.adeffuncaoinidecfuncao2 (tipo , identificador_atributo_funcao , bloco ) } |
  292.  
  293. {adeffuncaoinidecfuncao3} funcao doispontos tipo identificador_atributo_funcao paresquerdo parametros pardireito bloco
  294. {-> New dec_funcao.adeffuncaoinidecfuncao3 (tipo , identificador_atributo_funcao , parametros, bloco ) } |
  295.  
  296. {adeffuncaoinidecfuncao4} principal funcao doispontos tipo identificador_atributo_funcao paresquerdo parametros pardireito bloco
  297. {-> New dec_funcao.adeffuncaoinidecfuncao4 (tipo , identificador_atributo_funcao , parametros , bloco ) } |
  298.  
  299. {adeffuncaodecfuncao1} funcao doispontos tipo identificador_atributo_funcao paresquerdo pardireito pontovirgula
  300. {-> New dec_funcao.adeffuncaodecfuncao1 (tipo , identificador_atributo_funcao ) } |
  301.  
  302. {adeffuncaodecfuncao2} principal funcao doispontos tipo identificador_atributo_funcao paresquerdo pardireito pontovirgula
  303. {-> New dec_funcao.adeffuncaodecfuncao2 (tipo , identificador_atributo_funcao) } |
  304.  
  305. {adeffuncaodecfuncao3} funcao doispontos tipo identificador_atributo_funcao paresquerdo parametros pardireito pontovirgula
  306. {-> New dec_funcao.adeffuncaodecfuncao3 ( tipo , identificador_atributo_funcao , parametros ) } |
  307.  
  308. {adeffuncaodecfuncao4} principal funcao doispontos tipo identificador_atributo_funcao paresquerdo parametros pardireito pontovirgula
  309. {-> New dec_funcao.adeffuncaodecfuncao4 (tipo , identificador_atributo_funcao , parametros ) }
  310. ;
  311.  
  312. aux_parametros
  313. {-> P.aux_parametros } =
  314.  
  315. {aux_parametros} separador parametro
  316. {-> New aux_parametros.aux_parametros (separador , parametro )};
  317.  
  318. parametros
  319. {-> P.parametros } =
  320.  
  321. {aparametrosparametros1} parametro
  322. {-> New parametros.parametros (parametro , [ ] ) } |
  323.  
  324. {aparametrosparametros2} parametro P.a_aux_parametros
  325. {-> New parametros.parametros (parametro , [ a_aux_parametros.aux_parametros ] ) }
  326. ;
  327.  
  328. parametro
  329. {-> P.parametro } =
  330.  
  331. {parametro_id} tipo identificador_atributo_funcao
  332. {-> New parametro.parametro_id (tipo , identificador_atributo_funcao ) } |
  333.  
  334. {parametro_ass} assinatura
  335. {-> New parametro.parametro_ass (assinatura ) }
  336. ;
  337.  
  338. assinatura
  339. {-> P.assinatura } =
  340.  
  341. {aassinaturaassinatura1} tipo identificador_atributo_funcao paresquerdo pardireito
  342. {-> New assinatura.aassinaturaassinatura1 (tipo , identificador_atributo_funcao ) } |
  343.  
  344. {aassinaturaassinatura2} tipo identificador_atributo_funcao paresquerdo parametros_assinatura pardireito
  345. {-> New assinatura.aassinaturaassinatura2 (tipo , identificador_atributo_funcao , parametros_assinatura ) }
  346. ;
  347.  
  348. aux_parametros_assinatura
  349. {-> P.aux_parametros_assinatura } =
  350.  
  351. {aux_parametros_assinatura} separador parametro_assinatura
  352. {-> New aux_parametros_assinatura.aux_parametros_assinatura (separador , parametro_assinatura ) }
  353. ;
  354.  
  355. parametros_assinatura
  356. {-> P.parametros_assinatura } =
  357.  
  358. {aparamsassinaturaparametrosassinatura1} parametro_assinatura
  359. {-> New parametros_assinatura.params_assinatura (parametro_assinatura , [ ] ) } |
  360.  
  361. {aparamsassinaturaparametrosassinatura2} parametro_assinatura P.a_aux_parametros_assinatura
  362. {-> New parametros_assinatura.params_assinatura (parametro_assinatura , [ a_aux_parametros_assinatura.aux_parametros_assinatura ] ) }
  363. ;
  364.  
  365. parametro_assinatura
  366. {-> P.parametro_assinatura } =
  367.  
  368. {param_tipo} tipo
  369. {-> New parametro_assinatura.param_tipo (tipo ) } |
  370.  
  371. {param_assinatura} assinatura
  372. {-> New parametro_assinatura.param_assinatura (assinatura ) }
  373. ;
  374.  
  375. aux_bloco
  376. {-> P.aux_bloco } =
  377.  
  378. {aux_bloco_cons} dec_cons
  379. {-> New aux_bloco.aux_bloco_cons (dec_cons ) } |
  380.  
  381. {aux_bloco_obj} dec_obj
  382. {-> New aux_bloco.aux_bloco_obj (dec_obj ) } |
  383.  
  384. {aux_bloco_def} definicao
  385. {-> New aux_bloco.aux_bloco_def (definicao ) }
  386. ;
  387.  
  388. bloco
  389. {-> P.bloco } =
  390.  
  391. {ablocobloco1} colcheteesquerdo exp_geral colchetedireito
  392. {-> New bloco.ablocobloco1 (exp_geral) } |
  393.  
  394. {ablocobloco2} colcheteesquerdo P.a_aux_bloco exp_geral colchetedireito
  395. {-> New bloco.ablocobloco2 ([ a_aux_bloco.aux_bloco ], exp_geral) }
  396. ;
  397.  
  398.  
  399.  
  400.  
  401.  
  402.  
  403.  
  404.  
  405.  
  406.  
  407.  
  408.  
  409. aux_definicao
  410. {-> P.aux_definicao } =
  411. {aux_definicao} identificador_atributo_funcao
  412. {-> New aux_definicao.aux_definicao (identificador_atributo_funcao ) } |
  413.  
  414. atributo
  415. {-> New aux_definicao (atributo ) }
  416. ;
  417.  
  418. definicao
  419. {-> P.definicao } =
  420.  
  421. {definicao} aux_definicao define exp_geral pontovirgula
  422. {-> New definicao.definicao (aux_definicao , exp_geral ) }
  423. ;
  424.  
  425. aux_atributo
  426. {-> P.aux_atributo } =
  427.  
  428. {aux_atributo} T.chamada identificador_atributo_funcao
  429. {-> New aux_atributo.aux_atributo (identificador_atributo_funcao ) }
  430. ;
  431.  
  432. atributo
  433. {-> P.atributo } =
  434.  
  435. {atributo} identificador_atributo_funcao P.a_aux_atributo
  436. {-> New atributo.atributo (identificador_atributo_funcao , [ a_aux_atributo.aux_atributo ] ) }
  437. ;
  438.  
  439. exp_geral {-> P.exp_geral } = {exp_condicional} se paresquerdo exp_geral pardireito entao [first]:exp_geral_op_logico senao [second]: exp_geral_op_logico {-> New exp_geral.n_definicao (exp_geral , first.exp_geral , second.exp_geral )}
  440. | {op_logico4} op_logico4 {-> op_logico4.exp_geral };
  441.  
  442. op_logico4 {-> P.exp_geral } = {op_logico3} op_logico3 {-> op_logico3.exp_geral }
  443. | {op_logico_ou} exp_geral or exp_geral_op_logico {-> New exp_geral.ou_op_logico_ou (exp_geral , exp_geral_op_logico.exp_geral ) }
  444. ;
  445.  
  446. op_logico3 {-> P.exp_geral } = {op_logico2} op_logico2 {-> op_logico2.exp_geral }
  447. | {op_logico_e} exp_geral and exp_geral_op_logico {-> New exp_geral.e_op_logico_e (exp_geral , exp_geral_op_logico.exp_geral ) }
  448. ;
  449.  
  450. op_logico2 {-> P.exp_geral } = {op_logico1} op_logico1 {-> op_logico1.exp_geral }
  451. | {igualigual} exp_geral igualigual exp_geral_op_logico
  452. {-> New exp_geral.n_igualigual (exp_geral , exp_geral_op_logico.exp_geral ) }
  453. ;
  454.  
  455. op_logico1 {-> P.exp_geral } = {exp_geral_op_logico} exp_geral_op_logico {-> exp_geral_op_logico.exp_geral }
  456. | {menor_que} exp_geral menorque exp_geral_op_logico {-> New exp_geral.n_menor_que (exp_geral , exp_geral_op_logico.exp_geral ) }
  457. | {lte} exp_geral lte exp_geral_op_logico {-> New exp_geral.n_lte (exp_geral , exp_geral_op_logico.exp_geral ) }
  458. ;
  459.  
  460. exp_geral_op_logico {-> P.exp_geral } = {exp_bloco} bloco {-> New exp_geral.exp_bloco (bloco ) } |
  461.  
  462. {terminal} terminais {-> terminais.exp_geral }
  463. ;
  464.  
  465. terminais
  466. {-> P.exp_geral } =
  467.  
  468. {exp_matematica} expr_mat {-> New exp_geral.exp_matematica (expr_mat ) } |
  469.  
  470. {valor_texto} texto
  471. {-> New exp_geral.valor_texto (texto ) } |
  472.  
  473. {bool_verdade} verdadeiro
  474. {-> New exp_geral.bool_verdade (verdadeiro ) } |
  475.  
  476. {bool_falso} falso
  477. {-> New exp_geral.bool_falso (falso ) } |
  478.  
  479. {exp_instancia} instancia
  480. {-> New exp_geral.exp_instancia (instancia ) }
  481. ;
  482.  
  483. instancia
  484. {-> P.instancia } =
  485.  
  486. {ainstanciainstancia} identificador_molde colcheteesquerdo lista_inicializacao colchetedireito
  487. {-> New instancia.instancia (identificador_molde , lista_inicializacao ) }
  488. ;
  489.  
  490. aux_lista_inicializacao
  491. {-> P.aux_lista_inicializacao } =
  492.  
  493. {aauxlistainicializacaoauxlistainicializacao1} separador
  494. {-> New aux_lista_inicializacao.aux_lista_inicializacao (separador , [ ] ) } |
  495.  
  496. {aauxlistainicializacaoauxlistainicializacao2} separador P.a_inicializacao_objeto
  497. {-> New aux_lista_inicializacao.aux_lista_inicializacao (separador , [ a_inicializacao_objeto.inicializacao_objeto ] ) }
  498. ;
  499.  
  500. lista_inicializacao
  501. {-> P.lista_inicializacao } =
  502.  
  503. {alistainilistainicializacao1} inicializacao_objeto
  504. {-> New lista_inicializacao.lista_inicializacao (inicializacao_objeto , [ ] ) } |
  505.  
  506. {alistainilistainicializacao2} inicializacao_objeto P.a_aux_lista_inicializacao
  507. {-> New lista_inicializacao.lista_inicializacao (inicializacao_objeto , [ a_aux_lista_inicializacao.aux_lista_inicializacao ] ) }
  508. ;
  509.  
  510. aux_inicializacao_objeto
  511. {-> P.aux_inicializacao_objeto } =
  512.  
  513. {aux_inicializacao_objeto} T.chamada identificador_atributo_funcao
  514. {-> New aux_inicializacao_objeto.aux_inicializacao_objeto (identificador_atributo_funcao ) }
  515. ;
  516.  
  517. inicializacao_objeto
  518. {-> P.inicializacao_objeto } =
  519.  
  520. {ainiobjetoinicializacaoobjeto1} objeto T.chamada identificador_atributo_funcao define exp_geral
  521. {-> New inicializacao_objeto.ini_objeto (identificador_atributo_funcao , [ ], exp_geral ) } |
  522.  
  523. {ainiobjetoinicializacaoobjeto2} objeto T.chamada identificador_atributo_funcao P.a_aux_inicializacao_objeto define exp_geral
  524. {-> New inicializacao_objeto.ini_objeto (identificador_atributo_funcao , [ a_aux_inicializacao_objeto.aux_inicializacao_objeto ], exp_geral ) }
  525. ;
  526.  
  527. chamada_p
  528. {-> P.chamada_p } =
  529.  
  530. {achamadachamadap1} identificador_atributo_funcao paresquerdo pardireito
  531. {-> New chamada_p.achamadachamadap1 (identificador_atributo_funcao ) } |
  532.  
  533. {achamadachamadap2} identificador_atributo_funcao P.a_aux_atributo paresquerdo pardireito
  534. {-> New chamada_p.achamadachamadap2 (identificador_atributo_funcao , [ a_aux_atributo.aux_atributo ] ) } |
  535.  
  536. {achamadachamadap3} identificador_atributo_funcao paresquerdo lista_exp_geral pardireito
  537. {-> New chamada_p.achamadachamadap3 (identificador_atributo_funcao , lista_exp_geral ) } |
  538.  
  539. {achamadachamadap4} identificador_atributo_funcao P.a_aux_atributo paresquerdo lista_exp_geral pardireito
  540. {-> New chamada_p.achamadachamadap4 (identificador_atributo_funcao , [ a_aux_atributo.aux_atributo ] , lista_exp_geral ) }
  541. ;
  542.  
  543. aux_lista_exp_geral
  544. {-> P.aux_lista_exp_geral } =
  545.  
  546. {aux_lista_exp_geral} separador exp_geral
  547. {-> New aux_lista_exp_geral.aux_lista_exp_geral ( exp_geral ) }
  548. ;
  549.  
  550. lista_exp_geral
  551. {-> P.lista_exp_geral } =
  552.  
  553. // {alistaexplistaexpgeral1} exp_geral
  554. // {-> New lista_exp_geral.lista_exp (exp_geral ) } |
  555.  
  556. {alistaexplistaexpgeral2} exp_geral P.a_aux_lista_exp_geral
  557. {-> New lista_exp_geral.lista_exp (exp_geral , [ a_aux_lista_exp_geral.aux_lista_exp_geral ] ) }
  558. ;
  559.  
  560. a_def_molde
  561. {-> P.def_molde* } =
  562.  
  563. {terminal} P.def_molde
  564. {-> [ P.def_molde.def_molde ] } |
  565.  
  566. {non_terminal} P.a_def_molde P.def_molde
  567. {-> [ a_def_molde.def_molde, P.def_molde.def_molde ] }
  568. ;
  569.  
  570.  
  571. a_aux_familia
  572. {-> a_familia* } =
  573.  
  574. {terminal} P.aux_familia
  575. {-> [ P.aux_familia.a_familia ] } |
  576.  
  577. {non_terminal} P.a_aux_familia P.aux_familia
  578. {-> [ a_aux_familia.a_familia, P.aux_familia.a_familia ] }
  579. ;
  580.  
  581. a_aux_atributos
  582. {-> P.aux_atributos* } =
  583.  
  584. {terminal} P.aux_atributos
  585. {-> [ P.aux_atributos.aux_atributos ] } |
  586.  
  587. {non_terminal} P.a_aux_atributos P.aux_atributos
  588. {-> [ a_aux_atributos.aux_atributos, P.aux_atributos.aux_atributos ] }
  589. ;
  590.  
  591.  
  592. a_dec_funcao
  593. {-> P.dec_funcao* } =
  594.  
  595. {terminal} P.dec_funcao
  596. {-> [ P.dec_funcao.dec_funcao ] } |
  597.  
  598. {non_terminal} P.a_dec_funcao P.dec_funcao
  599. {-> [ a_dec_funcao.dec_funcao, P.dec_funcao.dec_funcao ] }
  600. ;
  601.  
  602. a_aux_parametros
  603. {-> P.aux_parametros* } =
  604.  
  605. {terminal} P.aux_parametros
  606. {-> [ P.aux_parametros.aux_parametros ] } |
  607.  
  608. {non_terminal} P.a_aux_parametros P.aux_parametros
  609. {-> [ a_aux_parametros.aux_parametros, P.aux_parametros.aux_parametros ] }
  610. ;
  611.  
  612. a_aux_parametros_assinatura
  613. {-> P.aux_parametros_assinatura* } =
  614.  
  615. {terminal} P.aux_parametros_assinatura
  616. {-> [ P.aux_parametros_assinatura.aux_parametros_assinatura ] } |
  617.  
  618. {non_terminal} P.a_aux_parametros_assinatura P.aux_parametros_assinatura
  619. {-> [ a_aux_parametros_assinatura.aux_parametros_assinatura, P.aux_parametros_assinatura.aux_parametros_assinatura ] }
  620. ;
  621.  
  622. a_aux_bloco
  623. {-> P.aux_bloco* } =
  624.  
  625. {terminal} P.aux_bloco
  626. {-> [ P.aux_bloco.aux_bloco ] } |
  627.  
  628. {non_terminal} P.a_aux_bloco P.aux_bloco
  629. {-> [ a_aux_bloco.aux_bloco, P.aux_bloco.aux_bloco ] }
  630. ;
  631.  
  632. a_aux_atributo
  633. {-> P.aux_atributo* } =
  634.  
  635. {terminal} P.aux_atributo
  636. {-> [ P.aux_atributo.aux_atributo ] } |
  637.  
  638. {non_terminal} P.a_aux_atributo P.aux_atributo
  639. {-> [ a_aux_atributo.aux_atributo, P.aux_atributo.aux_atributo ] }
  640. ;
  641.  
  642. a_inicializacao_objeto
  643. {-> P.inicializacao_objeto* } =
  644.  
  645. {terminal} P.inicializacao_objeto
  646. {-> [ P.inicializacao_objeto.inicializacao_objeto ] } |
  647.  
  648. {non_terminal} P.a_inicializacao_objeto P.inicializacao_objeto
  649. {-> [ a_inicializacao_objeto.inicializacao_objeto, P.inicializacao_objeto.inicializacao_objeto ] }
  650. ;
  651.  
  652. a_aux_lista_inicializacao
  653. {-> P.aux_lista_inicializacao* } =
  654.  
  655. {terminal} P.aux_lista_inicializacao
  656. {-> [ P.aux_lista_inicializacao.aux_lista_inicializacao ] } |
  657.  
  658. {non_terminal} P.a_aux_lista_inicializacao P.aux_lista_inicializacao
  659. {-> [ a_aux_lista_inicializacao.aux_lista_inicializacao, P.aux_lista_inicializacao.aux_lista_inicializacao ] }
  660. ;
  661.  
  662.  
  663.  
  664. a_aux_inicializacao_objeto
  665. {-> P.aux_inicializacao_objeto* } =
  666.  
  667. {terminal} P.aux_inicializacao_objeto
  668. {-> [ P.aux_inicializacao_objeto.aux_inicializacao_objeto ] } |
  669.  
  670. {non_terminal} P.a_aux_inicializacao_objeto P.aux_inicializacao_objeto
  671. {-> [ a_aux_inicializacao_objeto.aux_inicializacao_objeto, P.aux_inicializacao_objeto.aux_inicializacao_objeto ] }
  672. ;
  673.  
  674. a_aux_lista_exp_geral
  675. {-> P.aux_lista_exp_geral* } =
  676.  
  677. {terminal} P.aux_lista_exp_geral
  678. {-> [ P.aux_lista_exp_geral.aux_lista_exp_geral ] } |
  679.  
  680. {non_terminal} P.a_aux_lista_exp_geral P.aux_lista_exp_geral
  681. {-> [ a_aux_lista_exp_geral.aux_lista_exp_geral, P.aux_lista_exp_geral.aux_lista_exp_geral ] }
  682. ;
  683.  
  684. Abstract Syntax Tree
  685.  
  686.  
  687.  
  688. start = {programa} a_programa
  689. | {definicao} definicao;
  690.  
  691. expr_mat = {sum} [esq]:expr_mat [dir]:expr_mat
  692. |{menos} [esq]:expr_mat [dir]:expr_mat
  693. |{mult} [esq]:expr_mat [dir]:expr_mat
  694. |{div} [esq]:expr_mat [dir]:expr_mat
  695. |{mod} [esq]:expr_mat [dir]:expr_mat
  696. |{exp_atributo} atributo
  697. |{exp_chamada} chamada
  698. |{numero} numero
  699. |{negativo} expr_mat
  700. |{not} expr_mat
  701. |{exp_id} identificador_atributo_funcao
  702. |{par} exp_geral;
  703.  
  704.  
  705.  
  706. //programa = {aprogramaprograma1} def_molde+
  707. // | {aprogramaprograma2} familia? def_molde+;
  708.  
  709.  
  710.  
  711. //familia = {aux_familia} relacao
  712. //|{afamiliafamilia1} relacao
  713. // |{afamiliafamilia2} relacao familia*;
  714.  
  715. //relacao =
  716. //{relacao} [first]: identificador_molde [second]: identificador_molde
  717. //;
  718.  
  719. a_programa = {ar_programa} a_familia? def_molde+;
  720.  
  721. a_familia = {aux_familia} a_relacao
  722. | {ar_familia} a_relacao a_familia*;
  723.  
  724. a_relacao = {b_relacao} [first]:identificador_molde [second]:identificador_molde;
  725.  
  726.  
  727.  
  728. def_molde =
  729. {def_molde} identificador_molde atributos metodos
  730. ;
  731.  
  732. aux_atributos =
  733. {dec_cons} dec_cons |
  734. {dec_obj} dec_obj
  735. ;
  736.  
  737. atributos =
  738. {atributos} aux_atributos*
  739. ;
  740.  
  741. dec_cons =
  742. {def_cons} tipo_primitivo identificador_atributo_funcao |
  743. {ini_cons} tipo_primitivo definicao
  744. ;
  745.  
  746. dec_obj =
  747. {def_obj} tipo_molde identificador_atributo_funcao |
  748. {ini_obj} tipo_molde definicao
  749. ;
  750.  
  751. tipo_primitivo =
  752. {tipobool} tipobool |
  753. {tiponumero} tiponumero |
  754. {tipotexto} tipotexto
  755. ;
  756.  
  757. tipo_molde =
  758. {tipo_molde} identificador_molde
  759. ;
  760.  
  761. tipo =
  762. {tipo_molde} tipo_molde |
  763. {tipo_primitivo} tipo_primitivo
  764. ;
  765.  
  766. metodos =
  767. {metodos} dec_funcao*
  768. ;
  769.  
  770. dec_funcao =
  771. {adeffuncaoinidecfuncao1} tipo identificador_atributo_funcao bloco |
  772. {adeffuncaoinidecfuncao2} tipo identificador_atributo_funcao bloco |
  773. {adeffuncaoinidecfuncao3} tipo identificador_atributo_funcao parametros? bloco |
  774. {adeffuncaoinidecfuncao4} tipo identificador_atributo_funcao parametros? bloco |
  775. {adeffuncaodecfuncao1} tipo identificador_atributo_funcao |
  776. {adeffuncaodecfuncao2} tipo identificador_atributo_funcao |
  777. {adeffuncaodecfuncao3} tipo identificador_atributo_funcao parametros? |
  778. {adeffuncaodecfuncao4} tipo identificador_atributo_funcao parametros? |
  779. {def_funcao} tipo identificador_atributo_funcao parametros?
  780. ;
  781.  
  782.  
  783.  
  784. aux_parametros =
  785. {aux_parametros} separador parametro
  786. ;
  787.  
  788. parametros =
  789. {parametros} parametro aux_parametros*
  790. ;
  791.  
  792. parametro =
  793. {parametro_id} tipo identificador_atributo_funcao |
  794. {parametro_ass} assinatura
  795. ;
  796.  
  797. assinatura =
  798. {aassinaturaassinatura1} tipo identificador_atributo_funcao |
  799. {aassinaturaassinatura2} tipo identificador_atributo_funcao parametros_assinatura?
  800.  
  801. ;
  802.  
  803. aux_parametros_assinatura =
  804. {aux_parametros_assinatura} separador parametro_assinatura
  805. ;
  806.  
  807. parametros_assinatura =
  808. {params_assinatura} parametro_assinatura aux_parametros_assinatura*
  809. ;
  810.  
  811. parametro_assinatura =
  812. {param_tipo} tipo |
  813. {param_assinatura} assinatura
  814. ;
  815.  
  816. aux_bloco =
  817. {aux_bloco_cons} dec_cons |
  818. {aux_bloco_obj} dec_obj |
  819. {aux_bloco_def} definicao
  820. ;
  821.  
  822. bloco =
  823. {ablocobloco1} exp_geral |
  824. {ablocobloco2} aux_bloco* exp_geral
  825. ;
  826.  
  827.  
  828. aux_definicao =
  829. {aux_definicao} identificador_atributo_funcao |
  830. atributo
  831. ;
  832.  
  833. definicao =
  834. {definicao} aux_definicao exp_geral
  835. ;
  836.  
  837. aux_atributo =
  838. {aux_atributo} identificador_atributo_funcao
  839. ;
  840.  
  841. atributo =
  842. {atributo} identificador_atributo_funcao aux_atributo+
  843. ;
  844.  
  845. exp_geral =
  846. {n_definicao} [third]:exp_geral [first]:exp_geral [second]:exp_geral
  847. |{ou_op_logico_ou} [first]:exp_geral [second]: exp_geral
  848. |{e_op_logico_e} [first]:exp_geral [second]: exp_geral
  849. | {n_igualigual} [first]:exp_geral [second]: exp_geral
  850. | {n_menor_que} [first]:exp_geral [second]: exp_geral
  851. | {n_lte} [first]:exp_geral [second]: exp_geral
  852. | {exp_bloco} bloco
  853. | {exp_instancia} instancia
  854. | {exp_matematica} expr_mat
  855. | {valor_texto} texto
  856. | {bool_verdade} verdadeiro
  857. | {bool_falso} falso
  858. ;
  859.  
  860.  
  861. terminais =
  862. {exp_matematica} expr_mat |
  863. {valor_texto} texto |
  864. {bool_verdade} verdadeiro |
  865. {bool_falso} falso |
  866. {exp_instancia} instancia
  867. ;
  868.  
  869. instancia =
  870. {instancia} identificador_molde lista_inicializacao?
  871. ;
  872.  
  873. // aux_lista_inicializacao = {aux_lista_inicializacao} separador inicializacao_objeto* ;
  874. //;
  875. lista_inicializacao = {lista_inicializacao} inicializacao_objeto aux_lista_inicializacao* ;
  876. // ;
  877. // aux_lista_inicializacao = {aux_lista_inicializacao} separador lista_inicializacao;
  878. aux_lista_inicializacao = {aux_lista_inicializacao} separador inicializacao_objeto*;
  879.  
  880.  
  881.  
  882. aux_inicializacao_objeto =
  883. {aux_inicializacao_objeto} identificador_atributo_funcao
  884. ;
  885.  
  886. inicializacao_objeto =
  887. {ini_objeto} identificador_atributo_funcao aux_inicializacao_objeto* exp_geral
  888. ;
  889.  
  890. //chamada_p =
  891. // {chamada} identificador_atributo_funcao aux_atributo* lista_exp_geral?
  892. // ;
  893.  
  894. chamada_p = {achamadachamadap1} identificador_atributo_funcao
  895. | {achamadachamadap2} identificador_atributo_funcao aux_atributo*
  896. | {achamadachamadap3} identificador_atributo_funcao lista_exp_geral?
  897. | {achamadachamadap4} identificador_atributo_funcao aux_atributo* lista_exp_geral?
  898. ;
  899. aux_lista_exp_geral =
  900. {aux_lista_exp_geral} exp_geral
  901. ;
  902.  
  903. lista_exp_geral =
  904. {lista_exp} exp_geral aux_lista_exp_geral*
  905. ;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement