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.
204 ROZDZIA 6 • PISANIE PROGRAMU<br />
Majc strumie Token_stream, moemy zmodyfikowa funkcj expression() w taki sposób,<br />
eby niepotrzebne tokeny zapisywaa wanie w nim:<br />
double expression()<br />
{<br />
double left = term(); // Wczytuje skadnik i oblicza jego warto.<br />
Token t = ts.get(); // Pobiera nastpny token ze strumienia tokenów.<br />
while(true) {<br />
switch(t.kind) {<br />
case '+':<br />
left += term(); // Oblicza warto skadnika i wykonuje dodawanie.<br />
t = ts.get();<br />
break;<br />
case '–':<br />
left –= term(); // Oblicza warto skadnika i wykonuje odejmowanie.<br />
t = ts.get();<br />
break;<br />
default:<br />
ts.putback(t); // Wstawia token t z powrotem do strumienia tokenów.<br />
return left; // Jeli nie ma wicej znaków + lub –, zwraca odpowied.<br />
}<br />
}<br />
}<br />
Takie same zmiany musz zosta wprowadzone w funkcji term():<br />
double term()<br />
{<br />
double left = primary();<br />
Token t = ts.get(); // Pobiera nastpny token ze strumienia tokenów.<br />
}<br />
while(true) {<br />
switch (t.kind) {<br />
case '*':<br />
left *= primary();<br />
t = ts.get();<br />
break;<br />
case '/':<br />
{ double d = primary();<br />
if (d == 0) error("Dzielenie przez zero.");<br />
left /= d;<br />
t = ts.get();<br />
break;<br />
}<br />
default:<br />
ts.putback(t); // Wstawia token t z powrotem do strumienia tokenów.<br />
return left;<br />
}<br />
}<br />
W ostatniej funkcji naszego parsera, primary(), musimy tylko zmieni get_token() na ts.get().<br />
Funkcja ta uywa kadego wczytanego przez siebie tokenu.