This domain may be for sale!
言語理論とコンパイラ 第八回: yacc 系ツールの使い方 2007 年 6月 8日 http://www.sw.it.aoyama.ac.jp/2007/Compiler/lecture8.html Martin J. Dürst duerst@it.aoyama.ac.jp, O 棟 529号室 © 2005-7 Martin J. Dürst 青山学院大学 今日の予定 flex の演習の正解例 先週の宿題 文法の種類 属性文法 bison flex の演習の正解例 読みやすさのため、コメントを /x x/ にし、スペースを使用 第一案: /x .* x/ 問題: /xx/ /xx/ をまとめて認識 第二案: /x [^x]* x/ 問題: /xxx/ を認識しない 第三案: /x ([^x]|x[^/])* x/ 問題: /x xx/ /x x/ をもとめて認識 第四案: /x ([
さらに、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 <onishi@mbc.nifty.com>) 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; } ; %%
言語処理系の実装方法を習得しようとしていた頃のお話です。 スクリプト言語などの作成に興味のある方は読んでみては如何でしょうか。
概要 パーサとスキャナ プログラム言語のパーサの書きかたは昔からしつこく研究されてきており、 かなりしっかりした定石がある。よほど変な(または曖昧な)文法でない 限り、定石にのっていけば解決できるものだ。 まず最底辺には文字列を単語(トークンとも言う)の列に切り出す部 分がある。これをスキャナ(scanner)とかレクサ(lexer)と言 う。日本語で言うと字句解析器だが、言いにくいのでスキャナと呼ぼう。 スキャナというものが出てくる根底にはそもそも「単語の区切りには空白ある でしょ」という常識がある。そして実際にたいていのプログラミング 言語はそういう仕様になっている。そのほうが楽だからだ。 例えば古いFortranでは空白が意味を持たなかった。つまり空白を入れても 単語区切りとは限らないし、変数の途中で何の前触れもなく空白を挿入したり することもできた。ところが解析が恐ろしく面倒なもの
Stephen C. Johnson AT&T Bell Laboratories Murray Hill, New Jersey 07974 ABSTRACT Computer program input generally has some structure; in fact, every computer program that does input can be thought of as defining an ``input language'' which it accepts. An input language may be as complex as a programming language, or as simple as a sequence of numbers. Unfortunately, usual input facilities are limi
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(英: yet another compiler compiler、ヤック)はパーサジェネレータの一つである。1970年代にAT&TでUNIX用にスティーヴン・カーティス・ジョンソンが開発した。 概要[編集] 名称[編集] Yacc は yet another compiler compiler(またひとつのコンパイラコンパイラ)に由来する。コンピュータ黎明期には「自動プログラミング」と呼ばれたプログラミング言語処理系の技術の進展の方向として、当時、機械語プログラムを生成するコンパイラの次はコンパイラを生成するコンパイラコンパイラであろう、ということで盛んに研究がされており、そのためコンパイラコンパイラを名乗る研究が他にもあれこれ存在した。 パーサはコンパイラの全てではないので、コンパイラコンパイラと呼ぶには Yacc のようなパーサジェネレータは不足と言えなくもないが、特段意識さ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く