Advertisement
Guest User

Untitled

a guest
Mar 27th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.91 KB | None | 0 0
  1. %{
  2. #include <stdio.h>
  3. #include <string.h>
  4. #include <stdlib.h>
  5.  
  6. #define DEBUG 0
  7. int flag=0;
  8. int aux2 = 0;
  9.  
  10. int yylex(void);
  11. void yyerror(const char *s);
  12.  
  13. extern int n_linha;
  14. extern int n_coluna;
  15. extern char * yytext;
  16. extern int yyleng;
  17.  
  18.  
  19. %}
  20.  
  21. %union{
  22. char *str;
  23. }
  24.  
  25. %token <str> ID STRLIT BOOLLIT DECLIT REALLIT
  26.  
  27. %token BOOL INT DOUBLE SEMI COMMA PARSEINT OCURV OSQUARE CSQUARE CCURV ASSIGN AND OR EQ GEQ GT LEQ LT NEQ PLUS MINUS STAR DIV MOD NOT DOTLENGTH PUBLIC STATIC STRING VOID CLASS OBRACE CBRACE IF ELSE WHILE DO PRINT RETURN
  28.  
  29.  
  30. %left SEMI COMMA
  31. %right ASSIGN
  32. %left OR
  33. %left AND
  34. %left EQ NEQ
  35.  
  36. %left LT GT LEQ GEQ
  37. %left MINUS PLUS
  38. %left STAR DIV MOD
  39. %nonassoc "negative" "positive"
  40. %right NOT
  41. %left OCURV CCURV OBRACE CBRACE OSQUARE CSQUARE
  42.  
  43. %right ELSE
  44.  
  45. %%
  46.  
  47. Program: CLASS ID OBRACE FieldDecl_MethodDecl_SEMI CBRACE {if(DEBUG){printf("Program\n");}}
  48. ;
  49.  
  50. FieldDecl: PUBLIC STATIC Type ID CommaID SEMI {if(DEBUG){printf("FieldDecl\n");}}
  51. | error SEMI {if(DEBUG){printf("Error SEMI on FielDecl\n");}}
  52. ;
  53.  
  54. MethodDecl: PUBLIC STATIC MethodHeader MethodBody {if(DEBUG){printf("MethodDecl\n");}}
  55. ;
  56.  
  57. MethodHeader: Type ID OCURV FormalParamsOptional CCURV {if(DEBUG){printf("MethodHeader_Type_ID_OCURV_FPO_CCURV\n");}}
  58. | VOID ID OCURV FormalParamsOptional CCURV {if(DEBUG){printf("MethodHeader_VOID_ID_OCURV_FPO_CCURV\n");}}
  59. ;
  60.  
  61.  
  62. MethodBody: OBRACE VarDecl_Statement CBRACE {if(DEBUG){printf("MethodBody\n");}}
  63. ;
  64.  
  65. FormalParams: Type ID CommaTypeID {if(DEBUG){printf("FormalParams_Type_ID\n");}}
  66. | STRING OSQUARE CSQUARE ID {if(DEBUG){printf("FormalParams_STRING_OSQUARE_CSQUARE_ID\n");}}
  67. ;
  68.  
  69. VarDecl: Type ID CommaID SEMI {if(DEBUG){printf("VarDecl\n");}}
  70. ;
  71.  
  72. Type: BOOL {if(DEBUG){printf("BOOL\n");}}
  73. | INT {if(DEBUG){printf("INT\n");}}
  74. | DOUBLE {if(DEBUG){printf("DOUBLE\n");}}
  75. ;
  76.  
  77. Statement: OBRACE StatementZeroMore CBRACE {if(DEBUG){printf("OBRACE_StatementZeroMore_CBRACE\n");}}
  78. | IF OCURV Expr CCURV Statement {if(DEBUG){printf("IF_OCURV_Expr_CCURV_Statement\n");}}
  79. | IF OCURV Expr CCURV Statement ELSE Statement {if(DEBUG){printf("IF_OCURV_Expr_CCURV_Statement_Else_Statement\n");}}
  80. | WHILE OCURV Expr CCURV Statement {if(DEBUG){printf("WHILE_OCURV_Expr_CCURV_Statement\n");}}
  81. | DO Statement WHILE OCURV Expr CCURV SEMI {if(DEBUG){printf("DO_Statement_WHILE_OCURV_Expr_CCURV_SEMI\n");}}
  82. | PRINT OCURV Expr CCURV SEMI {if(DEBUG){printf("PRINT_OCURV_Expr_CCURV_SEMI\n");}}
  83. | PRINT OCURV STRLIT CCURV SEMI {if(DEBUG){printf("PRINT_OCURV_STRLIT_CCURV_SEMI\n");}}
  84. | Expression1_Optional SEMI {if(DEBUG){printf("Expression1_Optional_SEMI\n");}}
  85. | RETURN ExpressionOptional SEMI {if(DEBUG){printf("RETURN_ExpressionOptional_SEMI\n");}}
  86. | error SEMI {if(DEBUG){printf("Error SEMI on Statement\n");}}
  87. ;
  88.  
  89. Assignment: ID ASSIGN Expr {if(DEBUG){printf("Assigment\n");}}
  90. ;
  91.  
  92. MethodInvocation: ID OCURV OptionMethodInvocation CCURV {if(DEBUG){printf("MethodInvocation\n");}}
  93. | ID OCURV error CCURV {if(DEBUG){printf("Error ID OCURV CCURV on MethodInvocation\n");}}
  94. ;
  95.  
  96. ParseArgs: PARSEINT OCURV ID OSQUARE Expr CSQUARE CCURV {if(DEBUG){printf("ParseArgs\n");}}
  97. | PARSEINT OCURV error CCURV {if(DEBUG){printf("Error PARSEINT OCURV CCURV on ParseArgs\n");}}
  98. ;
  99.  
  100. Expr: Expression1
  101. | Expr AND Expr {if(DEBUG){printf("Expr_AND_Expr\n");}}
  102. | Expr OR Expr {if(DEBUG){printf("Expr_OR_Expr\n");}}
  103. | Expr EQ Expr {if(DEBUG){printf("Expr_EQ_Expr\n");}}
  104. | Expr GEQ Expr {if(DEBUG){printf("Expr_GEQ_Expr\n");}}
  105. | Expr GT Expr {if(DEBUG){printf("Expr_GT_Expr\n");}}
  106. | Expr LEQ Expr {if(DEBUG){printf("Expr_LEQ_Expr\n");}}
  107. | Expr LT Expr {if(DEBUG){printf("Expr_LT_Expr\n");}}
  108. | Expr NEQ Expr {if(DEBUG){printf("Expr_NEQ_Expr\n");}}
  109. | Expr PLUS Expr {if(DEBUG){printf("Expr_PLUS_Expr\n");}}
  110. | Expr MINUS Expr {if(DEBUG){printf("Expr_MINUS_Expr\n");}}
  111. | Expr STAR Expr {if(DEBUG){printf("Expr_STAR_Expr\n");}}
  112. | Expr DIV Expr {if(DEBUG){printf("Expr_DIV_Expr\n");}}
  113. | Expr MOD Expr {if(DEBUG){printf("Expr_MOD_Expr\n");}}
  114. | PLUS Expr %prec "positive" {if(DEBUG){printf("PLUS_Expr\n");}}
  115. | MINUS Expr %prec "negative" {if(DEBUG){printf("MINUS_Expr\n");}}
  116. | NOT Expr {if(DEBUG){printf("NOT_Expr\n");}}
  117. | ID Dotlength {if(DEBUG){printf("ID_Dotlength\n");}}
  118. | OCURV Expr CCURV {if(DEBUG){printf("OCURV_Expr_CCURV\n");}}
  119. | BOOLLIT {if(DEBUG){printf("BOOLLIT\n");}}
  120. | DECLIT {if(DEBUG){printf("DECLIT\n");}}
  121. | REALLIT {if(DEBUG){printf("REALLIT\n");}}
  122. | OCURV error CCURV {if(DEBUG){printf("Error OCURV CCURV on Expr\n");}}
  123. ;
  124.  
  125. OptionMethodInvocation: Expr CommaExpr {if(DEBUG){printf("OptionMethodInvocation\n");}}
  126. | Vazio {}
  127. ;
  128.  
  129.  
  130. CommaExpr: Vazio {}
  131. | COMMA Expr CommaExpr {if(DEBUG){printf("CommaExpr\n");}}
  132. ;
  133.  
  134. Expression1_Optional: Vazio {}
  135. | Expression1 {if(DEBUG){printf("Expression1_Optional\n");}}
  136. ;
  137.  
  138.  
  139. Expression1: Assignment {if(DEBUG){printf("Expression1_Assignment\n");}}
  140. | MethodInvocation {if(DEBUG){printf("Expression1_MethodInvocation\n");}}
  141. | ParseArgs {if(DEBUG){printf("Expression1_ParseArgs\n");}}
  142. ;
  143.  
  144. Dotlength: Vazio {}
  145. | DOTLENGTH {if(DEBUG){printf("DOTLENGTH\n");}}
  146. ;
  147.  
  148.  
  149.  
  150. CommaTypeID: Vazio {}
  151. | COMMA Type ID CommaTypeID {if(DEBUG){printf("CommaTypeID\n");}}
  152. ;
  153.  
  154.  
  155. FormalParamsOptional: FormalParams {if(DEBUG){printf("FormalParamsOptional_FormalParams\n");}}
  156. | Vazio
  157. ;
  158.  
  159.  
  160. StatementZeroMore: Vazio {}
  161. | Statement StatementZeroMore {if(DEBUG){printf("StatementZeroMore\n");}}
  162. ;
  163.  
  164. ExpressionOptional: Vazio {}
  165. | Expr {if(DEBUG){printf("ExpressionOptional\n");}}
  166. ;
  167.  
  168.  
  169.  
  170.  
  171. VarDecl_Statement: Vazio {}
  172. | VarDecl VarDecl_Statement {if(DEBUG){printf("VarDecl_VarDecl_Statement\n");}}
  173. | Statement VarDecl_Statement {if(DEBUG){printf("Statement_VarDecl_Statement\n");}}
  174. ;
  175.  
  176.  
  177.  
  178. FieldDecl_MethodDecl_SEMI: Vazio {}
  179. | FieldDecl FieldDecl_MethodDecl_SEMI {if(DEBUG){printf("FieldDecl_MethodDecl_SEMI\n");}}
  180. | MethodDecl FieldDecl_MethodDecl_SEMI {if(DEBUG){printf("FieldDecl_MethodDecl_SEMI\n");}}
  181. | SEMI FieldDecl_MethodDecl_SEMI {if(DEBUG){printf("FieldDecl_MethodDecl_SEMI\n");}}
  182. ;
  183.  
  184.  
  185. CommaID: Vazio {}
  186. | COMMA ID CommaID {if(DEBUG){printf("CommaID\n");}}
  187. ;
  188.  
  189. Vazio: {if(DEBUG){printf("Vazio\n");}}
  190. ;
  191.  
  192. %%
  193.  
  194. void yyerror(const char* s){
  195. printf("Line %d, col %d: %s: %s\n",n_linha,n_coluna-yyleng,s,yytext);
  196. }
  197.  
  198. /* A função main() está do lado do lex */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement