W zadaniach poniżej stosujemy dla gramatyk notację używaną w programie 'bison': znaki w apostrofach (np. '+' ) oznaczają (jednoznakowe) symbole końcowe. Z lewej umieszczamy nazwę symbolu końcowego, zaś po dwukropku prawą stronę reguły. Jeśli danemu symbolowi odpowiada kilka reguł, to prawe strony oddzielamy znakiem '|'. Zestaw reguł dla danego symbolu kończymy średnikiem.
Mamy następującą gramatykę dla wyrażeń arytmetycznych (z symbolem początkowym E, symbolami końcowymi są '1', 'x', '+', -', '*', '(' i ')').
E : T | E '+' T ; T : F | T '*' F ; F : '-' P | P ; P : '(' E ')' | '1' | 'x' ;Znaleźć wyprowadzenie i narysować drzewa rozbioru dla następujących wyrażeń:
-x x+-x x+-(x) x*x+-(x+1)
S : S S | 'x'Jak wygląda język generowany przez tą gramatykę. Pokazać że gramatyka ta nie jest jednoznaczna zaś ilość drzew rozbioru rośnie wykładniczo z długością słowa (dokładnie jest to liczba Catalana: ((2*n-2)!)/(((n-1)!*(n-1)!)*n) ).
S : A T | T ; T : B U | U ; U : C V | V ; V : D W | W ; W : E X | X ; X : /* puste */ | 'x' ; E : 'x' 'x' ; D : E E ; C : D D ; B : C C ; A : B B ;