Programowanie. Teoria i praktyka z wykorzystaniem C++
Programowanie. Teoria i praktyka z wykorzystaniem C++ Programowanie. Teoria i praktyka z wykorzystaniem C++
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.
- Page 1 and 2: Programowanie. Teoria i praktyka z
- Page 3 and 4: 4 SPIS TRECI Rozdzia 1. Komputery,
- Page 5 and 6: 6 SPIS TRECI Rozdzia 6. Pisanie pro
- Page 7 and 8: 8 SPIS TRECI Cz II Wejcie i wyjcie
- Page 9 and 10: 10 SPIS TRECI 14.2. Klasa Shape 448
- Page 11 and 12: 12 SPIS TRECI 18.5.3. Inicjowanie t
- Page 13 and 14: 14 SPIS TRECI 22.2. Krótka histori
- Page 15 and 16: 16 SPIS TRECI 26.3.3. Algorytmy i n
- Page 17 and 18: 18 SPIS TRECI Dodatek D Instalowani
- Page 19 and 20: 176 ROZDZIA 6 • PISANIE PROGRAMU
- Page 21 and 22: 178 ROZDZIA 6 • PISANIE PROGRAMU
- Page 23 and 24: 180 ROZDZIA 6 • PISANIE PROGRAMU
- Page 25 and 26: 182 ROZDZIA 6 • PISANIE PROGRAMU
- Page 27 and 28: 184 ROZDZIA 6 • PISANIE PROGRAMU
- Page 29 and 30: 186 ROZDZIA 6 • PISANIE PROGRAMU
- Page 31: 188 ROZDZIA 6 • PISANIE PROGRAMU
- Page 35 and 36: 192 ROZDZIA 6 • PISANIE PROGRAMU
- Page 37 and 38: 194 ROZDZIA 6 • PISANIE PROGRAMU
- Page 39 and 40: 196 ROZDZIA 6 • PISANIE PROGRAMU
- Page 41 and 42: 198 ROZDZIA 6 • PISANIE PROGRAMU
- Page 43 and 44: 200 ROZDZIA 6 • PISANIE PROGRAMU
- Page 45 and 46: 202 ROZDZIA 6 • PISANIE PROGRAMU
- Page 47 and 48: 204 ROZDZIA 6 • PISANIE PROGRAMU
- Page 49 and 50: 206 ROZDZIA 6 • PISANIE PROGRAMU
- Page 51 and 52: 208 ROZDZIA 6 • PISANIE PROGRAMU
- Page 53 and 54: 210 ROZDZIA 6 • PISANIE PROGRAMU
- Page 55 and 56: w i c z e n i a 212 ROZDZIA 6 • P
- Page 57 and 58: 214 ROZDZIA 6 • PISANIE PROGRAMU
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.