前回はプログラミング言語を作成するための環境を構築しました。
gccなんかはC言語のコンパイラなんだなと分かりますが、じゃあyaccとlexって何?ってことになります。
ってことで、今回はyaccとlexについて基礎知識を身に付けていこうと思います。
※前回はyacc&lexの代わりに、bison&flexをインストールしましたが、同じものだと思ってもらっていいです。
僕のプロフィールはこちら
プログラミング言語の解析手順
yaccとlexの説明をする前に、そもそもプログラミング言語ってどういう風に解析されるのかを整理します。
プログラミング言語は主に以下の手順で解析されます。
①字句解析
②構文解析
③意味解析
※以降、ソースや画像は以下のサイトから拝借させていただきます。
「http://kmaebashi.com/programmer/devlang/yacclex.html」
1.字句解析
字句解析とは、プログラムをトークンと言う単位に分割する処理のことです。
例えば、以下のソースコードがあるとします。
1 2 3 4 5 |
if (a == 10) { printf("hoge\n"); } else { printf("piyo\n"); } |
これを字句解析するとこうなります。
2.構文解析
構文解析とは、先ほどの字句解析を元に解析木を構築する処理のことです。
3.意味解析
構文解析を元に、型などの意味的解釈を行う処理です。
このフェーズで型などに不正があればエラーとなるわけですが、当然型なし言語であればチェックはされないことになります。
で、yaccとlexって何や?
lexとは、字句解析を行なうプログラムを自動で生成してくれるものです。
yaccとは、構文解析を行なうプログラムを自動で生成してくれるものです。
字句解析を行なうプログラムのことを「レキシカルアナライザ」と呼びます。
構文解析を行なうプログラムのことを「パーサ」と呼びます。
lex | 字句解析を行なうプログラム(レキシカルアナライザ)を自動で生成してくれるもの。 |
---|---|
yacc | 構文解析を行なうプログラム(パーサ)を自動で生成してくれるもの。 |
おすすめ本
これおすすめやで。
まとめ
とりあえずyaccとlexのことが分からないと先に進めないので、今回はこれだけ。
次はyaccやlexを使って電卓プログラムを作ってみます。
さいなら。