ぱたへね!

はてなダイアリーはrustの色分けができないのでこっちに来た

Writing Compilers and Interpreters: A Software Engineering Approach 3rd Edition その4

2章まで終了。
この本の面白いところは、まずはソースコードを入力して、トーカナイザーとパーサーとコードジェネレータを通すフレームワークを先に作る所です。

2章が終わった時点でできるのは、このようなPascalのコードを読み込んで、行番号つけて表示するだけ。

PROGRAM hello (output);

{Write 'Hello, world.' ten times.}

VAR
    i : integer;

BEGIN {hello}
    FOR i := 1 TO 10 DO BEGIN
        writeln('Hello, world.');
    END;
END {hello}.

実行結果がこう。

  1 PROGRAM hello (output);
  2 
  3 {Write 'Hello, world.' ten times.}
  4 
  5 VAR
  6     i : integer;
  7 
  8 BEGIN {hello}
  9     FOR i := 1 TO 10 DO BEGIN
 10         writeln('Hello, world.');
 11     END;
 12 END {hello}.
12 source lines
0 syntax errors
0 instructions generated

何にもしてないけど、パースが終わった時点でパーサーのサマリーを出力し、これまた何もしないコード生成が終わるとコードジェネレータのサマリーを出しています。