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 >
Wrap
Text File
|
2003-01-28
|
2KB
|
93 lines
/*
* (C) 2001 Clemson University
*
* See COPYING in top-level directory.
*/
%{
#include "module_lang.h"
#include "symbol.h"
#include "y.tab.h"
extern YYSTYPE yylval;
#define LIST strcat(text,yytext);
#define ALIST strcat(atext,yytext);
#define START_A atext[0] = '\0'
#define RETURNVAL(x) yylval.i = (int)(token = x); return((int)x);
#define MAKELIST produce_listing(line,text);text[0]=0;
char text[256];
char atext[256];
int token;
int open_parens = 0;
int open_sbrace = 0;
int open_braces = 0;
int done_totally = 0;
%}
id [_a-zA-Z][_0-9a-zA-Z]*
w [ \t\n]*
%s M
%s DONE
%s A
%%
<INITIAL,DONE>"\n" {
if(!header_flag) ECHO;
MAKELIST; line++;
}
<M,A>"\n" {MAKELIST; line++;}
<INITIAL>[c|C][o|O][v|V][e|E][n|N]_[m|M][o|O][d|D][u|U][l|L][e|E] {
BEGIN(M); LIST; RETURNVAL(COVEN_MODULE);
}
<DONE>"\{" {if(!header_flag) ECHO;
if(!done_totally) open_braces++;
}
<DONE>"\}" {if(!header_flag) ECHO;
if(!done_totally) {
open_braces--;
if(open_braces == 0) {
module_parser_done();
done_totally = 1;
}
}
}
<INITIAL,DONE>. {if(!header_flag) ECHO;}
<M>"CONST"|"const" {LIST; RETURNVAL(CONST);}
<M>"INPUT"|"input" {LIST; RETURNVAL(INPUT);}
<M>"OUTPUT"|"output" {LIST; RETURNVAL(OUTPUT);}
<M>"INOUT"|"inout" {LIST; RETURNVAL(INOUT);}
<M>"STATIC"|"static" {LIST; RETURNVAL(STATIC);}
<M>"BUFFER"|"buffer" {LIST; RETURNVAL(BUFFER);}
<M>"UNSIGNED"|"unsigned" {LIST; RETURNVAL(UNSIGNED);}
<M>"\*" {LIST; RETURNVAL(ASTERIX);}
<M>\, {LIST; RETURNVAL(COMMA);}
<M>\( {LIST; open_parens++; RETURNVAL(LPAREN);}
<M>\) {LIST; open_parens--;
if(open_parens == 0) { BEGIN(DONE);}
RETURNVAL(RPAREN);
}
<M>"\[" {LIST; BEGIN(A); open_sbrace++;
START_A; RETURNVAL(LSBRACE);}
<A>"\[" {LIST; open_sbrace++; ALIST; }
<A>"\]" {LIST; open_sbrace--;
if(open_sbrace == 0) {
BEGIN(M);
yylval.c = atext;
return(ARRAY_END_STRING);
}
else ALIST;
}
<A>. {ALIST;}
<M>{id} {LIST; yylval.c = yytext; return(IDENTIFIER);}
<M>[ \t]+ {LIST; /* eat white space */ }
<M>. {LIST; fprintf(stderr,"scanner error bad char %s\n", yytext);}
%%