エラー関数を分割して、実際に動かしてみた
昨日の分割したエラー関数にちょっとした追加を行った。
エラーが出たら、プログラムを停止するようにsysのインポートを行い
sys.exit()を追加した。
実は、最初プログラムの止め方がわからなくて、僕の持っているPython本3冊を調べてもわからなかった。しょうが無いのでgoogle先生に聞いたら sys.exit()を使えば良いことがあっという間にわかってびっくりした。さすがです。
勉強するにはまとまっている本のほうがいいと思うのですが、検索や調べ物は圧倒的にネットの方が早くて広くて便利ですね。
これで、エラー関数が呼ばれると、そこでエラー表示を行って解析をストップすることが出来るようになった。
#!/usr/bin/python
# coding: utf-8
import sys
class err:
def error(self, er):
if er == 1:
e = u" 突然ファイルの終端になっています"
elif er == 2:
e = u" }はトークンの始まりには出来ません"
elif er == 3:
e = u" 誤った記号が使用されています"
elif er == 4:
e = u" 予約語が変数名に使われてるよ!"
elif er == 5:
e = u" ここは','か':'がくるところでは?"
elif er == 6:
e = u" ':'コロンが抜けてませんか?"
elif er == 7:
e = u" 型名が間違ってませんか?"
elif er == 8:
e = u" ';'セミコロンが抜けていませんか?"
elif er == 9:
e = u" ここは'begin'か非キーワードのくるところ!"
elif er == 10:
e = u" 予約語が定数名に使われてるよ!"
elif er == 11:
e = u" ここは、「=」がくるところでしょ?"
elif er == 12:
e = u" '='の右側がヘンですよ!"
elif er == 13:
e = u" '+','-'のあとには整数がくるはずですよ!"
elif er == 14:
e = u" ここは'var'か'begin'か非キーワードのくるところ!"
elif er == 15:
e = u" キーワード'begin'がないよ!"
elif er == 16:
e = u" キーワード'end'がないよ!"
elif er == 17:
e = u" ピリオド'.'がないよ!"
elif er == 18:
e = u" キーワード'const'がないよ!"
elif er == 19:
e = u" キーワード'var'がないよ!"
elif er == 20:
e = u" キーワード'program'がないよ!"
elif er == 21:
e = u" プログラム名がないよ!"
elif er == 22:
e = u" 'end.'の後になんか文があるよ!"
elif er == 4:
e = u" 予約語が変数名に使われてるよ!"
elif er == 4:
e = u" 予約語が変数名に使われてるよ!"
print('Error' + str(er) + e)
sys.exit('***プログラムを停止します***')
呼び出し側も修正を行い実行した結果が↓
~/PasAvr$ python parser0_1.py
program
test
;
const
yes
=
true
;
no
=
false
;
small
=
0
big
Error8 ';'セミコロンが抜けていませんか?
***プログラムを停止します***
~/PasAvr$
完全に動いています!実験大成功!!