Closures Cookbook

BGGA Review =>演算子が嫌な感じだなぁ…、 っつうか、レキシカルコンテキストはイラナイのだけどな。 Aggregate Operations Closures と、Fluent Interfacesのコンボで、超キメェ。 ライブラリ作るのが大変すぐる。っつうか、コード読むのも、特に読み易いとも…

JavaOne二日目

Twitterにエントリできなかったので、テキストファイルに書いたメモをそのまま。 一部不適切な表現がありますが、それは、それって事で、お許しくだしあ。

JavaOne一日目

[JavaFX]のセッション見ながら書いた感想 [TS-5040]The Many Moons of Eclipse見ながら書いた感想。微妙に歯抜け。 The MySQL™ JDBC™ API Driver, And Making It Do What You Want Developing and Supporting a Plug-in for Eclipse, the NetBeans™ IDE, and…

mvnhackとmvncrawlerをCodeReposにコミットした話。

僕は、maven2のリモートリポジトリから、jarをゲトしたいだけなのです。 依存してるライブラリも一緒にゲトしてくれるとグー。 そう、別にそれ以外の機能は、一切合切必要ないのです。 面倒だし、DTDが無く、自前のpullparserを使って腕力でパースしてるpom.…

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

実行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は、タダじゃ作ってくれない。 - 設計と実装の狭間で。を添削。予想以上に大変。 らしいのだけど、せっせとコピペしたので、それなりに楽勝。 しかし、それでは芸がないので、クォ…

0.30.0 リリース

以下のURLからインストール出来るます。http://eclipse.seasar.org/updates/3.3/ 対応しているeclipseのバージョンが変わり、同時に、インストールする為のURLも変わっているので注意。

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

/と*と-が、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を使う事に。 コンパイラの知識らしい知識を全く持たずに、どこまでいけるか頑張ってみる。

継承とかmixinとか。

Scalaには、traitというキーワードがあって、mixin専用のクラスというか、objectを作る事が出来たりするですな。 こいつは、中々に面白い。

Structural Subtyping の実装。

何日か前に痺れたStructural Subtypingが.scalaから.classにコンパイルされると、 どういう実装になっているのか気になったので、jadってみますた。

::の件、続き。

scala.Listの中に、 sealed abstract class List[+A] extends Seq[A]こんなクラスがありましたよ。 このクラスは、こんなメソッドを持っているます。 def ::[B >: A] (x: B): List[B] = new scala.::(x, this)昨日、抜粋したcase class の::が何故、いきなり…

car とか cdr の件。

カーとかクダーとか、聞いて、::が何故case classなのか分かりましたよ。 ちなみに、scala.Listには、 こんなcase classもありましたよ、やりましたね。 @SerialVersionUID(0 - 8256821097970055419L) case object Nil extends List[Nothing] { override def…

昨日のDuck Typingモドキなアレ。

structural subtyping と言うらしい。 関数型言語とは、どうやら直線的に関係がある訳でも無いみたい。 まぁ、何か色々議論がある様だけども、良く分からんので、後回し…とす。

関数型言語の初学者はこれをヨメと。Twitされますた。

数理科学的バグ撲滅方法論のすすめ---目次 http://twitter.com/ashigeru/statuses/773216887 なるほど、読み易い感じ。ありがとうござます。

::とか:::の件。

ソースコードをダウンロードしたら、疑問は氷解した。Listに、::ってcase classが定義されていた。 @SerialVersionUID(0L - 8476791151983527571L) final case class ::[B](private var hd: B, private[scala] var tl: List[B]) extends List[B] { def head …

記号をメソッド名に使えるとこういう事になるから困る。

def main(args: Array[String]) { class Stack[A <:AnyVal](val elem:A) { def >>[B <: A](newone: B): Stack[B] = new Stack[B](newone) { override def toString() = newone.toString() + " " + Stack.this.toString() } override def toString() = elem toString } var s = new Stack(10) >> 4 >> 11 >> 6 >> 1 println(…</:></:anyval](val>

で、一体何が起きてるん?

println(List(1,2) :: List(3,4)) println(List(1,2) ::: List(3,4)) コンソールには、 List(List(1, 2), 3, 4) List(1, 2, 3, 4) と言う風に出力さりる。 一体どうなったら、こういう結果になるのだろうか。ワカラン…

恐るべし・・・

何かと出遅れた感タプシなのだけど、ちょっと触ってみてる。 package aaa object Flyers { class Bird(val name: String) { def fly(height : int) { Console.println("I'm Fly") } } class Plane(val callsign: String) { def fly(height : int) = { printl…