16.07.2014 Views

Programowanie. Teoria i praktyka z wykorzystaniem C++

Programowanie. Teoria i praktyka z wykorzystaniem C++

Programowanie. Teoria i praktyka z wykorzystaniem C++

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

6.4. GRAMATYKI 189<br />

Term "*" Primary // mnoenie<br />

Term "/" Primary // dzielenie<br />

Term "%" Primary // reszta z dzielenia (modulo)<br />

Primary:<br />

Number<br />

"(" Expression ")" // grupowanie<br />

Number:<br />

floating-point-literal<br />

Jest to zestaw prostych zasad. Ostatni naley czyta nastpujco: „Number (liczba) to litera<br />

zmiennoprzecinkowy”. Natomiast tre przedostatniej jest taka: „Primary (czynnik) jest liczb<br />

lub znakiem '(', po którym jest wyraenie i znak ')'”. Reguy dla Expression (wyraenia) i Term<br />

(skadnika) s podobne. Kada z nich jest zdefiniowana z uwzgldnieniem jednej z regu,<br />

które znajduj si dalej.<br />

Jak pamitamy z podrozdziau 6.3.2, nasze tokeny — zgodnie z definicj w jzyku <strong>C++</strong><br />

— to:<br />

litera zmiennoprzecinkowy (zgodny z definicj w jzyku <strong>C++</strong>, np. 3.14, 0.274e2<br />

lub 42);<br />

+, -, *, / oraz % — operatory;<br />

( i ) — nawiasy.<br />

Uywajc gramatyki i tokenów, zrobilimy bardzo duy pojciowy skok w stosunku do naszego<br />

pocztkowego pseudokodu. Tego rodzaju postpy chcielibymy robi zawsze, ale rzadko si<br />

to udaje bez pomocy. Do tego wanie su dowiadczenie, literatura i mentorzy.<br />

Na pierwszy rzut oka gramatyka ta wydaje si bezsensowna. Czsto tak jest z notacj<br />

techniczn. Pamitaj jednak, e jest to ogólna i elegancka (co w kocu docenisz) notacja do<br />

opisu czego, co potrafisz robi przynajmniej od czasów szkoy podstawowej. Nie masz problemu<br />

z obliczeniem wyraenia 1-2*3 albo 1+2-3 lub 3*2+4/2. Potrafisz jednak wyjani, jak<br />

to robisz? Umiesz to tak wyjani, aby zrozumia to nawet kto, kto nigdy nie mia stycznoci<br />

z konwencjonaln arytmetyk? Czy Twoje wyjanienia bd miay zastosowanie dla wszystkich<br />

kombinacji operatorów i argumentów? Aby wystarczajco szczegóowo i precyzyjnie<br />

objani co komputerowi, potrzebna jest odpowiednia notacja — a gramatyka naley do<br />

najlepszych konwencjonalnych narzdzi do jej tworzenia.<br />

Jak czyta si gramatyk? Majc pewne dane wejciowe, zaczyna si od pierwszej reguy,<br />

Expression (wyraenie), i przeszukuje kolejne, znajdujc te, które pasuj do tokenów w miar<br />

ich wczytywania. Wczytywanie strumienia tokenów zgodnie z zasadami gramatyki nazywa si<br />

parsowaniem (analiz skadniow), a program, który to robi, nazywamy parserem (ang.<br />

parser) lub analizatorem skadni (ang. syntax analyzer). Nasz analizator odczytuje tokeny od<br />

lewej do prawej, dokadnie w takiej kolejnoci, jak je wpisujemy i czytamy. Wypróbujemy jaki<br />

bardzo prosty przykad: czy 2 jest wyraeniem?<br />

1. Wyraenie (Expression) musi by skadnikiem (Term) lub koczy si skadnikiem.<br />

Skadnik musi by czynnikiem (Primary) lub koczy si czynnikiem. Ten czynnik<br />

musi zaczyna si znakiem ( lub by liczb (Number). Oczywicie 2 nie jest znakiem (,<br />

tylko literaem zmiennoprzecinkowym, a wic liczb, która jest czynnikiem.

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!