2007-09-01から1ヶ月間の記事一覧

java.io.File

java.io.Fileがパワーアップしてた。 canExecute setReadable setWritable setExecutable getTotalSpace getFreeSpace getUsableSpace むしろ Map getMetaData() みたいなのが欲しい。keyはOSごとに依存でいいから。

DOM Element Proxy

めも。VM越しにプログラム構造を使うときにはどう考えてもProxyが必要。ってのは当然として、実はもっと身近な場面でProxyが必要な感じ。

Irenka File System

めも。Hackのパッケージングにあたって、ファイルシステムを一度整理した方がよさげと判断。これまでIrenkaのFSはIWorkspaceRootを単一のルートとする構成だったけど、外部参照してるクラスパスコンテナとかそもそもjarファイルの中身表せないじゃねーかとい…

JavaCore/Eclipse

internal使いすぎですよ。JavaModelManagerが隠匿しすぎ。

パーティショニング最適化

めも。クエリ内のプレースホルダを制約パーティショニングして、2つ以上のパーティションができたらそれらはそれぞれ独立している。そしたら別々に制約エンジン走らせて後で直積集合作ると最適っぽい。

制約パーティショニング

めも。クエリでプレースホルダ名をtypoされた時のエラー報告について。

これはひどい

WS @init{ enter(WS); } : { getCharPositionInLine() == 0 }? ( ' ' | '\t' )* '*'+ { $channel = HIDDEN; } | ( ' ' | '\t' )+ { $channel = HIDDEN; } | ( 'r' | '\n' )+ { $channel = HIDDEN; } ; CRでクラッシュするので変だなと思って追いかけてみれば…

はまった件

メモ。ANTLRのパーサはFOLLOW(1)集合の計算をちゃんとやってる模様。文法全体を計算して「FOLLOW(1) ∩ {EOF} = {}」なルールを作ってしまうと、単体で呼び出せなくなることが判明。その際はNoViableAltExceptionがスローされる。

はまった件(2)

semantic prediction がうまくいかない。はまってたらこんな時間に。semantic predictionは字句解析器とかにフィールド作っておいて、そのフィールドの値によってDFAの遷移情報とかを捻じ曲げるという趣旨のもので、かなり便利げ。ただ、想定ケースがANTLR作…

ANTLR(8) - Parserのエラー処理

ルールの末尾に catch[ExceptionType ] { ... } と書くと、ルール特有のエラー処理を書ける 全体的にエラー処理に統一性がない。細かいことやるならすべて書き直し FIRST集合とFOLLOW集合はある程度自前で計算しなきゃならない エラー発生直後のFOLLOW集合は…

ANTLR(7) - Lexerのエラー処理

@rulecatchでcatch節を書くと、全体に共通するエラー処理を書ける。 @lexer::rulecatch はないみたい 確認したエラー LexerでTokenizeできない先頭文字を見つけると、NoViableAltException 2文字目以降がmatchできないと MismatchedTokenException 'a'..'z'…

ANTLR(7) - Mini Irenka Query

次のクエリをベースに、エラーリカバリの検査。Irenkaで使ってるクエリ言語の機能を半分くらいにしてます。 @when hoge.foo.bar = {@link String}くらいなら書ける。

ANTLR(6) - 属性文法

合成属性と継承属性が使える模様。

ANTLR(5) - インタープリタ

ここまでのおさらいで、簡単なインタープリタを。機能は次の2つ。主に変数を導入。関数呼び出しとかは面倒だからスキップ。 変数 = 式; print(式); 前のエントリからどのくらいでできるだろ。

ANTLR(4) - ASTの分析

ANTLR(3)で作ったASTを分析。ANTLRが便利だということは分かったけど、(3)くらいから黒魔術気分。

ANTLR(3) - ASTの構築(1)

入力から構文木を作るところまで一気に。や、これは便利ですわ。

ANTLR(2) - 四則演算

お決まりの四則演算。one-pathでAST構築なし。合成属性関係が少しわかった。大学の授業レベルならこの辺の知識でよさそう。

ANTLR(1)

compilercompilerを勉強中。bison, JavaCCくらいしか使ったことがないので、流行りのANTLRを。めもめも。 ANTLRなのにLL(*)。アントラーらしい。 導入 http://www.antlr.org/download.html ANTLR WorksとANTLR本体をダウンロード 本体は「ANTLR 3.0.x Java r…

Query Parser

手続き言語系のコンパイラは一通り勉強したつもりだけど、構文解析器系は知識が甘いなと実感。特に構文エラー検出と回復関係が。 オートコンプリートの推論とかどうやってやるんだろ… Single token insertionとかで実現できるのかな…以下メモ。