www.pudn.com > lab3.rar > lab3.l


%{ 
#include "lab3.h" 
#include "lab3.tab.h" 
 
lineno = 1; 
%} 
 
/* name definition */ 
delim        [ \t] 
ws           {delim}+ 
letter       [A-Za-z] 
digit        [0-9] 
id           {letter}({letter}|{digit})* 
number       {digit}+ 
char_const   '(.|\\n|\\t)' 
string       \"(.)*\" 
comment      (\/\*([^*]|\n|(\*+([^*/]|\n)))*\*+\/)|(\/\/[^\n]*) 
 
%% 
 
"\n"         { lineno++; } 
{comment}    { 
                  int i; 
 
                  for (i = 0; yytext[i] != '\0'; i++) { 
                      if (yytext[i] == '\n') { 
                          lineno++; 
                      }        
                  } 
             } 
{ws}         { /* do nothing and return nothing */ } 
"__cdecl"    { return (CDECL); } 
"__stdcall"  { return (STDCALL); } 
"char"       { return (CHAR); } 
"else"       { return (ELSE); } 
"if"         { return (IF); } 
"int"        { return (INT); } 
"return"     { return (RETURN); } 
"void"       { return (VOID); } 
"while"      { return (WHILE); } 
{id}         { 
                  yylval.id = InsertID(yytext); 
                  return (ID); 
             } 
{number}     {     
                  yylval.id = InsertID(yytext); 
                  return (NUM); 
             } 
{char_const} { 
                  yylval.id = InsertID(yytext); 
                  return (CHAR_LITERAL); 
             } 
{string}     { 
                  yylval.id = InsertID(yytext); 
                  return (STRING_LITERAL); 
             } 
"..."        { return (ELLIPSIS); } 
"!="         { 
                  strcpy(yylval.op, yytext); 
                  return (NE); 
             } 
"<"          { 
                  strcpy(yylval.op, yytext); 
                  return (LT); 
             } 
"<="         { 
                  strcpy(yylval.op, yytext); 
                  return (LE); 
             } 
"=="         {  
                  strcpy(yylval.op, yytext); 
                  return (EQ); 
             } 
">"          { 
                  strcpy(yylval.op, yytext); 
                  return (GT); 
             } 
">="         { 
                  strcpy(yylval.op, yytext); 
                  return (GE); 
             } 
";"          { return (';'); } 
"{"          { return ('{'); } 
"}"          { return ('}'); } 
","          { return (','); } 
"="          { return ('='); } 
"("          { return ('('); } 
")"          { return (')'); } 
"["          { return ('['); } 
"]"          { return (']'); } 
"+"          { return ('+'); } 
"-"          { return ('-'); } 
"*"          { return ('*'); } 
"/"          { return ('/'); } 
"%"          { return ('%'); } 
.            { yyerror("unknown character"); } 
 
%% 
 
int yywrap() 
{ 
    return (1); 
}