プログラミングと工作と

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

エラー処理の実験

今日は、ソースプログラムが間違っていた場合。
コンパイラは、ソースプログラム中に文法的・意味的な間違いを発見し、何らかのエラー処理をする必要があります。
間違いを自動的に修正したりするすごいヤツもいたりしますが、僕がつくるのはエラーを指摘して解析をストップするという至ってシンプルなもの。
ターゲットが小規模マイコンなので、巨大プログラムを作ることはありません。
「ただ止まる」だけで十分だと思います。

今回の文法解析器に、わざと間違えたソースを与えて、ちゃんと止まるか試してみました。

・その1

program test;
const
    yes = true;
    no = false;
    small = 0  # ←よくありがちな';'の書き忘れ
    big = 123456;
var
    id1 : integer;
    id2 : boolean;
    hen : integer;
    x, y, z : int;
begin
end.

実行結果↓
~/PasAvr$ python parser0.py
program
test
;
const
yes
=
true
;
no
=
false
;
small
=
0
big
Error8 ';'セミコロンが抜けていませんか?

***大成功!***

・その2

program test;
const
    end = true;# ←定数名に予約後を使っている
    no = false;
    small = 0;
    big = 123456;
var
    id1 : integer;
    id2 : boolean;
    hen : integer;
    x, y, z : int;
begin
end.

実行結果↓
~/PasAvr$ python parser0.py
program
test
;
const
end
Error10 予約語が定数名に使われてるよ!

***大成功!***


こんな調子で、地道に動作確認をしていくのであった。