Advertisement
Guest User

Untitled

a guest
Mar 30th, 2020
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.95 KB | None | 0 0
  1. /*
  2. ;==========================================
  3. ; Autor: Duarte André Teresa Guerreiro
  4. ; Número: 2016231778
  5. ; Autor: Francisco Miguel Almeida Monteiro
  6. ; Número: 2016241480
  7.  
  8. Line <num linha>, colummn <num coluna>: unterminated comment\n
  9. Line <num linha>, colummn <num coluna>: illegal character (<c>)\n
  10. Line <num linha>, colummn <num coluna>: unterminated string literal\n
  11. Line <num linha>, colummn <num coluna>: invalid escape sequence (<c>)\n
  12. onde num linha e num coluna devem ser substituidos pelos valores correspondentes ao inicio do token que originou o erro
  13. e <c> devem ser substituidos por esse token.
  14. O analisador deve recuperar da ocorrência de erros lexicias a partir do fim desse token.
  15. Tanto as linhas como as colunas são numeradas a partir de 1
  16. ;==========================================
  17. */
  18. %{
  19. #include "y.tab.h"
  20. #include "tabelas.h"
  21. extern int flagLex;
  22. %}
  23. %{
  24. int numcolunas=1;
  25. int flag_semicolon=0;
  26. int flag_javarda=0;
  27. int aux_erroc=-1;
  28. int aux_errol=-1;
  29. char s[500];
  30. int tamanho=0;
  31. int flag_do_mal=0;
  32. int mais_uma=0;
  33. int flagString=0;
  34.  
  35. %}
  36. %X COMENTARIO STRLITT STRLITT2 COMENTARIO_2
  37.  
  38. %option yylineno
  39.  
  40. alfa [a-zA-Z_]
  41. numero [0-9]
  42. espaco (" "|"\t")
  43. SEMICOLON ";"
  44. BLANKID "_"
  45. PACKAGE package
  46. RETURN return
  47. AND "&&"
  48. ASSIGN "="
  49. STAR "*"
  50. COMMA ","
  51. DIV "/"
  52. EQ "=="
  53. GE ">="
  54. GT ">"
  55. LBRACE "{"
  56. LE "<="
  57. LPAR "("
  58. LSQ "["
  59. LT "<"
  60. MINUS "-"
  61. MOD "%"
  62. NE "!="
  63. NOT "!"
  64. OR "||"
  65. PLUS "+"
  66. RBRACE "}"
  67. RPAR ")"
  68. RSQ "]"
  69. ELSE else
  70. FOR for
  71. IF if
  72. VAR var
  73. INT int
  74. FLOAT32 float32
  75. BOOL bool
  76. STRING string
  77. PRINT fmt.Println
  78. PARSEINT strconv.Atoi
  79. FUNC func
  80. CMDARGS os.Args
  81. RESERVED ("default"|"break"|"case"|"chan"|"const"|"continue"|"default"|"defer"|"fallthrough"|"go"|"goto"|"import"|"interface"|"map"|"range"|"select"|"struct"|"switch"|"type"|"++"|"--")
  82. ENTER "\n"
  83.  
  84. decimal_digit [0-9]
  85. decimals {decimal_digit}+
  86. exponent ((e|E)("+"|"-")?{decimals})
  87. REALLIT ("."{decimals}{exponent}?)|({decimals}"."{decimals}?{exponent}?)|({decimals}{exponent})
  88. decimal_lit [0-9]{decimal_digit}*
  89. octal_digit [0-7]
  90. octal_lit 0{octal_digit}+
  91. hex_digit (([0-9]|[A-F])|([a-f]))
  92. hex_lit 0(x|X){hex_digit}+
  93. INTLIT (({decimal_lit}|{octal_lit})|{hex_lit}|0)
  94. teste "\\"("a"|"b"|"f"|"n"|"r"|"t"|"v"|"\\"|"\"")
  95. aux {INTLIT}$
  96.  
  97. %%
  98. {RESERVED} {if (flagLex==1){printf("RESERVED(%s)\n",yytext);}numcolunas+=yyleng;flag_semicolon=0;return RESERVED;}
  99. {ENTER} {flagString=0;numcolunas=1;if(flag_semicolon==1){if (flagLex==1){printf("SEMICOLON\n");}flag_semicolon=0;return SEMICOLON;}}
  100. {espaco}+ {numcolunas+=yyleng;};
  101. {SEMICOLON} {if (flagLex==1){printf("SEMICOLON\n");}numcolunas+=yyleng;flag_semicolon=0;return SEMICOLON;}
  102. {BLANKID} {if (flagLex==1){printf("BLANKID\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return BLANKID;}
  103. {RETURN} {if (flagLex==1){printf("RETURN\n");}numcolunas+=yyleng;flag_semicolon=1;yylval.string =(char*)strdup(yytext);return RETURN;}
  104. {AND} {if (flagLex==1){printf("AND\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return AND;}
  105. {ASSIGN} {if (flagLex==1){printf("ASSIGN\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return ASSIGN;}
  106. {STAR} {if (flagLex==1){printf("STAR\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return STAR;}
  107. {COMMA} {if (flagLex==1){printf("COMMA\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return COMMA;}
  108. {DIV} {if (flagLex==1){printf("DIV\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return DIV;}
  109. {EQ} {if (flagLex==1){printf("EQ\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return EQ;}
  110. {GE} {if (flagLex==1){printf("GE\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return GE;}
  111. {GT} {if (flagLex==1){printf("GT\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return GT;}
  112. {LBRACE} {if (flagLex==1){printf("LBRACE\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return LBRACE;}
  113. {LE} {if (flagLex==1){printf("LE\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return LE;}
  114. {LPAR} {if (flagLex==1){printf("LPAR\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return LPAR;}
  115. {LSQ} {if (flagLex==1){printf("LSQ\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return LSQ;}
  116. {LT} {if (flagLex==1){printf("LT\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return LT;}
  117. {MINUS} {if (flagLex==1){printf("MINUS\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return MINUS;}
  118. {MOD} {if (flagLex==1){printf("MOD\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return MOD;}
  119. {NE} {if (flagLex==1){printf("NE\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return NE;}
  120. {NOT} {if (flagLex==1){printf("NOT\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return NOT;}
  121. {OR} {if (flagLex==1){printf("OR\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return OR;}
  122. {PLUS} {if (flagLex==1){printf("PLUS\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return PLUS;}
  123. {RBRACE} {if (flagLex==1){printf("RBRACE\n");}numcolunas+=yyleng;flag_semicolon=1;yylval.string =(char*)strdup(yytext);return RBRACE;}
  124. {RSQ} {if (flagLex==1){printf("RSQ\n");}numcolunas+=yyleng;flag_semicolon=1;yylval.string =(char*)strdup(yytext);return RSQ;}
  125. {RPAR} {if (flagLex==1){printf("RPAR\n");}numcolunas+=yyleng;flag_semicolon=1;yylval.string =(char*)strdup(yytext);return RPAR;}
  126. {ELSE} {if (flagLex==1){printf("ELSE\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return ELSE;}
  127. {FOR} {if (flagLex==1){printf("FOR\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return FOR;}
  128. {IF} {if (flagLex==1){printf("IF\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return IF;}
  129. {VAR} {if (flagLex==1){printf("VAR\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return VAR;}
  130. {INT} {if (flagLex==1){printf("INT\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return INT;}
  131. {FLOAT32} {if (flagLex==1){printf("FLOAT32\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return FLOAT32;}
  132. {BOOL} {if (flagLex==1){printf("BOOL\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return BOOL;}
  133. {STRING} {if (flagLex==1){printf("STRING\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return STRING;}
  134. {PRINT} {if (flagLex==1){printf("PRINT\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return PRINT;}
  135. {PARSEINT} {if (flagLex==1){printf("PARSEINT\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return PARSEINT;}
  136. {FUNC} {if (flagLex==1){printf("FUNC\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return FUNC;}
  137. {CMDARGS} {if (flagLex==1){printf("CMDARGS\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return CMDARGS;}
  138. {PACKAGE} {if (flagLex==1){printf("PACKAGE\n");}numcolunas+=yyleng;flag_semicolon=0;yylval.string =(char*)strdup(yytext);return PACKAGE;}
  139. {alfa}+({numero}|{alfa})* {if (flagLex==1){printf("ID(%s)\n",&yytext[0]);}yylval.p=criaAuxiliar((char*)strdup(yytext),numcolunas,yylineno);numcolunas+=yyleng;flag_semicolon=1;return ID;}
  140. {REALLIT} {if (flagLex==1){printf("REALLIT(%s)\n",yytext);}numcolunas+=yyleng;flag_semicolon=1;yylval.string =(char*)strdup(yytext);return REALLIT;}
  141. {INTLIT} {if (flagLex==1){printf("INTLIT(%s)\n",yytext);}numcolunas+=yyleng;flag_semicolon=1;yylval.string =(char*)strdup(yytext);return INTLIT;}
  142.  
  143.  
  144.  
  145. "/*" {aux_erroc=numcolunas;aux_errol=yylineno;numcolunas+=yyleng;BEGIN COMENTARIO;}
  146. <COMENTARIO>"\n" {numcolunas=1;}
  147. <COMENTARIO><<EOF>> {printf("Line %d, column %d: unterminated comment\n",aux_errol,aux_erroc);BEGIN 0;}
  148. <COMENTARIO>"*/" {numcolunas+=yyleng;BEGIN 0;}
  149. <COMENTARIO>. {numcolunas+=yyleng;}
  150.  
  151.  
  152. "//" {numcolunas+=yyleng;BEGIN COMENTARIO_2;}
  153. <COMENTARIO_2>. {numcolunas+=yyleng;};
  154. <COMENTARIO_2>"\n" {numcolunas=1;if(flag_semicolon==1){if (flagLex==1){printf("SEMICOLON\n");}flag_semicolon=0;return SEMICOLON;}BEGIN 0;}
  155.  
  156. "\"" {aux_erroc=numcolunas;aux_errol=yylineno;numcolunas+=yyleng;BEGIN STRLITT;}
  157. <STRLITT>"\\""\\" {s[tamanho]=yytext[0];tamanho++;s[tamanho]=yytext[1];tamanho++;numcolunas+=yyleng;}
  158. <STRLITT>"\\""\"" {s[tamanho]=yytext[0];tamanho++;s[tamanho]=yytext[1];tamanho++;numcolunas+=yyleng;}
  159. <STRLITT>"\\"(f|r|t|n) {s[tamanho]=yytext[0];tamanho++;s[tamanho]=yytext[1];tamanho++;numcolunas+=yyleng;}
  160. <STRLITT>"\\". {printf("Line %d, column %d: invalid escape sequence (%s)\n",aux_errol,numcolunas,yytext);tamanho+=yyleng;numcolunas+=yyleng;flag_do_mal=1;}
  161. <STRLITT>"\"" {if(flag_do_mal==0){s[tamanho]='\0';if (flagLex==1){printf("STRLIT(\"");printf("%s", s);printf("\")\n");}flag_semicolon=1;tamanho=0;flagString=1;BEGIN 0;yylval.string =(char*)strdup(s);numcolunas+=yyleng;return STRLIT;}tamanho=0;flag_do_mal=0;numcolunas+=yyleng;BEGIN 0;}
  162. <STRLITT>"\\" {printf("Line %d, column %d: invalid escape sequence (%s)\n",aux_errol,numcolunas,yytext);tamanho+=yyleng;numcolunas+=yyleng;flag_do_mal=1;}
  163. <STRLITT>. {s[tamanho]=*yytext;tamanho++;numcolunas+=yyleng;};
  164. <STRLITT>"\n" {printf("Line %d, column %d: unterminated string literal\n",aux_errol,aux_erroc);tamanho=0;flag_do_mal=0;numcolunas=1;BEGIN 0;}
  165. <STRLITT><<EOF>> {printf("Line %d, column %d: unterminated string literal\n",aux_errol,aux_erroc);tamanho=0;flag_do_mal=0;numcolunas=1;BEGIN 0;}
  166.  
  167.  
  168. <<EOF>> {if(flag_semicolon==1){if(flagLex==1){printf("SEMICOLON\n");}flag_semicolon=0;return SEMICOLON;}return 0;}
  169.  
  170.  
  171.  
  172.  
  173. . {printf("Line %d, column %d: illegal character (%s)\n",yylineno,numcolunas,&yytext[0]);numcolunas+=yyleng;}
  174.  
  175.  
  176.  
  177. %%
  178.  
  179.  
  180. int yywrap()
  181. {
  182. return 1;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement