著者
山根 雅司 山崎 淳 阿部 正佳
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.1, no.3, pp.1-10, 2008-10-27

本発表では,自動エラーリカバリ機構を持つパーサジェネレータ yayacc の設計と実装を述べる.yacc や bison をはじめとして,現在広く使われているパーサジェネレータでは,文法中に特殊なエラーリカバリ動作を指示するトークンを手動で挿入させることで,エラーリカバリパーサを生成している.この古典的な手法は本来の文法定義を変えてしまうことに起因する深刻な問題があり,正しいエラーリカバリを行うパーサを生成させるには,多くの勘と経験が必要とされる.一方,yayacc ではエラーリカバリのために,文法を修正するというこがいっさい不要であり,生成されるパーサは従来の error トークン手動挿入によるパーサでは理論的に不可能な優れたエラーリカバリを自動的に行う.さらに yayacc では意味動作の Undo も自動で行うことが可能である.これは先行研究における自動エラーリカバリパーサでは扱われていないが,字句解析が完全に分離できない文法,たとえば C 言語に対しても自動的なエラーリカバリを行う場合に必要となる重要な機能である.yayacc は筆者らが開発している SCK コンパイラキットのツールの 1 つとして作成されたものである.現在 ANSI C言語,および小規模な関数型言語のパーサは yayacc により自動生成されたものを使っており,きわめて優れたエラーリカバリが行われている.
著者
中田 育男 渡邊 坦 佐々 政孝 森 公一郎 阿部 正佳
出版者
日本ソフトウェア科学会
雑誌
コンピュータ ソフトウェア (ISSN:02896540)
巻号頁・発行日
vol.25, no.1, pp.1_2-1_18, 2008 (Released:2008-03-31)

COINSコンパイラ・インフラストラクチャは,コンパイラの研究・開発・教育を容易にする目的で開発したものである.COINSは(1)高水準中間表現と低水準中間表現の2水準の中間表現をもつ,(2)記述言語はJavaで,すべて新規開発した,(3) SSA最適化など最適化の機能が充実している,(4)リターゲッタブルなコード生成系をもつ,(5)並列化の機能を持つ,といった特徴をもっている.開発作業は10箇所以上で分散して行い,3週間に1回程度の全体打ち合わせを持ち進めた.途中いくつかの失敗もあったが,ほぼ当初の目標を達成できた.入力言語はCとFORTRANとして,対象機種はSPARC, x86など,全部で8機種のコンパイラが出来ている.Cコンパイラの目的コードの性能は,GCCのそれに匹敵するものが得られている.COINSシステムはJavaで約26万行の大きさである.本論文では,このインフラストラクチャについて,技術面と開発作業の観点から述べる.
著者
阿部 正佳 山崎 淳 山根 雅司
雑誌
情報処理学会論文誌プログラミング(PRO) (ISSN:18827802)
巻号頁・発行日
vol.49, no.SIG1(PRO35), pp.127, 2008-01-15

本発表ではコンパイラキットSCKを紹介する.SCKはEmacs Lispで実装された,マルチソース,マルチターゲットのコンパイラ作成支援環境である.コンパイラキットは,単一のコンパイラと異なり,ユーザはそれを構成する各モジュールを選択的に利用するものであるから,それらのモジュラリィー,インタフェースの簡潔さと柔軟性がきわめて重要であるにもかかわらず,既存のコンパイラ作成支援環境はその実装言語に依存した複雑なインタフェースのみを提供し続けてきた.SCKでは,データ構造というものを実装言語とはまったく無関係な,独立した簡潔なプログラミング言語として定義し,さらに徹底的なモジュール分割を行うことで,実装言語から独立したコンパイラ部品を提供している.実際の実装言語はEmacs Lispであるが,Emacs Lispの知識がなくてもSCKを利用することができる.これが実装言語独立の意味である.一方で,Emacs Lispはコンパイラのような記号処理向きのプログラミング言語であり,現在最も使われている完成度の高いLisp処理系の1つである.SCKをEmacs上で利用するユーザには,簡潔で強力なコンパイラ作成環境が提供される.