タグ

Programmingとcompilerに関するtyosuke2011のブックマーク (2)

  • 第10章 パーサ

    指針 パーサの構築 パーサのメインソースはparse.yである。*.yだからyaccの入力で、 ここからparse.cが生成される。 また他にはlex.cという思わせぶりな名前のファイルがあるのだが、スキャナ が入っているわけではない。これはgperfというツールが生成したファイルで、 予約語のハッシュテーブルが定義されている。その入力ファイルはkeywordsだ。 lex.cはparse.cに#includeして使われる。 中身について説明するのはその場にならないと難しいので後にまわそう。 まとめるとパーサの構築手順は図1のようになる。 Windowsで生きている人のために説明するとmvはファイルを移動する コマンドである。ccはもちろんCコンパイラでcppは Cのプリプロセッサだ。 図1: パーサの構築手順 parse.yの腑分け 続いてparse.yを眺めてみよう。 おおざっぱに言う

  • 第9章 速習yacc

    概要 パーサとスキャナ プログラム言語のパーサの書きかたは昔からしつこく研究されてきており、 かなりしっかりした定石がある。よほど変な(または曖昧な)文法でない 限り、定石にのっていけば解決できるものだ。 まず最底辺には文字列を単語(トークンとも言う)の列に切り出す部 分がある。これをスキャナ(scanner)とかレクサ(lexer)と言 う。日語で言うと字句解析器だが、言いにくいのでスキャナと呼ぼう。 スキャナというものが出てくる根底にはそもそも「単語の区切りには空白ある でしょ」という常識がある。そして実際にたいていのプログラミング 言語はそういう仕様になっている。そのほうが楽だからだ。 例えば古いFortranでは空白が意味を持たなかった。つまり空白を入れても 単語区切りとは限らないし、変数の途中で何の前触れもなく空白を挿入したり することもできた。ところが解析が恐ろしく面倒なもの

  • 1