Advertisement
Guest User

Untitled

a guest
Apr 1st, 2015
180
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.88 KB | None | 0 0
  1. /*
  2. Coloque aqui o identificador do grupo e dos seus membros
  3. */
  4. %{
  5. #include <stdio.h>
  6. #include "cc_dict.h"
  7.  
  8. %}
  9.  
  10. %union
  11. {
  12. struct comp_dict_item_t *valor_simbolo_lexico;
  13. }
  14.  
  15.  
  16.  
  17. /* Declaração dos tokens da linguagem */
  18. %token TK_PR_INT
  19. %token TK_PR_FLOAT
  20. %token TK_PR_BOOL
  21. %token TK_PR_CHAR
  22. %token TK_PR_STRING
  23. %token TK_PR_IF
  24. %token TK_PR_THEN
  25. %token TK_PR_ELSE
  26. %token TK_PR_WHILE
  27. %token TK_PR_DO
  28. %token TK_PR_INPUT
  29. %token TK_PR_OUTPUT
  30. %token TK_PR_RETURN
  31. %token TK_PR_STATIC
  32. %token TK_PR_CONST
  33. %token TK_OC_LE
  34. %token TK_OC_GE
  35. %token TK_OC_EQ
  36. %token TK_OC_NE
  37. %token TK_OC_AND
  38. %token TK_OC_OR
  39. %token TK_LIT_INT
  40. %token TK_LIT_FLOAT
  41. %token TK_LIT_FALSE
  42. %token TK_LIT_TRUE
  43. %token TK_LIT_CHAR
  44. %token TK_LIT_STRING
  45. %token TK_IDENTIFICADOR
  46. %token TOKEN_ERRO
  47.  
  48. %%
  49. /* Regras (e ações) da gramática */
  50.  
  51.  
  52. programa
  53. : declaracao_global programa
  54. | declarar_funcao programa
  55. | /* NADA */
  56. ;
  57.  
  58. declaracao_global
  59. : especificador_tipo valor ';'
  60. | qualificador_tipo especificador_tipo TK_IDENTIFICADOR ';'
  61. | especificador_classe_armazenamento especificador_tipo valor ';'
  62. | especificador_classe_armazenamento qualificador_tipo especificador_tipo TK_IDENTIFICADOR ';'
  63. ;
  64.  
  65. literal
  66. : TK_LIT_INT
  67. | TK_LIT_FLOAT
  68. | TK_LIT_FALSE
  69. | TK_LIT_TRUE
  70. | TK_LIT_CHAR
  71. | TK_LIT_STRING
  72. ;
  73.  
  74. especificador_tipo
  75. : TK_PR_INT
  76. | TK_PR_FLOAT
  77. | TK_PR_BOOL
  78. | TK_PR_CHAR
  79. | TK_PR_STRING
  80. ;
  81.  
  82. declaracao_local
  83. : especificador_tipo valor
  84. | especificador_classe_armazenamento especificador_tipo valor
  85. | especificador_tipo TK_IDENTIFICADOR TK_OC_LE valor
  86. | especificador_classe_armazenamento especificador_tipo TK_IDENTIFICADOR TK_OC_LE valor
  87. | especificador_classe_armazenamento qualificador_tipo especificador_tipo TK_IDENTIFICADOR TK_OC_LE valor
  88. | qualificador_tipo especificador_tipo TK_IDENTIFICADOR TK_OC_LE valor
  89. ;
  90.  
  91.  
  92. valor
  93. : literal
  94. | TK_IDENTIFICADOR
  95. | TK_IDENTIFICADOR '[' expressao ']'
  96. ;
  97.  
  98.  
  99.  
  100.  
  101.  
  102. atribuicao
  103. : valor '=' expressao
  104. | valor '=' valor
  105. ;
  106.  
  107.  
  108. retorno
  109. : TK_PR_RETURN valor
  110. | TK_PR_RETURN expressao
  111. | TK_PR_RETURN
  112. ;
  113.  
  114. especificador_classe_armazenamento
  115. :TK_PR_STATIC
  116. ;
  117.  
  118. qualificador_tipo
  119. : TK_PR_CONST
  120. ;
  121.  
  122.  
  123.  
  124.  
  125. bloco_comando
  126. : comando ';' bloco_comando
  127. | comando
  128. |
  129. ;
  130.  
  131. bloco_interno
  132. : comando ';' bloco_interno
  133. | comando
  134. |
  135. ;
  136.  
  137.  
  138. comando
  139. : retorno
  140. | atribuicao
  141. | declaracao_local
  142. | controle_fluxo
  143. | '{' bloco_interno '}'
  144. | entrada
  145. | chamada_funcao
  146. | saida
  147. | ';'
  148. ;
  149.  
  150. parametros_vazio
  151. : parametros
  152. |
  153. ;
  154.  
  155. parametros
  156. : lista_parametros ',' parametros
  157. | lista_parametros
  158. ;
  159.  
  160. lista_parametros
  161. : especificador_tipo TK_IDENTIFICADOR
  162. | qualificador_tipo especificador_tipo TK_IDENTIFICADOR
  163. | valor
  164. ;
  165.  
  166. entrada
  167. : TK_PR_INPUT expressao "=>" expressao
  168. ;
  169.  
  170. saida
  171. : TK_PR_OUTPUT lista_expressoes
  172. ;
  173.  
  174. lista_vazia
  175. : lista_expressoes
  176. |
  177. ;
  178.  
  179. lista_expressoes
  180. : expressao ',' lista_expressoes
  181. | expressao
  182. ;
  183.  
  184.  
  185. controle_fluxo
  186. : TK_PR_IF '(' expressao ')' TK_PR_THEN comando
  187. | TK_PR_IF '(' expressao ')' TK_PR_THEN comando TK_PR_ELSE comando
  188. | TK_PR_WHILE '(' expressao ')' TK_PR_DO comando
  189. | TK_PR_DO comando TK_PR_WHILE '(' expressao ')'
  190. ;
  191.  
  192. declarar_funcao
  193. : especificador_tipo TK_IDENTIFICADOR '(' parametros_vazio ')' '{' bloco_comando '}'
  194. | especificador_classe_armazenamento especificador_tipo TK_IDENTIFICADOR '(' parametros_vazio ')' '{' bloco_comando '}'
  195. ;
  196.  
  197.  
  198.  
  199. chamada_funcao
  200. : TK_IDENTIFICADOR '(' lista_vazia ')'
  201. | TK_IDENTIFICADOR '(' lista_vazia ')' expressao
  202. ;
  203.  
  204. operador_aritmetico
  205. : '+'
  206. | '-'
  207. | '*'
  208. | '/'
  209. | '%'
  210. ;
  211.  
  212. operador_logico
  213. : TK_OC_LE
  214. | TK_OC_GE
  215. | TK_OC_EQ
  216. | TK_OC_NE
  217. | TK_OC_AND
  218. | TK_OC_OR
  219. | '<'
  220. | '>'
  221. ;
  222.  
  223. expressao
  224. : operador_logico expressao
  225. | valor expressao
  226. | operador_aritmetico expressao
  227. | '(' expressao ')'
  228. | chamada_funcao
  229. | valor
  230. ;
  231.  
  232.  
  233.  
  234.  
  235.  
  236. %%
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement