過去の What's New
2006/Jan/12
Ver.1.0.2 and source
- Pnuts を使用せずにパッケージをビルドできるようにしました。
- サンプルなど多くの *.notavacc で、「//〜CRLF」形式のコメントが「//〜CR」とそれ以降に分割されてトークンになっていたのを修正しました。
2003/Nov/05
Bullet¬ML を更新しました。
2003/Oct/01
Ver.1.0.0 and source
これ以降は、バージョン 1.0.x は安定版として、上位互換性を重視します。
2003/Sep/18
2003/Aug/31
Ver.1.0.0rc and source
- 仕様変更, 実装互換: --target version:array を仕様からはずしました。現在のバージョンでは動作しますが、将来のバージョンではサポートされない可能性があります。
- 仕様変更, 非互換:
parseType(File)
は廃止されました。
- Bug Fix:
--target version:array
が動作していなかった。
- Bug Fix: 識別子の途中で$を使用できなかった。
- Bug Fix:
--debug
オプションが常に有効だった。
- 仕様変更, 実装互換: 曖昧な文法に関して、仕様を次のように変更しました。従来は、曖昧な文法がコンパイル時エラーにならなかった場合、実行時エラーになるのは入力が曖昧である場合に限られていました。現在は、曖昧でない入力を与えた場合でも実行時エラーになることを許します。ただし、実装は変更されていないため、このバージョンでは実行時エラーになるのは入力が曖昧である場合に限られます。
- ドキュメントがいくつか追加されました。
2003/Aug/14
Ver.1.0.0beta and source
互換性のない変更
Visitor#visit(...)
をすべて protected
にしました。visitAll
と間違えてvisit
を呼び出してしまうのを防ぐため。
- ユーザにエンコーディングを意識させたほうが良いとの判断から、parseType(File)を deprecated にし、エンコーディングも引数に取る parseType(File, String)メソッドを追加しました。
parseType(File)
はVersion 1.0.0で廃止されます。また、parseType(file)
はparseType(file.getName(), file, null, 8)
の呼び出しと等価でしたが、parseType(file, encoding)
はparseType(file.getPath(), file, encoding, 8)
の呼び出しと等価になり、file.getName()
から file.getPath()
に変更されました。
上位互換の変更
2003/Apr/24
Ver.0.99 and source
互換性のない変更
- 次の機能を廃止しました。
$package
。代替手段は $parser
です。
- タグ(
#
)。代替手段はありません。
$Node.accept
。代替手段は Visitor#visitAll(Node)
です。
- 旧式のホワイト・トークンの宣言(
$WHITE_TOKEN
)。代替手段は、$white
修飾子です。
- 旧式の modifiers。具体的には、
$parsable $protected
と $protected $parsable
。代替手段は、$protected-parsable $protected
です。
2003/Apr/21
Ver.0.76 and source
BugFix
- 出力されるパーザが、エラー処理中に無限ループに入る場合がありました。
互換性のない変更
Node
で親のノードへのポインタを持つのはやめました(DAGを作れない、ノードを書き換えるときに考慮するのが面倒、といった
理由から)。Node#setParentNode
、Node#getParentNode
は廃止されました。Default.Node#replace
も廃止され、代わりにreplaceChild
がpublic
になりました。ただし、コンパイル時に --x-parent-support
オプションを用いることで、古いバージョンと互換性のあるコードが出力されます。
- 次の非終端記号も将来の利用のため予約されました。
getGCCStylePositionString()
をカラム番号も出力するように変更しました。
- コンパイル時のメッセージで、カラム番号も出力するようにしました。
--debug
オプションを用いてコンパイルすることで、出力されるパーザは、
- パーズ時に複数の構文木が得られた場合に、それらを
System.err
へ出力します。
- ¬<><∪∪は複数のLR構文解析器を並列的に動作させて構文解析を行うわけですが、LR構文解析器の数が100以上になった場合(つまり曖昧である可能性が高い場合)に、それぞれの解析器が解析中の構文木を
System.err
へ出力します。
出力を適当なファイルへ切り分けて diff を取ることで、同じ入力が異なる木を作っている部分を特定することができます。
2003/Mar/20
Ver.0.75 and source
互換性のない変更
- Visitor で、リフレクションを用いるのをやめた。
- 次の非終端記号は将来の利用のため予約されました。
上位互換の変更
- 出力されるクラスの名前は、
$parser 完全限定名;
の形式で指定するようになりました。従来の、$package
と入力されるファイルの名前によって指定する方式も利用できますが、将来のバージョンではサポートされません。従来の方式を用いた場合、警告メッセージが出力されます。
- 実験的な機能として、リストの代わりに配列を出力するオプションを導入
- サンプルにJavaのプログラムをマージするjavamergerを追加(→その用途)
- 出力されたパーザが構文解析を行う際に消費されるメモリを減らしました。
2003/Feb/12
Ver.0.74 and source
- Bug Fix: ホワイト・トークンが構文木に含まれていなかった
2003/Feb/08
Ver.0.73 and source
2003/Feb/06
Ver.0.72 and source
互換性のない変更
- 非終端記号の定義で、tokenExpressionが省略されていないにもかかわらず終端記号がどの文字列にもマッチしない場合、コンパイラエラーにした
- 死記号が含まれる場合コンパイラエラーにした
上位互換の変更
- Bug Fix: tokenExpression に自己埋め込みがあったときに、無限ループしていた
- Bug Fix: 同じ文字列1つにのみマッチする終端記号を複数定義すると、¬<><∪∪がClassCastExceptionで終了していた
- Bug Fix: 次の¬<><∪∪ソースに対して、¬<><∪∪がUnsupportedOperationExceptionが発生していた:Foo {
- 構文木構築のアルゴリズムを見直した
2002/11/09
Ver.0.71 and source
2002/09/17
Ver.0.70 and source
2002/05/23
Ver.0.69 and source
2002/05/23
AspectJ 1.0.4 がリリースされています。ネステッドクラスの扱いが改善されたため、AspectJ を利用して¬<><∪∪の出力するクラスへメソッドやフィールドを追加することができます。
2002/03/31
Ver.0.68 and source
- BugFix:
TopLevelClass.Default.Type.replaceChild()
のシグネチャが間違っていた
2002/03/20
Ver.0.67 and source
- 曖昧である可能性がある場合、警告を出力するようにした
- Java 1.2 で利用可能なコードを出力するオプション --target 1.2 を追加
2002/03/14
Ver.0.66 and source
- BugFix:ラベル付けされていない子をラベル付けされているものとして扱うことがあった
- BugFix:getParentNode が null を返していた
- BugFix:mainが出力されるタイミングが、仕様通りでなかった
- BugFix:$protected $parsable が文法上 modifiers として許されていなかった
- ノウハウをTipsに名称変更
- Default.Token に、Token を引数に取るコンストラクタを追加
- サンプルの Java に、assert をサポートしないバージョン(未テスト)
- サンプルの Java に、JSR14 の generics をサポートするバージョン
2002/3/6
Ver.0.65 and source
- BugFix:非終端記号をタグ付けしても、コンパイルエラーにならなかった
- BugFix:文法の定義に abstract な非終端記号を使用した場合に、コンパイルエラーにならずNullPointerExceptionが発生していた
- ドキュメントにノウハウを追加
- 仕様書に、出力されるコードを追加
- 出力されるコード中、いくつかのメソッドはprivateになりました
- 引数にファイルを取る parseFoo の1つが、エンコーディング名を要求するようになりました
- replaceSubtree は、replace に改名され、引数とレシーバが逆になりました
- main は常には出力されなくなりました
- Foo が protected の場合、parseFoo も protected になりました
2002/3/1
Ver.0.64 and source
- スペルミス修正 LexicalAnalizer → LexicalAnalyzer
- LexicalAnalyzer.next() の仕様変更:EOF時にnullを返さない
- Bug Fix:
A { x:"a" "b" | y:"a" "c" }
をコンパイル可能に
- Bug Fix: Unicodeエスケープ
- 性能向上
AmbiguousGrammarError
追加
2002/2/25
Ver.0.63 and source
createNode throws ParseException
- build.xml等ビルドメカニズムを一新
- ドキュメントを更新
- AntTask が、casesensitiveをサポートするようになりました
$private
追加
- 先読み集合算出時のバグをフィックス
2002/2/17
Ver.0.62 and source
- Visitorのデフォルト実装を、リフレクションを用いて、GoFのVisitor化
- -vオプション使用時のコンフリクトの通知メッセージを改良
- Default以下のクラスにコンストラクタにコンパクトなツリーを作るオプションを追加、createNode(symbolID, parameters, true) 追加
- $WHITE_TOKENを$white修飾子に変更
- TokenWithOrignはTokenに統合
2001/2/4
一般公開開始
Ver.0.61 and source
- --source-path 追加
- --output は --destination-path へ変更
- AntTask をサポート
2001/1/31
Ver.0.60 and source
- 大幅に書き直されました
- $package の文法変更
- $startSymbol廃止→$parsable導入
- 伴ってparseメソッド変更
TopLevelClass.Types.Interface
が TopLevelClass.Interface
に
- TODOの多くを実装
- 他 色々
2001/12/29
Ver.0.46 and source
- LALR(1) から、任意CFGを扱うように変更。Java のライブラリの全ソースをパースした結果を比較すると、実行速度が30%悪化しましたが、Crusoe 667MHz で1ファイルあたり0.13秒といったレベルなので、それほど問題は無いと思います。
- 曖昧な文法は、コンパイルエラーになりませんが、実行時に RuntimeException を発生させます。
- or-多重継承は廃止
2001/12/07
Ver.0.45 and source
- いくつかのバグフィックス
- or-多重継承を試しに実装。Java のキャストを、JLSの定義どおりに書けるようになります。ドキュメント化されていません(下記TODOと、JavaParser.notavaccを参照)。[12/29追記] 任意のCFGをパース可能にすることで問題を解決でき、仕様を単純に保つことが出来るため、or-多重継承は採用しません。TODOから記述が取り除かれましたが、次のような仕様でした。
- ダブルミーニング(やマルチミーニング)な要素を、A -> X | Y | ... で表す。例えば、Java の 名前 -> 式 | 型 | パッケージ | ...
- 文法解析時にはどれであるか決定できない/困難だが、静的意味論に基づいて決定可能であることを表す
- interface A extends X, Y, ... により実装される
- ユーザが、tree書き換えによって、適切なクラスのインスタンスに置き換えなければならない。トラバースして、全ての A を、A を implements していなくて、X か Y か ... のいずれか1つの型のみを implements したクラスのインスタンスに置き換える。
- label:A/X は、(先読みの結果)label の型が X であることが決定できることを表す。メソッド label の戻り値の型をXにする(/X が無い場合、X, Y, ... の共通の super型になる)。BNF としての意味は label:A と同じで、/X は影響を及ぼさない。
2001/11/28
Ver.0.44 and source
- 出力周りを色々変更。
TopLevelClass.Class
が TopLevelClass.Types.Interface
に
- 他色々
2001/11/07
Ver.0.43 and source
- example に Java のシンタックスを追加
2001/11/05
Ver.0.42 and source
- Java1.4beta3 対応。
$className
は廃止されました。クラス名はファイル名から拡張子を除いたものになります。
2001/10/20
Ver.0.41
- Java1.4beta2 対応。
- ドキュメント・ソース込み