Humanity

Edit the world by your favorite way

bisonとflex

具体的なソースなしで分かったことだけをメモ。


まず処理の流れは

flexが生成したもの → bisonが生成したもの → それぞれの単語(?)についての自前処理

ということ?

と思ったら参考URLの一つにこんな文章が。

flex の主な使用方法の一つは、 yacc パーサジェネレータと共に使用することです。 yacc パーサは yylex() と言う名前のルーチンを呼び、次の入力トークンを見付けるものとしています。

yaccパーサいわゆるyyparse()がyylex()を呼ぶと書いてある。
でも処理の流れは上のような感じでいいのかどうかはまだ分からない。




flex

flex字句解析/構文解析を行うもの(レキシカルアナライザ)。
具体的に言うとソースとか標準入力から入ってきたソースを、
トークン(字句)に分割するもの。

トークンに分割することで、それぞれのトークンに応じた処理を行える。
でも実際の言語(Perlとか)などでは字句解析を行った後、
構文解析というものを行う。
これは構文木というものを構築する作業なんだけど
これを行うと楽らしい。

で、この構文解析を行う処理(パーサ)を自動生成してくれるのがbisonだったり
するんだけどbisonについては後述。



bison

さっきも言ったように、bisonは構文解析を行う処理パーサ
を自動生成するプログラム。

PerlRubyなんかではflex(lex)は使われなくてもbisonは使われているらしい。



(ここで飽きる)(随時追加予定)