タグ

lexに関するwablogのブックマーク (2)

  • プログラミング言語を作る yaccとlex

    yacc/lexとは Cでプログラミング言語の処理系を実装するのであれば、 多くの場合、yaccとlexというツールを使います。 実のところ、Cとyacc/lexで簡単なプログラミング言語を作る、というのは、 以前、「C言語ヨタ話 」で書いた「 電卓を作ってみよう」 の焼き直しになります。yaccとlexの説明もそちらに簡単に書いたので、 そちらを見てください――と言いたいところですが、 まあここでも軽く説明します。 内容的には重複、というかコピペしている部分もありますが。 プログラミング言語の処理系は、通常、以下のような手順を取ります。 字句解析 ソースプログラムを、「字句(トークン)」の並びに分割する処理です。 構文解析 トークンの並びから、解析木を構築する処理です。 この後、Cなどの機械語を吐くコンパイラや Javaのようなバイトコードを吐くコンパイラなら、 「コード生成」という処理

  • 字句解析

    つまり、字句解析関数は、getc()、fgets()、rand()と同じように、呼び出すたびに次の値を返すようなタイプの関数だということになります。一種のイテレータだと言ってもいいかもしれません。 次に、字句解析関数が返す値は何でしょうか?もちろん、文字列でも良いのですが、通常はトークンの種類を示す整数値を返します。コンピュータにとっては整数値の方が高速に扱えるし、メモリ管理なども楽だからです。yaccを使う場合、字句解析関数は整数値を返すように定められています。 どんな整数値を使うかは、基的には任意で、区別がつきさえすれば可です。しかし、一般的には、一文字のトークン(加算演算子など)は、その文字のアスキーコードを使用し、それ以外はdefineで名前をつけられた一連番号を使います。yaccを使う場合、トークンの名前を定義さえすれば、内部的な数値については考慮する必要はありません。 ここで

  • 1