コンピューター理論、チョットデキルようになりたい

コンピュータサイエンスの学び直しです

学び直し45日目:10章 コンパイラ#1:構文解析(背景)

記録

構文解析が、トークナイザとパーサの2つの仕事に分かれていることを学んだ。

構文解析器のしくみ

構文解析器は、トークナイザとパーサから成る。トークナイザでプログラムを分解して、パーサでそれら要素をルール(文法)に照らし合わせて構文構造を理解する。

トークナイザ

ソースプログラム*1を、トーク*2にバラバラに分解するモジュール。この作業は、字句解析とも呼ばれているらしい。

パーサ

言語の文法ルールに基づいて、トークンをグループ分けしてプログラムの構造を理解するためのモジュール。

再帰的な構文解析のざっくり理解

トークンには終端要素と非終端要素がある。終端要素はプログラム中の "while", "if", ";", "{", "}" などの意味としての開始や区切りとなるようなトークンであり、そのほかの要素が非終端要素と呼ばれている。

構文解析のざっくりとした理解は、

  1. 終端要素があったら、次の要素を調べる。
  2. 次の要素が非終端要素だったら、その中の要素を調べる。
  3. その中の要素が非終端要素だったら、さらにその中を調べる。
  4. さらにその中の要素が非終端要素だったら、(以下略)を終端要素に出くわすまでつづける。
  5. 終端要素に出くわしたら、そのグループはおしまい。はじめと終わりの終端要素で挟まれているグループの完成。
  6. 次のグループ調査へ (1 へ戻る)。

みたいなことだと思う。再帰的に構文ルールと照らし合わせて構文解析を繰り返している。

*1:ここでは、コンパイラへ入力されるプログラムのこと

*2:意味を持つ最小単位