Gramatykę bezkontekstową nazywamy regularną jeśli każda prawa strona reguły zawiera co najwyżej jeden symbol pomocniczy i ten symbol występuje na końcu, np:
S : 'x' S | 'y' 'z' 't' S | 'a' ;
Symbolami rachunku zdań są zmienne (wszystkie zmienne są reprezentowane przez pojadynczy symbol), negacja, iloczyn, suma, implikacja i nawiasy. Negacja ma najwyższy priorytet, następnie iloczyn, potem suma. Implikacja ma najniższy priorytet. Iloczyn i suma są łaczne. Dla uniknięcia nieporozumień przyjmiemy że implikacja jest niełączliwa (tzn. wymaga jawnych nawiasów). Napisać gramatykę akceptującą poprawne składniowo zdania rachunku zdań (nie interesuje nas w tej chwili ich wartość logiczna).
Dla poniższej gramatyki wyznaczyć symbole wyprowadzające słowo puste. Symbolami końcowymi są ARRAY, CONST, ID, LICZBA, OF, TYPE i znaki pojawiające się w gramatyce.
deklaracje : stale typy ; stale : stale ';' stala | /* puste */ ; stala : CONST ID '=' LICZBA ; typy : typy typ | /* puste */ ; typ : TYPE ID = typ1 ; typ1 : ID | array '[' LICZBA ']' OF typ1 ;
Wyznaczyć zbiory `FIRST' i 'FOLLOW' dla reguł poniższej gramatyki (symbolem początkowym jest `S').
S : T 'x' ; T : A | B ; A : 'a' | /* puste */ ; B : 'b' | /* puste */ ;Czy ta gramatyka jest LL(1). Jaki problem ma analizator syntaktyczny?
S : B ';' ; B : 'b' I2 'e' ; I2 : /* puste */ | I2 I ';' I : 't' X | 'v' X | 'x' '=' E | B | 'i' C 'd' I2 'e' | 'i' C 'd' I2 'o' I2 'e' | 'w' C 'd' I2 'e' ; X : 'x' | 'x' ',' X ; E : 'x' | 'x' '+' E ; C : E '=' EPrzerobić ją zachowując język, i wprowadzając możliwie małe zmiany, tak by można było użyć metodę LL(1). Wskazówka: Użyć metodę motację EBNF lub diagramy syntaktyczne.
Komentarz1: Dla skrócenia rachunków używam tylko jednoznakowych symboli końcowych, lecz można sobie wyobrażać że 'x' to dowolny identyfikator, 'b', 'd', 'e', 'i', 'o', 't', 'v' i 'w' to słowa kluczowe ("begin", "do", "end", "if", "otherwise", "type", "var" i "while" odpowiednio). Przerobienie tego na porządny język programowania pozostawiam Państwa wyobraźni...
Komentarz2: Reguły dla średnika są tak dobrane by sama instrukcja nie zawieała średnika, ale po każdej musi się pojawić dokładnie jeden średnik.