home *** CD-ROM | disk | FTP | other *** search
/ Frozen Fish 1: Amiga / FrozenFish-Apr94.iso / bbs / alib / d1xx / d156 / grammars.lha / Grammars / Pascal / scan.l < prev   
Text File  |  1988-10-02  |  5KB  |  151 lines

  1. %{
  2. /*
  3.  * scan.l
  4.  *
  5.  * lex input file for pascal scanner
  6.  *
  7.  * extensions: two ways to spell "external" and "->" ok for "^".
  8.  */
  9.  
  10. #include "gram.tab.h"
  11. int line_no = 1;
  12.  
  13. %}
  14.  
  15. A       [aA]
  16. B       [bB]
  17. C       [cC]
  18. D       [dD]
  19. E       [eE]
  20. F       [fF]
  21. G       [gG]
  22. H       [hH]
  23. I       [iI]
  24. J       [jJ]
  25. K       [kK]
  26. L       [lL]
  27. M       [mM]
  28. N       [nN]
  29. O       [oO]
  30. P       [pP]
  31. Q       [qQ]
  32. R       [rR]
  33. S       [sS]
  34. T       [tT]
  35. U       [uU]
  36. V       [vV]
  37. W       [wW]
  38. X       [xX]
  39. Y       [yY]
  40. Z       [zZ]
  41. NQUOTE  [^']
  42.  
  43. %%
  44.  
  45. {A}{N}{D}                       return(AND);
  46. {A}{R}{R}{A}{Y}                 return(ARRAY);
  47. {C}{A}{S}{E}                    return(CASE);
  48. {C}{O}{N}{S}{T}                 return(CONST);
  49. {D}{I}{V}                       return(DIV);
  50. {D}{O}                          return(DO);
  51. {D}{O}{W}{N}{T}{O}              return(DOWNTO);
  52. {E}{L}{S}{E}                    return(ELSE);
  53. {E}{N}{D}                       return(END);
  54. {E}{X}{T}{E}{R}{N}      |
  55. {E}{X}{T}{E}{R}{N}{A}{L}        return(EXTERNAL);
  56. {F}{O}{R}                       return(FOR);
  57. {F}{O}{R}{W}{A}{R}{D}           return(FORWARD);
  58. {F}{U}{N}{C}{T}{I}{O}{N}        return(FUNCTION);
  59. {G}{O}{T}{O}                    return(GOTO);
  60. {I}{F}                          return(IF);
  61. {I}{N}                          return(IN);
  62. {L}{A}{B}{E}{L}                 return(LABEL);
  63. {M}{O}{D}                       return(MOD);
  64. {N}{I}{L}                       return(NIL);
  65. {N}{O}{T}                       return(NOT);
  66. {O}{F}                          return(OF);
  67. {O}{R}                          return(OR);
  68. {O}{T}{H}{E}{R}{W}{I}{S}{E}     return(OTHERWISE);
  69. {P}{A}{C}{K}{E}{D}              return(PACKED);
  70. {B}{E}{G}{I}{N}                 return(PBEGIN);
  71. {F}{I}{L}{E}                    return(PFILE);
  72. {P}{R}{O}{C}{E}{D}{U}{R}{E}     return(PROCEDURE);
  73. {P}{R}{O}{G}{R}{A}{M}           return(PROGRAM);
  74. {R}{E}{C}{O}{R}{D}              return(RECORD);
  75. {R}{E}{P}{E}{A}{T}              return(REPEAT);
  76. {S}{E}{T}                       return(SET);
  77. {T}{H}{E}{N}                    return(THEN);
  78. {T}{O}                          return(TO);
  79. {T}{Y}{P}{E}                    return(TYPE);
  80. {U}{N}{T}{I}{L}                 return(UNTIL);
  81. {V}{A}{R}                       return(VAR);
  82. {W}{H}{I}{L}{E}                 return(WHILE);
  83. {W}{I}{T}{H}                    return(WITH);
  84. [a-zA-Z]([a-zA-Z0-9])*          return(IDENTIFIER);
  85.  
  86. ":="                            return(ASSIGNMENT);
  87. '({NQUOTE}|'')+'                return(CHARACTER_STRING);
  88. ":"                             return(COLON);
  89. ","                             return(COMMA);
  90. [0-9]+                          return(DIGSEQ);
  91. "."                             return(DOT);
  92. ".."                            return(DOTDOT);
  93. "="                             return(EQUAL);
  94. ">="                            return(GE);
  95. ">"                             return(GT);
  96. "["                             return(LBRAC);
  97. "<="                            return(LE);
  98. "("                             return(LPAREN);
  99. "<"                             return(LT);
  100. "-"                             return(MINUS);
  101. "<>"                            return(NOTEQUAL);
  102. "+"                             return(PLUS);
  103. "]"                             return(RBRAC);
  104. [0-9]+"."[0-9]+                 return(REALNUMBER);
  105. ")"                             return(RPAREN);
  106. ";"                             return(SEMICOLON);
  107. "/"                             return(SLASH);
  108. "*"                             return(STAR);
  109. "**"                            return(STARSTAR);
  110. "->"                    |
  111. "^"                             return(UPARROW);
  112.  
  113. "(*"                    |
  114. "{"                             { register int c;
  115.                                         while ((c = input()))
  116.                                         {
  117.                                                 if (c == '}')
  118.                                                         break;
  119.                                                 else if (c == '*')
  120.                                                 {
  121.                                                         if ((c = input()) == ')')
  122.                                                                 break;
  123.                                                         else
  124.                                                                 unput (c);
  125.                                                 }
  126.                                                 else if (c == '\n')
  127.                                                         line_no++;
  128.                                                 else if (c == 0)
  129.                                                         commenteof();
  130.                                         }
  131.                                 }
  132.  
  133. [ \t\f]                         ;
  134.  
  135. \n                              line_no++;
  136.  
  137. .                               { fprintf (stderr,
  138.                                 "'%c' (0%o): illegal charcter at line %d\n",
  139.                                         yytext[0], yytext[0], line_no);
  140.                                 }
  141.  
  142. %%
  143.  
  144. commenteof()
  145. {
  146.         fprintf (stderr, "unexpected EOF inside comment at line %d\n",
  147.                 line_no);
  148.         exit (1);
  149. }
  150.  
  151.