さらに、YACC宣言部には、%{ ... %}で囲むことにより、C言語の宣言を置くことが出来ます。YACC文法ファイルの詳しい説明は後回しにして、ここではもう一度parser.yの内容を確認してみます。 %{ #include <stdio.h> /* C宣言部 */ #include <stdlib.h> /* 通常は#includeが並ぶ */ #include <string.h> #include "calc.h" %} %token NUM /* YACC宣言部 */ %left '-' '+' '*' '/' %% /* 以下が文法規則部 */ input: /* empty*/ | input line ; line: '\n' | exp '\n' { printf("%d\n", $1); } ; exp: NUM | exp '+' exp { $$ = $1 + $3
yacc の使い方 最終更新: 2003-04-16 16:39 目次 yacc とは 記述方法 記述例 使用方法 yaccとは yaccとは,構文解析部を記述するツールである.構文グラフや,BNF記法で記述された文法に基づいて構文規則を記述することで,入力されたトークンの並びが文法にあっているかを検査するプログラム(parser: パーザ)を生成することができる.例えば,最初のトークンが "I" で,その次に "LOVE" が入力され,"YOU" が入力され,最後の後に ".(ピリオド)" が入力されたとすると,このトークンの並びは英語の文法にあっており,正しい英文であると認識することができる.このような簡単な例であれば,構文解析部を生成するのはそれほど困難な作業ではないが,文法が多くなるにしたがって,場合分け等が発生し,構文解析は非常に難しくなる.yaccを使うことで,構文解析の
PowerDNS BV (bert hubert <bert@powerdns.com>) v0.8 $Date: 2002/07/22 14:02:09 $ 大西 大樹 (daiki onishi <[email protected]>) v0.8j 2003/02/08 本ドキュメントは Lex と YACC の基本的な使い方について記述します 1. イントロダクション 1.1 本ドキュメントに含まれないもの 1.2 ダウンロード 1.3 ライセンスについて 2. Lex と YACC でできること 2.1 それぞれのプログラムのやっていること 3. Lex 3.1 正規表現でのマッチ 3.2 C のようなシンタックスをもつもう少し高度な例 3.3 おさらい 4. YACC 4.1 単純な温度調節器 4.2 引数を扱えるように拡張した、温度調節器 4.3 設定ファイルの構文解析
%{ #include <stdio.h> #include <stdlib.h> #include <string.h> #include "calc.h" %} %token NUM %left '-' '+' '*' '/' %% input: /* empty*/ | input line ; line: '\n' | exp '\n' { printf("%d\n", $1); } ; exp: NUM | exp '+' exp { $$ = $1 + $3; } | exp '-' exp { $$ = $1 - $3; } | exp '*' exp { $$ = $1 * $3; } | exp '/' exp { $$ = $1 / $3; } ; %%
The asteroid to kill this dinosaur is still in orbit. - Lex Manual Page A compiler or interptreter for a programminning language is often decomposed into two parts: Read the source program and discover its structure. Process this structure, e.g. to generate the target program. Lex and Yacc can generate program fragments that solve the first task. The task of discovering the source structure again
yacc/lexとは Cでプログラミング言語の処理系を実装するのであれば、 多くの場合、yaccとlexというツールを使います。 実のところ、Cとyacc/lexで簡単なプログラミング言語を作る、というのは、 以前、「C言語ヨタ話 」で書いた「 電卓を作ってみよう」 の焼き直しになります。yaccとlexの説明もそちらに簡単に書いたので、 そちらを見てください――と言いたいところですが、 まあここでも軽く説明します。 内容的には重複、というかコピペしている部分もありますが。 プログラミング言語の処理系は、通常、以下のような手順を取ります。 字句解析 ソースプログラムを、「字句(トークン)」の並びに分割する処理です。 構文解析 トークンの並びから、解析木を構築する処理です。 この後、Cなどの機械語を吐くコンパイラや Javaのようなバイトコードを吐くコンパイラなら、 「コード生成」という処理
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く