ANTLR

構文エラー処理 (0)

少しずつ書いていきます 実行VMのロケールを見て、日本語と英語でエラーメッセージを出す。 クォート途中で死んだら、その旨通知しる。 コメントの中で死んだら、その旨通知しる。 どんなルールの処理中に死んだのか、通知しる。 エラー処理の方針等を考えて…

AST構築時の注意とか

添削する機械。 ツリーは、ちゃんと出来ている。ASTに変換しようとしてコケている。 ... ... ifcomment : (C_ST IF expression C_ED txt (elseifcomment txt)* (elsecomment txt)? endcomment) -> ^(IFNODE ^(EXPRESSIONNODE expression) txt ^(ELSEIFNODE e…

コメント内の文字列を復元

タダね、これだと、実は余りうまくない。 SQL内の空白は、最悪消えても良いのだけど、 コメント内の空白文字は、消えてしまっては困るのです。 何故なら、IFコメントとかのexpression部分は外部の式言語にそのまま食わせるから。 空白のスキップとクォート出…

Tips - String literal in block comments

どこかで役に立てば、という程度の無駄知識。 ポイントは、 /*eLsE ccc + 44 '*/' */ で、コメントが変な風に中断したり 空白のスキップとクォート出来る様にしてみた。 - 設計と実装の狭間で。 というところで、逆にコメントを変な風に中断する方法について…

空白文字のスキップ

引き続き、ASTは、タダじゃ作ってくれない。 - 設計と実装の狭間で。を添削。予想以上に大変。

Lexerとかの挙動

僭越ながら ASTは、タダじゃ作ってくれない。 - 設計と実装の狭間で。 を添削。

これはひどい

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…