Facebook
From Round Guinea Pig, 3 Years ago, written in Plain Text.
Embed
Download Paste or View Raw
Hits: 50
  1. %option noyywrap yylineno
  2.  
  3. %{
  4.    #include <string.h>
  5.    #include "semantic.tab.h"
  6.    #include "defs.h"
  7.    int c;
  8.    extern YYSTYPE yylval;
  9. %}
  10.  
  11. %%
  12.  
  13. [ \t\n]+             { /* skip */ }
  14. "void"               { yylval.i = VOID; return _TYPE; }
  15. "int"                { yylval.i = INT;  return _TYPE; }
  16. "unsigned"           { yylval.i = UINT; return _TYPE; }
  17. "if"                 { return _IF; }
  18. "else"               { return _ELSE; }
  19. "return"             { return _RETURN; }
  20.  
  21. "hana"               { return _HANA; }
  22. "loop"               { return _LOOP; }
  23. "hopau"              { return _HOPAU; }
  24. "oiai"               { return _OIAI; }
  25.  
  26. "switch"                 { return _SWITCH; }
  27. "case"                   { return _CASE; }
  28. "break"                  { return _BREAK; }
  29. "default"                { return _DEFAULT; }
  30. "end_switch"     { return _END_SWITCH; }
  31.  
  32.  
  33. "<!"                 { return _OTVORENO; }
  34. "-!>"                { return _ZATVORENO; }
  35.  
  36. "("                  { return _LPAREN; }
  37. ")"                  { return _RPAREN; }
  38. "{"                  { return _LBRACKET; }
  39. "}"                  { return _RBRACKET; }
  40. ";"                  { return _SEMICOLON; }
  41. "="                  { return _ASSIGN; }
  42.  
  43. ","                  { return _COMMA; }
  44.  
  45. "++"                 { return _INC; }
  46.  
  47. "*"                  { yylval.i = MUL; return _AROP; }
  48. "/"                  { yylval.i = DIV; return _AROP; }
  49. "+"                  { yylval.i = ADD; return _AROP; }
  50. "-"                  { yylval.i = SUB; return _AROP; }
  51.  
  52. "<"                  { yylval.i = LT; return _RELOP; }
  53. ">"                  { yylval.i = GT; return _RELOP; }
  54. "<="                 { yylval.i = LE; return _RELOP; }
  55. ">="                 { yylval.i = GE; return _RELOP; }
  56. "=="                 { yylval.i = EQ; return _RELOP; }
  57. "!="                 { yylval.i = NE; return _RELOP; }
  58.  
  59. "//".*               {}
  60. [a-zA-Z][a-zA-Z0-9]* { yylval.s = strdup(yytext);
  61.                        return _ID; }
  62. [+-]?[0-9]{1,10}     { yylval.s = strdup(yytext);
  63.                        return _INT_NUMBER;}
  64. [0-9]{1,10}[uU]      { yylval.s = strdup(yytext);
  65.                        yylval.s[yyleng-1] = 0;
  66.                        return _UINT_NUMBER;}
  67.  
  68. "/*" {
  69.   for (;;) {
  70.         while ((c = input()) != '*' && c != EOF)
  71.                                 ; /* preskoci tekst komentara */
  72.         if (c == '*') {
  73.         while ((c = input()) == '*')
  74.                                 ;
  75.         if (c == '/')
  76.                 break; /* kraj komentara */
  77.                                 }
  78.         if (c == EOF) {
  79.                 err("EOF in comment");
  80.          break;
  81.                                 }
  82.                         }
  83.         }
  84.  
  85.  
  86. .                    { printf("line %d: LEXICAL ERROR on char %c\n", yylineno, *yytext);}
  87. %%