%{ #include using namespace std; #include "grafcet.h" using namespace Automate; #include "grammar.h" int yyparse (void); Grafcet *input_grafcet; %} ID [_a-zA-Z][-_a-zA-Z0-9]* NUM [-+]?[0-9]+ FLOAT [-+]?[0-9]*"."[0-9]* STRING \"[^\n"]\" %option noyywrap nounput %% "goto" return GOTO; "print" return PRINT; [-#+=.<>] return yytext[0]; {FLOAT} { yylval.fl = strtod (yytext, 0); return FLOAT; } {NUM} { yylval.num = strtol (yytext, 0, 0); return NUM; } {STRING} { yylval.s = new string (yytext + 1, yyleng - 2); return STRING; } "true" { yylval.boolean = true; return BOOL; } "false" { yylval.boolean = false; return BOOL; } [ \t\n]+ /* Rien à battre. */ . return ERR; %% Grafcet *parse_string (const char *s) { yy_scan_string (s); return yyparse () ? 0 : input_grafcet; } Grafcet *parse_file (const char *filename) { yyin = fopen (filename, "r"); if (!yyin) return 0; int r = yyparse (); fclose (yyin); return r ? 0 : input_grafcet; } // vim: ft=lex