プログラミングと工作と

PythonとかPascalとかAVRマイコンとか、コンパイラつくったり電子工作なんかを楽しんでいるおっさんの記録

エラー関数を分割して、実際に動かしてみた

昨日の分割したエラー関数にちょっとした追加を行った。
エラーが出たら、プログラムを停止するように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$

完全に動いています!実験大成功!!