%{ #include #include /* #include "gram.h" #include "proto.h" */ int R = 0; int np = 0; typedef union {char * str;} xxx ; #define YYSTYPE xxx #define YYSEMTYPE xxx %} %type NOUN VERB DET PREP PUNCT UNDEF PIND PPA ADJ ADV INTEIRO ABR PN %type TER SER INF %token NOUN VERB DET PREP PUNCT UNDEF PIND PPA ADJ ADV INTEIRO ABR PN %token TER SER INF %% AXI : SS [printf("-----------(%d)---\n",np); np = 0;] AXI | ; SS : S PUNCT [np ++;] { puts("\nS ");R=10; } | NP PUNCT [np ++;] { puts("NP "); R=11; } /* | ANYs PUNCT [return (np == 0);] {puts("ANYs? "); R=12; } */ ; ANYs : ANY ANYs | ANY ; ANY : NOUN | VERB | DET | PREP | UNDEF | PIND | PPA | ADJ | ADV | INTEIRO ; S : ppas NP ppas VP ppas ; ppas : | PP ppas | ADP ppas ; ADP : ADV {printf("%s/adv ",$1);} ; NP : NP1 | PIND {printf("%s/pind ",$1);} | DET {printf("%s/art ",$1);} o_int NP1 ; o_int : | INTEIRO {printf("%s/int ",$1);} ; NP1 : NOUN {printf("%s/n ",$1);} | c_PN | AP NP1 | NP1 AP | INF {printf("%s/inf ",$1);}oNP ; c_PN : ABR {printf("%s/abrv ",$1);} c_PN | PN {printf("%s/pn ",$1);} c_PN | UNDEF {printf("<<%s/CAT=pn>>/n", $1);} c_PN /* | UNDEF {printf("<<%s/CAT=pn>>/n", $1);} */ | PN {printf("%s/pn ",$1);} ; PP : PREP {printf("%s/prep ",$1);} NP ; VP : VERB {printf("%s/v ",$1);} oNP | SER {printf("%s/ser ",$1);} NP | SER {printf("%s/ser ",$1);} AP | TER {printf("%s/ter ",$1);} NP | TER {printf("%s/ter ",$1);} PPA {printf("%s/ppa ",$3);} oNP | SER {printf("%s/ser ",$1);} PPA {printf("%s/ppa ",$3);} oNP ; oNP : | NP ; AP : ADJ {printf("%s/adj ",$1);} ; %% FILE* yyin; extern int yydebug; #include "gramlex.c" int main(argc, argv) int argc; char *argv[]; { int result; yydebug = 1; yyin = stdin; yyinitialize(); do { result = yyparse(); printf("res= %d.\n",R);} while (R != 33); yyterminate(); return 0; } static void yyinit() {} static void yyerror(message) char* message; { fprintf(stderr, "EEERRRRRROOORRR%s\n", message); /*exit(1);*/ }