Advertisement
Guest User

Lexer

a guest
Mar 30th, 2018
2,098
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.16 KB | None | 0 0
  1. %option noyywrap
  2.  
  3. %{
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include "symtab.h"
  8. #include "parser.tab.h"
  9. extern FILE *yyin;
  10. extern FILE *yyout;
  11.  
  12. int lineno = 1; // initialize to 1
  13. void ret_print(char *token_type);
  14. void yyerror();
  15. %}
  16.  
  17. %x ML_COMMENT
  18.  
  19. alpha [a-zA-Z]
  20. digit [0-9]
  21. alnum {alpha}|{digit}
  22. print [ -~]
  23.  
  24. ID {alpha}+{alnum}*
  25. ICONST "0"|[0-9]{digit}*
  26. FCONST "0"|{digit}*"."{digit}+
  27. CCONST (\'{print}\')|(\'\\[nftrbv]\')
  28. STRING \"{print}*\"
  29.  
  30. %%
  31.  
  32. "//".* { printf("Eat up comment at line %d\n", lineno); }
  33.  
  34. "/*" { printf("Eat up comment from line %d ", lineno); BEGIN(ML_COMMENT); }
  35. <ML_COMMENT>"*/" { printf("to line %d\n", lineno); BEGIN(INITIAL); }
  36. <ML_COMMENT>[^*\n]+
  37. <ML_COMMENT>"*"
  38. <ML_COMMENT>"\n" { lineno += 1; }
  39.  
  40.  
  41. "char"|"CHAR" { return CHAR; }
  42. "int"|"INT" { return INT; }
  43. "float"|"FLOAT" { return FLOAT; }
  44. "double"|"DOUBLE" { return DOUBLE; }
  45. "if"|"IF" { return IF; }
  46. "else"|"ELSE" { return ELSE; }
  47. "while"|"WHILE" { return WHILE; }
  48. "for"|"FOR" { return FOR; }
  49. "continue"|"CONTINUE" { return CONTINUE; }
  50. "break"|"BREAK" { return BREAK; }
  51. "void"|"VOID" { return VOID; }
  52. "return"|"RETURN" { return RETURN; }
  53.  
  54.  
  55. "+"|"-" { return ADDOP; }
  56. "*" { return MULOP; }
  57. "/" { return DIVOP; }
  58. "++"|"--" { return INCR; }
  59. "||" { return OROP; }
  60. "&&" { return ANDOP; }
  61. "!" { return NOTOP; }
  62. "=="|"!=" { return EQUOP; }
  63. ">"|"<"|">="|"<=" { return RELOP; }
  64.  
  65.  
  66. "(" { return LPAREN; }
  67. ")" { return RPAREN; }
  68. "]" { return LBRACK; }
  69. "[" { return RBRACK; }
  70. "{" { return LBRACE; }
  71. "}" { return RBRACE; }
  72. ";" { return SEMI; }
  73. "." { return DOT; }
  74. "," { return COMMA; }
  75. "=" { return ASSIGN; }
  76. "&" { return REFER; }
  77.  
  78.  
  79. {ID} {
  80. // insert identifier into symbol table
  81. insert(yytext, strlen(yytext), UNDEF, lineno);
  82. return ID;
  83. }
  84. {ICONST} { return ICONST; }
  85. {FCONST} { return FCONST; }
  86. {CCONST} { return CCONST; }
  87. {STRING} { return STRING; }
  88.  
  89.  
  90. "\n" { lineno += 1; }
  91. [ \t\r\f]+ /* eat up whitespace */
  92.  
  93. . { yyerror("Unrecognized character"); }
  94.  
  95. %%
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement