%{ #include #include "symtab.h" #include "y.tab.h" /* extern YYSTYPE yylval ; */ %} %% var { return VAR ; } print { return PRINT ; } println { return PRINTLN ; } end { return 0 ; } [a-zA-Z][0-9a-zA-Z]* { yylval.strval = strdup(yytext) ; return NAME ; } [0-9]+ { yylval.ival = atoi(yytext) ; return NUMBER ; } \"[^"\n]*["\n] { /* see lex & yacc book p.31 */ int len ; /* copy string, but skip the leading quote */ yylval.strval = strdup(yytext+1) ; /* remove trailing quote if it's there */ len = strlen(yylval.strval) ; if (yylval.strval[len-1] == '"') { yylval.strval[len-1] = '\0' ; } return STRING ; } [ \t\n] /* ignore whitespace */ . { return yytext[0] ; } %%