Programowanie. Teoria i praktyka z wykorzystaniem C++
Programowanie. Teoria i praktyka z wykorzystaniem C++
Programowanie. Teoria i praktyka z wykorzystaniem C++
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
194 ROZDZIA 6 • PISANIE PROGRAMU<br />
W rónych ksikach i rónych systemach parsowania stosuje si róne notacje i terminologi.<br />
Na przykad niektórzy nazywaj tokeny znakami terminalnymi, a zasady znakami nieterminalnymi<br />
lub produkcjami. My umieszczamy tokeny w podwójnych cudzysowach i zaczynamy<br />
od pierwszej zasady. Alternatywy znajduj si w osobnych wierszach, np.:<br />
List:<br />
"{" Sequence "}"<br />
Sequence:<br />
Element<br />
Element " ," Sequence<br />
Element:<br />
"A"<br />
"B"<br />
Zatem sekwencja (Sequence) jest elementem (Element) lub elementem i sekwencj oddzielonymi<br />
od siebie przecinkiem. Element to litera A lub B. Lista (List) to sekwencja w nawiasach<br />
klamrowych. Moemy generowa te listy (jak?):<br />
{ A }<br />
{ B }<br />
{ A,B }<br />
{A,A,A,A,B }<br />
Ponisze natomiast nie s listami (dlaczego?):<br />
{ }<br />
A<br />
{ A,A,A,A,B<br />
{A,A,C,A,B }<br />
{ A B C }<br />
{A,A,A,A,B, }<br />
Tej sekwencji nie nauczye si w przedszkolu ani nie zakodowae w mózgu, chocia nadal<br />
nie jest to nauka najwyszych lotów. W rozdziaach 7.4 i 7.8.1 objanimy sposoby wyraania<br />
zasad syntaktycznych za pomoc gramatyk.<br />
6.5. Zamiana gramatyki w kod<br />
Istnieje wiele sposobów na zmuszenie komputera do respektowania zasad gramatyki. Uyjemy<br />
najprostszego — napiszemy po jednej funkcji dla kadej zasady i wykorzystamy nasz typ<br />
Token do reprezentowania tokenów. Program implementujcy gramatyk czsto nazywa si<br />
parserem.<br />
6.5.1. Implementowanie zasad gramatyki<br />
Do zaimplementowania naszego kalkulatora potrzebujemy czterech funkcji — jednej do<br />
wczytywania tokenów i po jednej dla kadej zasady w gramatyce:<br />
get_token() // Wczytuje znaki i tworzy tokeny.<br />
// Wykorzystuje strumie cin.<br />
expression() // Obsuguje operatory + i –.