%{ #include #include #include static char buff[10000]; static int cont = 0; void tshow(char * s); char * tproj(char * s, char * is); char * tselect(char * s, char * is); char * tjoin(char * s, char * is); char * tcp(char * s1, char * s2); void tedit(char * s1); %} %token T Cond Ids %left '*' %left '[' %left '{' %type T Cond Ids Exp %union { char * string; } %% C : C Exp '\n' { tshow($2); } | C Exp '?' '\n' { tedit($2); } | C '\n' | C '.' { return 1; } | C error '\n' { yyerrok; } | ; Exp : T { $$ = $1; } | Exp '[' Ids ']' { $$ = tproj($1, $3); } | '(' Exp ')' { $$ = $2; } | Exp '*' Exp { $$ = tjoin($1,$3); } | Exp '{' Cond '}' { $$ = tselect($1, $3); } | T '=' Exp { $$ = tcp($3,$1); } ; %% int main() { yyparse(); return 0; } int yyerror(char * s) { erro(s); return 1; } void tshow(char * s) { sprintf(buff, "cat %s", s); system(buff); } void tedit(char * s) { sprintf(buff, "vim %s", s); system(buff); } char * tproj(char * s, char * is) { char * f; // printf("Project\n"); sprintf(buff, "_aux%d", cont++); f = strdup(buff); sprintf(buff, "tabproj '%s' %s > %s", is, s, f); system(buff); return f; } char * tselect(char * s, char * is) { char * f; // printf("SELECT\n"); sprintf(buff, "_aux%d", cont++); f = strdup(buff); sprintf(buff, "tabselect '%s' %s > %s", is, s, f); system(buff); return f; } char * tjoin(char * s1, char * s2) { char * f; // printf("join\n"); sprintf(buff, "_aux%d", cont++); f = strdup(buff); sprintf(buff, "tabjoin '%s' '%s' > %s", s1, s2, f); system(buff); return f; } char * tcp(char * s1, char * s2) { char * f; sprintf(buff, "cp '%s' '%s'",s1,s2); system(buff); return s2; }