Programowanie. Teoria i praktyka z wykorzystaniem C++
Programowanie. Teoria i praktyka z wykorzystaniem C++
Programowanie. Teoria i praktyka z wykorzystaniem C++
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
200 ROZDZIA 6 • PISANIE PROGRAMU<br />
double term()<br />
{<br />
double left = primary();<br />
Token t = get_token();<br />
while(true) {<br />
switch (t.kind) {<br />
case '*':<br />
left *= primary();<br />
t = get_token();<br />
break;<br />
case '/':<br />
{ double d = primary();<br />
if (d == 0) error("Dzielenie przez zero.");<br />
left /= d;<br />
t = get_token();<br />
break;<br />
}<br />
default:<br />
return left;<br />
}<br />
}<br />
}<br />
Dlaczego umiecilimy instrukcje obsugujce operator / w bloku? Poniewa kompilator nalega.<br />
Jeli chcesz definiowa i inicjowa zmienne w instrukcjach switch, musisz umieci je<br />
w blokach.<br />
6.5.4. Podstawowe elementy wyrae<br />
Zasada gramatyczna definiujca podstawowe czynniki wyrae równie jest prosta:<br />
Primary:<br />
Number<br />
'(' Expression ')'<br />
Kod sucy do jej implementacji jest nieco zagmatwany, poniewa jest tu wicej okazji do<br />
popenienia bdu skadni:<br />
double primary()<br />
{<br />
Token t = get_token();<br />
switch (t.kind) {<br />
case '(': // Obsuga reguy '(' expression ')'.<br />
{ double d = expression();<br />
t = get_token();<br />
if (t.kind != ')') error("Oczekiwano ')'.");<br />
return d;<br />
}<br />
case '8':<br />
// Za pomoc znaku '8' reprezentujemy liczby.<br />
return t.value; // Zwraca warto liczby.<br />
default:<br />
error("Oczekwiano czynnika.");<br />
}<br />
}