エラー処理の実験
今日は、ソースプログラムが間違っていた場合。
コンパイラは、ソースプログラム中に文法的・意味的な間違いを発見し、何らかのエラー処理をする必要があります。
間違いを自動的に修正したりするすごいヤツもいたりしますが、僕がつくるのはエラーを指摘して解析をストップするという至ってシンプルなもの。
ターゲットが小規模マイコンなので、巨大プログラムを作ることはありません。
「ただ止まる」だけで十分だと思います。
今回の文法解析器に、わざと間違えたソースを与えて、ちゃんと止まるか試してみました。
・その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 予約語が定数名に使われてるよ!
***大成功!***
こんな調子で、地道に動作確認をしていくのであった。