ANTLR

Semantic Predicate が呼び込む恐怖の無限ループ

何だか随分前から、ANTLRWorksを使っていると、 デバッグモードでステップ実行出来ない事があったのだけど、 何が起きているのか分らなかったのだよね。 文法定義がおかしいのか、ANTLR3.1.1がバグっているのか、 良く分からないので、記録的な意味合いで晒…

ここまできたら、とりあえず腕力で前に進む。

効率の良し悪しで言えば、明らかに悪いのだけど、 前提知識が大きく欠如している以上、動いているコードから、何をか判断せざるを得ないと言うワケ。 自動生成されたパーザや、レキサーが投げる例外は、全て、 org.antlr.runtime.RecognitionException のサ…

リカバリ処理。

最新版だと、頑張るの結構キツイかもよ。 既に、公式サイトにサンプルがあるレベルだとRuntimeに実装済み。 ANTLR3.1.1における実装。 BaseRecognizer protected Object recoverFromMismatchedToken(IntStream input, int ttype, BitSet follow) throws Reco…

思い出した様に2WaySqlParser

大切な何かが弾けた途端に、カオスを受け入れる事が出来た。 つまり、こういう事。

エラー処理の方針等を考えてみる。

実行VMのロケールを見て、日本語と英語でエラーメッセージを出す。 クォート途中で死んだら、その旨通知しる。 コメントの中で死んだら、その旨通知しる。 どんなルールの処理中に死んだのか、通知しる。 エラーリカバリとか、考えると超重い感じなので、 何…

バインド変数コメントは、本家と仕様を変えてみた。

こんな感じに、#をブロックコメントの開始の後に付けとくとバインド変数コメントになる。 /*# hogehoge.fugagua*/dummygrammar TwoWaySQL; options { language = Java; output = AST; ASTLabelType = CommonTree; } tokens { BEGINNODE; IFNODE; EXPRESSIONN…

IN句を伴うコメントを特別扱いする様にしてみた。

2WaySQLの中でもかなり怪しい仕様、と言ってもこれが非常に便利なのだけど、 IN句の後ろにあるコメント及び、その後のテキストノードが括弧で括られている時、 括弧で括られている範囲を、実行時にゴッソリ落して、再構築してくれるんですなぁ。 例えば、こ…

RewriteCardinalityExceptionってなんなんだぜ?

ツリーは、ちゃんと出来ている。ASTに変換しようとしてコケている。 パーサが構築しうるツリーと、変換されうるASTにズレ的な何かがある…と言っている気がするが、 どう対応したら良いのかサパーリ分からない。誰かボスケテ。 grammar TwoWaySQL; options { …

ちょっと中身を整理してみた。

さっきのを、ちょこちょこと弄って整理してみた。

空白のスキップとクォート出来る様にしてみた。

■[ANTLR] 空白文字のスキップCommentsAdd Starwarufuzaketaichi引き続き、ASTは、タダじゃ作ってくれない。 - 設計と実装の狭間で。を添削。予想以上に大変。 らしいのだけど、せっせとコピペしたので、それなりに楽勝。 しかし、それでは芸がないので、クォ…

少々強引に、動くようにしてみたり。

/と*と-が、lexer辺りでうまく処理されてなかったので、 そいつだけ独立したトークンにしつつ、Parserでまとめる感じに。 空白文字列がgrammarに山ほど出てきてしまうのは、もうちょっと先で対応するつもり。 grammar TwoWaySQL; options { language = Java;…

ちまちまと直しているが問題は解決していない。

grammar TwoWaySQL; options { language = Java; output = AST; ASTLabelType = CommonTree; } tokens { BEGINNODE; IFNODE; EXPRESSIONNODE; ELSENODE; } @header { package twowaysql.grammar; } @lexer::header { package twowaysql.grammar; } twowaySQL…

ASTと格闘している。いやlexerか。

僭越ながら ASTは、タダじゃ作ってくれない。 - 設計と実装の狭間で。 を添削。 添削してもらったので、少し直してみた。 そろそろ2byte文字も使ってみたいな…とか思って直している最中に、致命的な事が判明。 とりあえず、出来たトコまで晒しておくます。

ASTは、タダじゃ作ってくれない。

ANTLRWorksで、ParseTreeなんてのが、出てるから、これでいいんじゃね? とか思っていたのだけど、世の中そんなに甘く無い事を理解。

ANTLRをeclipse上で使う。

まぁ、eclipseのプラグインはすでにあるのだけどさ。 Eclipse Eclipse 3.3+ for Antlr 3.xAntlrDT is a standard Eclipse plugin implementing an Antlr 3.x specific editor, outline, and builder. See http://www.certiv.net/projects/plugins/antlrdt.ht…

gUnitに挑戦。

まぁ、何かテキトーに動きそうなツリーが出来たトコロで、 エラー処理辺りを作りこもうかな…と言う気分なのだけど、 そもそも良く分かってない部分があるので、細かい単位で動かせないと駄目だよね…と言う訳。 で、ANTLRには、gUnitと言うテスティングツール…

IF文をパース出来る様になったり。

コメントとテキストを分割出来る様になったので、 次は、条件分岐をパース出来る様にしてみる。

メモ。

スーパークラスを変えるとデバッグできなくなるので注意 (デバッグ用のスーパークラスを使ってブレークとかトレースしてる模様)

ANTLRWorksが余りに凄いので、今日はANTLRWorks記念日。

ANTLRWorksの使い方がようやく分ったので、結局、ANTLRを使う事に。 コンパイラの知識らしい知識を全く持たずに、どこまでいけるか頑張ってみる。