diff options
Diffstat (limited to 'expr.l')
-rw-r--r-- | expr.l | 50 |
1 files changed, 28 insertions, 22 deletions
@@ -1,34 +1,42 @@ %{ -#define _XOPEN_SOURCE 2 +#define _XOPEN_SOURCE 700 #include <locale.h> #include <string.h> #include <stdio.h> #include <unistd.h> + #include "expr.h" + +#include "y.tab.h" + +extern int yyparse(void); + %} DIGIT [0-9] %% -"|" puts("or"); -"&" puts("and"); -"=" puts("equal"); -">" puts("greater"); -">=" puts("greater or equal"); -"<" puts("less"); -"<=" puts("less or equal"); -"!=" puts("not equal"); -"+" puts("plus"); -"-" puts("minus"); -"*" puts("times"); -"/" puts("divide"); -"%" puts("remainder"); -"(" puts("lparen"); -")" puts("rparen"); -{DIGIT}+ printf("number %s\n", yytext); --{DIGIT}+ printf("negative %s\n", yytext); -.+ printf("string '%s'\n", yytext); +"|" return OR; +"&" return AND; +"=" return COMPARISON; +">" return COMPARISON; +">=" return COMPARISON; +"<" return COMPARISON; +"<=" return COMPARISON; +"!=" return COMPARISON; +"+" return '+'; +"-" return '-';; +"*" return MULTIPLICATION; +"/" return MULTIPLICATION; +"%" return MULTIPLICATION; +"(" return '('; +")" return ')'; +":" return MATCH; +{DIGIT}+ { yylval.u.i = atoi(yytext); return yylval.type = INTEGER; } +-{DIGIT}+ { yylval.u.i = atoi(yytext); return yylval.type = INTEGER; } +.+ { yylval.u.s = strdup(yytext); return yylval.type = STRING; } +\n ; %% @@ -58,11 +66,9 @@ int main(int argc, char *argv[]) for (int i = optind; i < argc; i++) { fprintf(mem, "%s\n", argv[i]); } - fprintf(mem, "\n"); rewind(mem); yyin = mem; - - return yylex(); + return yyparse(); } |