bisonとflex
具体的なソースなしで分かったことだけをメモ。
まず処理の流れは
flexが生成したもの → bisonが生成したもの → それぞれの単語(?)についての自前処理
ということ?
と思ったら参考URLの一つにこんな文章が。
flex の主な使用方法の一つは、 yacc パーサジェネレータと共に使用することです。 yacc パーサは yylex() と言う名前のルーチンを呼び、次の入力トークンを見付けるものとしています。
yaccパーサいわゆるyyparse()がyylex()を呼ぶと書いてある。
でも処理の流れは上のような感じでいいのかどうかはまだ分からない。
flex
flexは字句解析/構文解析を行うもの(レキシカルアナライザ)。
具体的に言うとソースとか標準入力から入ってきたソースを、
トークン(字句)に分割するもの。
トークンに分割することで、それぞれのトークンに応じた処理を行える。
でも実際の言語(Perlとか)などでは字句解析を行った後、
構文解析というものを行う。
これは構文木というものを構築する作業なんだけど
これを行うと楽らしい。
で、この構文解析を行う処理(パーサ)を自動生成してくれるのがbisonだったり
するんだけどbisonについては後述。
bison
さっきも言ったように、bisonは構文解析を行う処理(パーサ)
を自動生成するプログラム。
PerlやRubyなんかではflex(lex)は使われなくてもbisonは使われているらしい。
(ここで飽きる)(随時追加予定)
参考URL
検索して上の方に出てきた 分かりやすい
http://kmaebashi.com/programmer/devlang/yacclex.html
http://kmaebashi.com/programmer/c_yota/calc.html
Tips、リンク集など
http://www.timeparadocs.net/bab/flex_bison/flex_bison.htm
なんだか固そうだけど詳しい
http://www.geocities.co.jp/SiliconValley-Oakland/3432/man/bison/bison-ja.html
http://www.geocities.co.jp/SiliconValley-Oakland/3432/man/flex/flex-ja.html
固いけど分かりやすい
http://www.linux.or.jp/JM/html/flex/man1/flex.1.html
http://www.linux.or.jp/JM/html/byacc/man1/yacc.1.html