%{ #include "gram.tab.h" // Exemple d'appel : echo("ValNum:"); // Exemple de resultat : [ValNum:100] void echoMsg(char * msg) { /* fprintf(stderr,"[%s%s]", msg, yytext); */ } void echo() { fprintf(stderr,"%s", yytext); } void putStringVal() { yylval.stringVal=malloc(yyleng + 1); if(yylval.stringVal == NULL) { perror("malloc failed"); exit(EXIT_FAILURE); } strcpy(yylval.stringVal, yytext); } %} CompOperator (<=|>=|==|<|>) ValNum ([0-9]+[.][0-9]*)|([.]?[0-9]+) Symbol [_]?[A-Za-z][-_A-Za-z0-9]* %% package | class | public | void | function { echoMsg("Keyword: "); putStringVal(); return KEYWORD;} if { echoMsg("Keyword: "); putStringVal(); return IF;} else { echoMsg("Keyword: "); putStringVal(); return ELSE;} this { echoMsg("Keyword: "); putStringVal(); return THIS;} private { echoMsg("Keyword: "); putStringVal(); return PRIVATE;} var { echoMsg("Keyword: "); putStringVal(); return VAR;} Number { echoMsg("Keyword: "); putStringVal(); return NUMBER;} {ValNum} { echoMsg("ValNum: "); putStringVal(); return NUM; } {Symbol} { echoMsg("Symbol: "); putStringVal(); return SYMBOL;} {CompOperator} { echoMsg("CompOp: "); putStringVal(); return COMPOP;} [+] | [-] | [*] | [/] { echoMsg("ArithOp"); putStringVal(); return yytext[0];} [{] | [}] | [(] | [)] | [:] | [,] | [;] { echoMsg("Delim"); putStringVal(); return yytext[0];} [.] | [=] { echoMsg(""); putStringVal(); return yytext[0];} [ ] echo(); \t|\n|\r echo(); . { fprintf(stderr,"[%s=%x!!!]", yytext, yytext[0]); return yytext[0];} %%