INFIX to POSTFIX (Fall, 2018)
1. ์คํ์ ๊ตฌํ
-student companion site ์ ํ์ด์ ์ฝ๋ array_stack ๊ณผ exception ์ด์ฉ 2. ArithExpEval ํด๋์ค ๊ตฌํ
-array_stack์์ __init__์ผ๋ก ์ฐ์ฐ์ ์คํ๊ณผ ํผ์ฐ์ฐ์ ์คํ์ ๋ง๋ค์ด ์ค๋ค. -์ฐ์ฐ์์ ์ฐ์ ์์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ํ์ด์ฌ์ ๋์ ๋๋ฆฌ ์ด์ฉํ๋ค.
Prec์์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ **๋ 40, ๊ฐ์ฅ ๋ฎ์ $์ 0์ ๋ถ์ฌํจ
-EvalExp()๋ ์
๋ ฅ๋ ํ ํฐ์ ๊ตฌ๋ถํ์ฌ ํผ์ฐ์ฐ์์ด๋ฉด push, ์ฐ์ฐ์์ด๋ฉด repeatOps()๋ฅผ ํ๊ณ ,
์คํ์ pushํ๋ ํจ์์ด๋ฉฐ, ํผ์ฐ์ฐ์ ์คํ์ top()์ ๋ฐํํ๋ค.
NUMBER๋ 0x01, OPERATOR๋ 0x02, prevToken์ ์ด๊ธฐ๊ฐ 0(0x00)์ ๊ฐ์ง๋ค. ์ด ๊ฐ๋ค์
ํผ์ฐ์ฐ์์ ์ฐ์ฐ์๋ฅผ ๊ตฌ๋ถํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
tokens๋ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ์์ string์ splitํ ์์๋ค์ด๋ค.
token์ ์ข
๋ฅ์ ๋ฐ๋ผ ๋ค์๊ณผ ๊ฐ์ด ๊ตฌ๋ถํ์ฌ ์ฒ๋ฆฌํ๋ค.
1) ํผ์ฐ์ฐ์์ธ ๊ฒฝ์ฐ(isNumber ์ด์ฉ)
-์ด์ ์ token์ด ๋ ํผ์ฐ์ฐ์์ธ ๊ฒฝ์ฐ, infix ํํ๊ฐ ์๋๋ฏ๋ก error ๋ฉ์์ง4๋ฅผ ์ถ๋ ฅ
ํ๊ณ ์ข
๋ฃํ๋ค.
-๊ทธ๋ ์ง ์์ ๊ฒฝ์ฐ prevToken์ ์ด ํผ์ฐ์ฐ์๋ก ์ค์ ํ๋ค,
- ํผ์ฐ์ฐ์ ์คํ์ push ํ๋ค.
2) ์ผ์ชฝ ๊ดํธ์ธ ๊ฒฝ์ฐ
- ์ฐ์ฐ์ ์คํ์ push ํ๋ค.
3) ์ค๋ฅธ์ชฝ ๊ดํธ์ธ ๊ฒฝ์ฐ
- ์ฐ์ฐ์ ์คํ์ด ๋น์ด์์ง ์๊ณ top์ด ์ผ์ชฝ๊ดํธ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ ๊ฒฝ์ฐ
์ผ์ชฝ๊ดํธ๋ฅผ ์ธ์๋ก ํ์ฌ repeatOps๋ฅผ ํธ์ถํ๋ค.
- ์ฐ์ฐ์ ์คํ์ด ๋น์ด์์ง ์๊ณ top์ด ์ผ์ชฝ๊ดํธ์ธ ๊ฒฝ์ฐ ์ฐ์ฐ์๋ฅผ popํ๋ค.
- ์ด ์กฐ๊ฑด์ ๋ง์กฑํ์ง ์์ ๊ฒฝ์ฐ ์ผ์ชฝ๊ดํธ๊ฐ ์์ผ๋ฏ๋ก, error ๋ฉ์์ง5์ ์ถ๋ ฅ ํ๋ค.
4) ์ ์๋์ง ์์ ์ฐ์ฐ์๋ฅผ ์
๋ ฅํ ๊ฒฝ์ฐ
- Prec ๋์
๋๋ฆฌ์ ์๋ ์ฐ์ฐ์๋ฅผ ์
๋ ฅํ์ผ๋ฏ๋ก, error ๋ฉ์์ง6์ ์ถ๋ ฅํ๋ค.
5) ์ฐ์ฐ์์ธ ๊ฒฝ์ฐ
-์ด์ ์ token์ด ๋ ์ฐ์ฐ์์ธ ๊ฒฝ์ฐ, infix ํํ๊ฐ ์๋๋ฏ๋ก error ๋ฉ์์ง4๋ฅผ ์ถ๋ ฅ
ํ๋ค.
- prevToken์ ์ด ์ฐ์ฐ์๋ก ์ค์ ํ๋ค.
- ์ฐ์ฐ์๋ฅผ ์ธ์๋ก ํ์ฌ repeatOps๋ฅผ ํธ์ถํ๋ค.
- ์ฐ์ฐ์ ์คํ์ push ํ๋ค.
-isNumber(self, s)๋ ์ ๋ ฅํ ํ ํฐ์ด ํผ์ฐ์ฐ์์ธ์ง ํ์ธํ๋ ํจ์์ด๋ค. ์ฐ์ ์ ์์ธ์ง ํ์ธํ ๊ณ , ์๋ ๊ฒฝ์ฐ ์ค์ ์ธ์ง ํ์ธํ๋ค. ์ ์ ๋๋ ์ค์์ธ ๊ฒฝ์ฐ True๋ฅผ ๋ฐํํ๊ณ , ์ค์๋ ์๋ ๊ฒฝ์ฐ False๋ฅผ ๋ฐํํ๋ค.
-number(self, s)๋ ํผ์ฐ์ฐ์๋ฅผ ์คํ์ push, pop ํ ๋ ์ฌ์ฉ๋๋ค. ์ ์ ๋๋ ์ค์๋ฅผ ๋ฐํํ ๋ค.
-eval(self, op, y, x)๋ ์ฐ์ฐ์์ ๋ฐ๋ผ ๋ค๋ฅธ ๊ณ์ฐ์ ํด์ฃผ๋ ํจ์์ด๋ค.
Prec ๋์
๋๋ฆฌ ์์ ์๋ ๋ชจ๋ ์ฐ์ฐ์ ํ ์ ์๊ฒ ํด์ค๋ค.
y op x ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค.
-doOp(self)๋ ๋ ๊ฐ์ ํผ์ฐ์ฐ์์ ํ๋์ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํด ์ฐ์ฐ์ ํ ๊ฒฐ๊ณผ๋ฅผ ํผ์ฐ์ฐ์ ์ค ํ์ push ํด์ฃผ๋ ํจ์์ด๋ค. ์ฌ๊ธฐ์ ์ด๋ค ์์ ๊ณ์ฐํ๋ ์ง ์ถ๋ ฅ์ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ์ ๋ค.
-expError(self, error)๋ ์ฌ๋ฌ ๊ฐ์ง error ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํ๊ณ ์ข ๋ฃํ๋ ํจ์์ด๋ค.
-repeatOps๋ ํผ์ฐ์ฐ์ ์คํ์ 2๊ฐ ์ด์์ ํผ์ฐ์ฐ์๊ฐ ์๊ณ , ์ฃผ์ด์ง ์ฐ์ฐ์์ top์ ์ฐ์ ์
์๋ณด๋ค ๋ฎ์ ๊ฒฝ์ฐ doOp๋ฅผ ๋ถ๋ฅธ๋ค.
์ฌ๊ธฐ์ ์ฌ๋ฌ ๊ฐ์ง error๋ฅผ ์ฐพ์ ๋ฉ์์ง๋ฅผ ์ถ๋ ฅํด ์ฃผ์ด์ผ ํ๋ค.
1) Opstk.top๊ณผ ์ฃผ์ด์ง ์ฐ์ฐ์ ๋ชจ๋ ์ผ์ชฝ ๊ดํธ์ธ ๊ฒฝ์ฐ, ์ฐ์ฐ์ ์คํ์ ์ผ์ชฝ ๊ดํธ๋ง ๋จ์์์ผ๋ฏ๋ก error ๋ฉ์์ง1์ ์ถ๋ ฅํ๋ค.
2) ํผ์ฐ์ฐ์ ์คํ์ 1๊ฐ์ ์๋ง ์กด์ฌํ๋ ๊ฒฝ์ฐ 2๊ฐ์ง ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
์ฒซ ๋ฒ์งธ๋ ํผ์ฐ์ฐ์๋ณด๋ค ์ฐ์ฐ์๊ฐ ๋ง์ ๊ฒฝ์ฐ์ด๋ค. ์ด๋ Opstk.top์ด ์ผ์ชฝ๊ดํธ๋ณด๋ค
์ฐ์ ์์๊ฐ ๋์ ๊ฒฝ์ฐ์ด๋ค. ์ด๋ error ๋ฉ์์ง2๋ฅผ ์ถ๋ ฅํ๋ค.
๋ ๋ฒ์งธ๋ ์ฃผ์ด์ง ์ฐ์ฐ์๊ฐ ์๋ ๊ฒฝ์ฐ($)์ด๋ฉฐ, ์ด๋ ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋ฎ์ ๊ณ์ฐ์
์ฌ์ฉ๋์ง ์๋ $๊ฐ ์
๋ ฅ๋์์ ๋ ์ด๋ฉฐ, ๋ง์ง๋ง์ ๋ปํ๋ค. ์ค๋ฅธ์ชฝ ๊ดํธ๊ฐ ์กด์ฌํ์ง
์์ ๊ฒฝ์ฐ ์ด๋ฌํ ์๋ฌ๊ฐ ๋ฐ์ํ๋ฏ๋ก error ๋ฉ์์ง1์ ์ถ๋ ฅํ๋ค.
3) ํผ์ฐ์ฐ์ ์คํ์ด ๋น ๊ฒฝ์ฐ ๋ ๊ฐ์ง ์๋ฌ๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ฒซ ๋ฒ์งธ, ์ฐ์ฐ์ ์คํ ๋ํ ๋น ์ ์์ผ๋ฏ๋ก, error ๋ฉ์์ง3์ ์ถ๋ ฅํ๋ค.
๋ ๋ฒ์งธ, ์ฐ์ฐ์ ์คํ์ ์ผ์ชฝ๊ดํธ๋ง ๋จ์์์ ์ ์์ผ๋ฏ๋ก, error ๋ฉ์์ง1์ ์ถ๋ ฅํ
๋ค.
3. ๊ฐ์ฒด ๋ง๋ค๊ธฐ
main ํจ์์์๋ ์ฐ์ ์ฐ์ฐ์์ ์
๋ ฅํ ๋์ ์ฃผ์์ฌํญ๊ณผ ์ฐ์ฐ์ ์
๋ ฅ ์๋ด๋ฌธ์ ์ถ๋ ฅํ๋ค.
์ฐ์ฐ์์ parsingํ๊ธฐ ์ํด ๋ณ๋์ ํจ์๋ฅผ ๊ตฌํํ์ง ์๊ณ python์ ํจ์ split์ ์ฌ์ฉํ๋ฏ
๋ก, ๋ฐ๋์ ๊ณต๋ฐฑ์ผ๋ก token๋ค์ ๋ถ๋ฆฌํด์ผํ๋ค.
Expression์๋ ์
๋ ฅํ ์ฐ์ฐ์์ ์ ์ฅํ๋ค.
myEval์ด๋ผ๋ ArithExpEval๊ฐ์ฒด๋ฅผ ๋ง๋ ๋ค.
์ฐ์ฐ์์ spilt ํ ๊ฒฐ๊ณผ๋ฅผ EvalExp๋ก ๋ณด๋ด๊ณ ์ด ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ๋ค.

Comments
Post a Comment