/* bsp2b.y: bison-Parser fuer |w|_0 = |w|_1 mit eindeutiger Grammatik */ /* Teil 1: Deklarationen */ %{ #include int nr; int yylex(void); void yyerror (char const *); %} %% /* Teil 2: Angabe der Grammatik */ s: /* leeres Wort */ { nr++; $$=nr; printf("Knoten %d, Regel s-->epsilon\n",nr); } | '0' t '1' s { nr++; $$=nr; printf("Knoten %d, Regel s-->0t1s mit Nachfolgern %d,%d\n",nr,$2,$4); } | '1' r '0' s { nr++; $$=nr; printf("Knoten %d, Regel s-->1r0s mit Nachfolgern %d,%d\n",nr,$2,$4); } ; t: /* leeres Wort */ { nr++; $$=nr; printf("Knoten %d, Regel t-->epsilon\n",nr); } | '0' t '1' t { nr++; $$=nr; printf("Knoten %d, Regel t-->0t1t mit Nachfolgern %d,%d\n",nr,$2,$4); } ; r: /* leeres Wort */ { nr++; $$=nr; printf("Knoten %d, Regel r-->epsilon\n",nr); } | '1' r '0' r { nr++; $$=nr; printf("Knoten %d, Regel r-->1r0r mit Nachfolgern %d,%d\n",nr,$2,$4); } ; %% /* Teil 3: Prozeduren u. Hauptprogramm */ int yylex(void) { int c; c=getchar(); if ((c!='0') && (c!='1')) return 0; return c; } void yyerror(char const *s) { printf("Aufruf von yyerror\n"); } int main(void) { nr=0; return yyparse(); }