タグ

yaccに関するdev0000_1のブックマーク (3)

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

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

  • yacc入門

    このページでは、yaccの実践的な入門講座を目指します。 YACC(Yet Another Compiler Compiler)は、コンパイラの開発を手助けしてくれるソフトウェアです。BNF(Backus-Naur Form)という形式で文法を記述すると、構文解析のためのプログラムを自動生成してくれます。つまり、YACCは構文解析の自動化ツールです。 YACCの入力は、YACC文法ファイル(拡張子は通常.y)で、この中にはBNFで書かれた構文ルールと、C言語で記述された各構文毎の処理(セマンティック・アクション)が書かれています。 YACCは、YACC文法ファイルを読みこみ、C言語のソースを出力します。 したがって、YACCを習得するためには、BNFの書き方と、C言語を知っていることが前提となります。 YACCの種類とインストール kmyaccについて bisonについて YACCを使って

  • Super Technique 講座~ungetcってどう使う?

    ungetc ってどう使う? stdio.h には、あまり使わない関数も多いが、特にこの ungetc(3) は、特別なテクニックと共に使われるものなので、知らないプログラマは絶対知らないが、使い方を知っているプログラマにとっては、非常に汎用的に使える関数(というかアイデア)なのである。筆者はインタプリタが得意なので、この ungetc(3) は必須アイテムの一つなのである。というわけで、ungetc(3) の使い方を解説しよう。 とはいえ、この ungetch.htm は結構気合いを入れて書いたにも関わらず、アクセスが少ない! 重要なテクニックなんだけど、一般認知が低いな! これがクヤシイので、ここにBNFのちゃんとした解説を入れることにする。前半もちゃんと読むのだぞ! 字句の先読み 単純な数式処理 自然数式処理 lex と yacc 字句の先読み ungetc(3) は文字列をトークン

  • 1