/* scanner for a toy JavaScript-like language */ %{ #define YY_NO_UNISTD_H %} DIGIT [0-9] ID [a-z_$][a-z0-9_$]* STRQ '([^\']|(\\\'))*' STRDQ "([^\"]|(\\\"))*" %% {DIGIT}+ { printf("%s", yytext); } {DIGIT}+"."{DIGIT}* { printf("%s", yytext); } if|else|for|while|do|break|switch|case|function|return|new|delete|try|throw|catch|class|public|private { printf("%s", yytext); } {ID} printf("%s", yytext); {STRQ}|{STRDQ} printf("%s", yytext); "."|"+"|"-"|"*"|"/"|"="|"!"|">"|"<"|"!=="|"==="|">="|"<="|"++"|"--"|"=>" printf("%s", yytext); [;(){}:? \t\n]+ printf("%s", yytext); /* echo the rest */ . printf( "Unrecognized character: %s\n", yytext ); %% int yywrap() { return 1; } int main(int argc, const char* argv[]) { ++argv, --argc; /* skip over program name */ if ( argc > 0 ) yyin = fopen( argv[0], "r" ); else yyin = stdin; puts( "" "" "
" ""
);
yylex();
puts("");
return 0;
}