[ www.notava.org > ソフトウェア > ¬<><∪∪ ]

Download
What's New
Documents
What's It

notavacc

notavaCC
--
A Compiler Compiler
That Is
A Strongly-Typed
Object-Oriented
Abstract-Syntax-Tree
Generator Generator

ご意見・ご要望はこちらまで。

Download

Latest Stable

Ver.1.0.3 and source

Latest Experimental

Ver.1.9.1 and source

  • 試験的なリリースです。テストは十分ではありません。また、今後のバージョンで仕様は互換性無く変更されます。
  • 任意の曖昧な文法(無限個の解析木を作るものを除く)を扱うことができます。

What's New

2006/May/23

Ver.1.9.1 and source

  • 構文解析エンジンを書き直しました。

2006/May/19

Ver.1.9.0 and source

2006/Apr/13

Ver.1.0.3 and source

  • ドキュメントに Tutorial を追加しました。
  • Handbook で IDENTIFIER と予約語の説明が誤っていたため直しました。

それ以前

過去の What's New

Documents

What's It

¬<><∪∪ (notavaCC) は、次の特徴を持ったパーサ・ジェネレータ(コンパイラ・コンパイラ)です。

  • 拡張BNFベースの記述法により、任意の曖昧でない文脈自由文法(context free grammar; CFG)を扱えます(LALR(∞)に相当する能力を持っています)。
  • Java ソースを出力します
  • Java で書かれており、ソースが公開されています
  • 差集合をサポートするように拡張された(離散数学で言うところの)正規表現によって語彙を定義できます。例えば、C言語のコメントを
    "/*" ( ANY_CHARACTER* - ( ANY_CHARACTER* "*/" ANY_CHARACTER* ) ) "*/"
    のように記述できます。
  • オブジェクト指向に基づいた抽象構文木(abstract syntax tree; AST)を出力するパーサを生成します。¬<><∪∪のコード
    Addition -> Expression { operand1:expression "+" operand2:term }
    は、BNFのAddition ::= expression "+" termを意味すると同時に、パースの結果を
    interface Addition extends Expression { Expression operand1(); Expression operand2(); }
    のような型のオブジェクトで表現することを表します。operand1operand2は、expressionterm に対応する式オブジェクトを返します。1 * (2 + 3)は次のように表現されます。
    抽象構文木

LALRの動作を理解したい人におすすめ
(構文解析からコード生成までコンパイラ全般を扱っています)
LALRの擬似コードを見たい人におすすめ
(構文解析から構文チェックまでを扱っています)
任意のCFGを解析するGLRについて知りたい人におすすめ(洋書)