タグ

yaccに関するhiroyukimのブックマーク (2)

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

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

  • Bison 1.28: Bison構文解析器のアルゴリズム

    URL="https://bookshelf.jp/cgi-bin/goto.cgi?file=bison-ja&node=Algorithm" "bison/Bison構文解析器のアルゴリズム"へのコメント(無し) Bison構文解析器は、トークンを読むと、トークンの意味値とともにスタックに積みます。 このスタックを構文解析器スタック(parser stack)と呼びます。 トークンをスタックに積むことを、伝統的に シフト(shifting)と呼びます。 たとえば、中間記法電卓が、`1 + 5 *'をすでに読んでいて、 `3'を受け取ったと仮定します。 スタックには4個の要素があり、トークンそれぞれがシフトされています。 しかし、スタックに常に読み込まれたトークンそれぞれに対する 要素があるわけではありません。 最後のn個のトークンとグループが文法規則に当てはまる場合には、 それらは規則

  • 1