16.07.2014 Views

Programowanie. Teoria i praktyka z wykorzystaniem C++

Programowanie. Teoria i praktyka z wykorzystaniem C++

Programowanie. Teoria i praktyka z wykorzystaniem C++

SHOW MORE
SHOW LESS

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 />

}

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

Saved successfully!

Ooh no, something went wrong!