Programowanie. Teoria i praktyka z wykorzystaniem C++

Programowanie. Teoria i praktyka z wykorzystaniem C++ Programowanie. Teoria i praktyka z wykorzystaniem C++

pdf.helion.pl
from pdf.helion.pl More from this publisher
16.07.2014 Views

6.4. GRAMATYKI 189 Term "*" Primary // mnoenie Term "/" Primary // dzielenie Term "%" Primary // reszta z dzielenia (modulo) Primary: Number "(" Expression ")" // grupowanie Number: floating-point-literal Jest to zestaw prostych zasad. Ostatni naley czyta nastpujco: „Number (liczba) to litera zmiennoprzecinkowy”. Natomiast tre przedostatniej jest taka: „Primary (czynnik) jest liczb lub znakiem '(', po którym jest wyraenie i znak ')'”. Reguy dla Expression (wyraenia) i Term (skadnika) s podobne. Kada z nich jest zdefiniowana z uwzgldnieniem jednej z regu, które znajduj si dalej. Jak pamitamy z podrozdziau 6.3.2, nasze tokeny — zgodnie z definicj w jzyku C++ — to: litera zmiennoprzecinkowy (zgodny z definicj w jzyku C++, np. 3.14, 0.274e2 lub 42); +, -, *, / oraz % — operatory; ( i ) — nawiasy. Uywajc gramatyki i tokenów, zrobilimy bardzo duy pojciowy skok w stosunku do naszego pocztkowego pseudokodu. Tego rodzaju postpy chcielibymy robi zawsze, ale rzadko si to udaje bez pomocy. Do tego wanie su dowiadczenie, literatura i mentorzy. Na pierwszy rzut oka gramatyka ta wydaje si bezsensowna. Czsto tak jest z notacj techniczn. Pamitaj jednak, e jest to ogólna i elegancka (co w kocu docenisz) notacja do opisu czego, co potrafisz robi przynajmniej od czasów szkoy podstawowej. Nie masz problemu z obliczeniem wyraenia 1-2*3 albo 1+2-3 lub 3*2+4/2. Potrafisz jednak wyjani, jak to robisz? Umiesz to tak wyjani, aby zrozumia to nawet kto, kto nigdy nie mia stycznoci z konwencjonaln arytmetyk? Czy Twoje wyjanienia bd miay zastosowanie dla wszystkich kombinacji operatorów i argumentów? Aby wystarczajco szczegóowo i precyzyjnie objani co komputerowi, potrzebna jest odpowiednia notacja — a gramatyka naley do najlepszych konwencjonalnych narzdzi do jej tworzenia. Jak czyta si gramatyk? Majc pewne dane wejciowe, zaczyna si od pierwszej reguy, Expression (wyraenie), i przeszukuje kolejne, znajdujc te, które pasuj do tokenów w miar ich wczytywania. Wczytywanie strumienia tokenów zgodnie z zasadami gramatyki nazywa si parsowaniem (analiz skadniow), a program, który to robi, nazywamy parserem (ang. parser) lub analizatorem skadni (ang. syntax analyzer). Nasz analizator odczytuje tokeny od lewej do prawej, dokadnie w takiej kolejnoci, jak je wpisujemy i czytamy. Wypróbujemy jaki bardzo prosty przykad: czy 2 jest wyraeniem? 1. Wyraenie (Expression) musi by skadnikiem (Term) lub koczy si skadnikiem. Skadnik musi by czynnikiem (Primary) lub koczy si czynnikiem. Ten czynnik musi zaczyna si znakiem ( lub by liczb (Number). Oczywicie 2 nie jest znakiem (, tylko literaem zmiennoprzecinkowym, a wic liczb, która jest czynnikiem.

