Treść książki

Przejdź do opcji czytnikaPrzejdź do nawigacjiPrzejdź do informacjiPrzejdź do stopki
54
ROZDZIAŁ2.PROSTYTRANSLATORSTEROWANYSKŁADNIĄ
Następnieutworzymydwanieterminaleexpr(wyrażenie)orazterm(składnik)
dladwóchpoziomówpriorytetóworazdodatkowynieterminalfactor(czyn-
nik)dlagenerowaniapodstawowychjednostekwwyrażeniach.Podstawowymi
jednostkamiwyrażeńaktualniecyfry(digit)iwyrażenia(expr)wnawiasach.
factor
digit|(expr)
Terazrozważmydwuargumentoweoperatory
oraz
/
,któremająnajwyższy
priorytet.Ponieważoperatorytelewostronniełączne,produkcjedlanichbędą
analogicznedotychdlalist,którerównieżbyłylewostronniełączne.
term
|
|
term*factor
term/factor
factor
Podobnieexprgenerujelistęskładnikówoddzielanychoperatoramiaddytywnymi.
expr
|
|
expr+term
expr-term
term
Wynikowagramatykawyglądawięcnastępująco:
factor
term
expr
digit|(expr)
expr+term|expr-term|term
term*factor|term/factor|factor
Przytejgramatycewyrażeniejestlistąskładnikówoddzielanychznakami
+
lub
-
,składnikjestzaślistączynnikówrozdzielanychznakami
lub
/
.Za-
uważmy,żedowolnewyrażenieujętewnawiasyjestczynnikiem,zatemprzy
użyciunawiasówmożemybudowaćwyrażeniaodowolniegłębokimzagnieżdżeniu
(idowolniegłębokiedrzewawyprowadzeń).
Przykład2.7:
Słowakluczowepozwalająnamrozpoznawaćinstrukcje,gdyż
większośćinstrukcjizaczynasięodpewnegosłowakluczowegolubznakuspe-
cjalnego.Wyjątkiodtejregułyobejmująprzypisaniaorazwywołaniaprocedur.
Instrukcjezdefiniowaneprzez(niejednoznaczną)gramatykępokazanąnary-
sunku2.8poprawnewJavie.
Wpierwszejprodukcjidlastmtterminalnysymbol
id
reprezentujedowolny
identyfikator.Produkcjedlawyrażeńniepokazane.Instrukcjaprzypisania
wyspecyfikowanaprzezpierwsząprodukcjęjestpoprawnawJavie,choćJava
traktujeznak
=
jakooperatorprzypisania,którymożewystąpićwewnątrzwyra-
żenia.NaprzykładJavapozwalanakonstrukcję
a=b=c
,którejniedopuszcza
tagramatyka.
Nieterminalnysymbolstmtsgenerujepotencjalniepustąlistęinstrukcji.
Drugaprodukcjadlastmtsgenerujepustąlistę
ć
.Pierwszaprodukcjageneruje
potencjalniepustąlistęinstrukcji,poktórejnastępujeinstrukcja.