home *** CD-ROM | disk | FTP | other *** search
/ ftp.parl.clemson.edu / 2015-02-07.ftp.parl.clemson.edu.tar / ftp.parl.clemson.edu / pub / coven / coven-utils-1.1.tgz / coven-utils-1.1.tar / utils / coven-module-parser / module_scanner.l < prev    next >
Text File  |  2003-01-28  |  2KB  |  93 lines

  1. /*
  2.  * (C) 2001 Clemson University
  3.  *
  4.  * See COPYING in top-level directory.
  5.  */
  6.  
  7.  
  8. %{
  9.  
  10. #include "module_lang.h"
  11. #include "symbol.h"
  12. #include "y.tab.h"
  13. extern YYSTYPE yylval;
  14.  
  15. #define    LIST        strcat(text,yytext);
  16. #define ALIST        strcat(atext,yytext);
  17. #define START_A        atext[0] = '\0'
  18. #define    RETURNVAL(x)    yylval.i = (int)(token = x); return((int)x);
  19. #define    MAKELIST    produce_listing(line,text);text[0]=0;
  20.  
  21. char text[256];
  22. char atext[256];
  23. int token;
  24. int open_parens = 0;
  25. int open_sbrace = 0;
  26. int open_braces = 0;
  27. int done_totally = 0;
  28.  
  29. %}
  30.  
  31. id          [_a-zA-Z][_0-9a-zA-Z]*
  32. w           [ \t\n]*
  33.  
  34. %s M
  35. %s DONE
  36. %s A
  37. %%
  38.  
  39. <INITIAL,DONE>"\n"    {
  40.              if(!header_flag) ECHO; 
  41.              MAKELIST; line++;
  42.             }
  43. <M,A>"\n"             {MAKELIST; line++;}
  44. <INITIAL>[c|C][o|O][v|V][e|E][n|N]_[m|M][o|O][d|D][u|U][l|L][e|E] {
  45.              BEGIN(M); LIST; RETURNVAL(COVEN_MODULE);
  46.             }
  47. <DONE>"\{"        {if(!header_flag) ECHO;
  48.              if(!done_totally) open_braces++;
  49.             }
  50. <DONE>"\}"        {if(!header_flag) ECHO;
  51.              if(!done_totally) {
  52.                  open_braces--;
  53.                  if(open_braces == 0) {
  54.                      module_parser_done();
  55.                      done_totally = 1;
  56.                   }
  57.              }
  58.             }
  59. <INITIAL,DONE>.        {if(!header_flag) ECHO;}
  60. <M>"CONST"|"const"    {LIST; RETURNVAL(CONST);}
  61. <M>"INPUT"|"input"    {LIST; RETURNVAL(INPUT);}
  62. <M>"OUTPUT"|"output"    {LIST; RETURNVAL(OUTPUT);}
  63. <M>"INOUT"|"inout"    {LIST; RETURNVAL(INOUT);}
  64. <M>"STATIC"|"static"    {LIST; RETURNVAL(STATIC);}
  65. <M>"BUFFER"|"buffer"    {LIST; RETURNVAL(BUFFER);}
  66. <M>"UNSIGNED"|"unsigned" {LIST; RETURNVAL(UNSIGNED);}
  67. <M>"\*"            {LIST; RETURNVAL(ASTERIX);}
  68. <M>\,             {LIST; RETURNVAL(COMMA);}
  69. <M>\(            {LIST; open_parens++; RETURNVAL(LPAREN);}
  70. <M>\)            {LIST; open_parens--;
  71.              if(open_parens == 0) { BEGIN(DONE);}
  72.              RETURNVAL(RPAREN);
  73.                         }
  74. <M>"\["            {LIST; BEGIN(A); open_sbrace++; 
  75.              START_A; RETURNVAL(LSBRACE);}
  76. <A>"\["            {LIST; open_sbrace++; ALIST; }
  77. <A>"\]"            {LIST; open_sbrace--;
  78.              if(open_sbrace == 0) {
  79.                  BEGIN(M);
  80.                  yylval.c = atext;
  81.                  return(ARRAY_END_STRING);
  82.              }
  83.              else ALIST;
  84.             }
  85. <A>.            {ALIST;}
  86.  
  87. <M>{id}             {LIST; yylval.c = yytext; return(IDENTIFIER);}
  88.  
  89. <M>[ \t]+            {LIST; /* eat white space */ }
  90. <M>.       {LIST; fprintf(stderr,"scanner error bad char %s\n", yytext);}
  91.  
  92. %%
  93.