190 ROZDZIA 6 • PISANIE PROGRAMU 2. Przed tym czynnikiem (liczba 2) nie ma znaku /, * ani %, a wic jest to kompletny skadnik (a nie zakoczenie wyraenia z operatorem /, * lub %). 3. Przed skadnikiem tym (Primary 2) nie ma znaku + ani -, a wic jest to pene wyraenie (Expression), a nie zakoczenie wyraenia z operatorem + lub -. W zwizku z tym zgodnie z nasz gramatyk 2 jest wyraeniem. Przegld gramatyki mona przedstawi graficznie: Na rysunku zostaa przedstawiona cieka, któr przemierzylimy przez definicje. Odwracajc nasze rozumowanie, moemy powiedzie, e 2 jest wyraeniem, poniewa jest literaem zmiennoprzecinkowym, który jest liczb, liczba jest czynnikiem, czynnik jest skadnikiem, a skadnik wyraeniem. Spróbujmy czego bardziej skomplikowanego. Czy 2+3 jest wyraeniem? Naturalnie znaczna cz rozumowania bdzie taka sam jak dla 2: 1. Wyraenie musi by skadnikiem lub mie go na kocu. Skadnik musi by czynnikiem lub koczy si czynnikiem, który z kolei musi zaczyna si od znaku ( lub by liczb. Oczywicie 2 nie jest znakiem (, ale jest literaem zmiennoprzecinkowym, który jest liczb, ta z kolei jest czynnikiem. 2. Przed tym czynnikiem (liczba 2) nie ma znaku /, * ani %, a wic jest to kompletny skadnik (a nie zakoczenie wyraenia z operatorem /, * lub %). 3. Za skadnikiem tym (Primary 2) jest znak +, a wic jest to koniec pierwszej czci wyraenia i musimy poszuka skadnika za tym znakiem. Dokadnie w taki sam sposób, jak w przypadku 2 dowiadujemy si, e 3 jest skadnikiem. Poniewa za 3 nie ma znaku + ani -, uznajemy, e jest to peny skadnik, a nie pierwsza cz wyraenia z operatorem + lub -. W zwizku z tym 2+3 spenia zasad Expression+Term, a wic jest wyraeniem.

190 ROZDZIA 6 • PISANIE PROGRAMU<br />

2. Przed tym czynnikiem (liczba 2) nie ma znaku /, * ani %, a wic jest to kompletny<br />

skadnik (a nie zakoczenie wyraenia z operatorem /, * lub %).<br />

3. Przed skadnikiem tym (Primary 2) nie ma znaku + ani -, a wic jest to pene wyraenie<br />

(Expression), a nie zakoczenie wyraenia z operatorem + lub -.<br />

W zwizku z tym zgodnie z nasz gramatyk 2 jest wyraeniem. Przegld gramatyki mona<br />

przedstawi graficznie:<br />

Na rysunku zostaa przedstawiona cieka, któr przemierzylimy przez definicje. Odwracajc<br />

nasze rozumowanie, moemy powiedzie, e 2 jest wyraeniem, poniewa jest literaem zmiennoprzecinkowym,<br />

który jest liczb, liczba jest czynnikiem, czynnik jest skadnikiem, a skadnik<br />

wyraeniem.<br />

Spróbujmy czego bardziej skomplikowanego. Czy 2+3 jest wyraeniem? Naturalnie<br />

znaczna cz rozumowania bdzie taka sam jak dla 2:<br />

1. Wyraenie musi by skadnikiem lub mie go na kocu. Skadnik musi by czynnikiem<br />

lub koczy si czynnikiem, który z kolei musi zaczyna si od znaku ( lub by liczb.<br />

Oczywicie 2 nie jest znakiem (, ale jest literaem zmiennoprzecinkowym, który jest<br />

liczb, ta z kolei jest czynnikiem.<br />

2. Przed tym czynnikiem (liczba 2) nie ma znaku /, * ani %, a wic jest to kompletny<br />

skadnik (a nie zakoczenie wyraenia z operatorem /, * lub %).<br />

3. Za skadnikiem tym (Primary 2) jest znak +, a wic jest to koniec pierwszej czci wyraenia<br />

i musimy poszuka skadnika za tym znakiem. Dokadnie w taki sam sposób,<br />

jak w przypadku 2 dowiadujemy si, e 3 jest skadnikiem. Poniewa za 3 nie ma znaku +<br />

ani -, uznajemy, e jest to peny skadnik, a nie pierwsza cz wyraenia z operatorem +<br />

lub -. W zwizku z tym 2+3 spenia zasad Expression+Term, a wic jest wyraeniem.

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

Saved successfully!

Ooh no, something went wrong!