ANTLR

ANTLR V3.5.2

言語実装パターン ―コンパイラ技術によるテキスト処理から言語実装までのサンプルコードはhttp://www.oreilly.co.jp/books/9784873115320/の[関連ファイル]から入手できるけど*1、この中に含まれているANTLRはv3.2とちょっと古い。そのせいか、Java8でorg.an…

Chapter 4. A Quick Tour^5

4.5 Cool Lexical Features ANTLRには紹介する価値のある字句関連の機能が3つある。1つはXMLのような、1つのファイルに異なる字句構造(タグの内側/外側)をもつような形式の扱い方。次は入力ストリームを微調整してJavaクラスにフィールドを挿入する方法。…

Chapter 4. A Quick Tour^4

4.4 Making Things Happen During th Parse リスナーとビジターは、アプリ固有コードと文法を分離することで、文法を読みやすくし、特定のアプリともつれあうのを防ぐのに役立っている。しかしながら最大限の柔軟性と制御を得るため、文法に直接コードの断片…

Chapter 4. A Quick Tour^3

4.3 Building a Translator with a Listener ボスがあなたにJavaクラス定義のメソッドからJavaインタフェースを生成するツールを作成するよう命じたとしよう。もしあなたがジュニアプログラマならパニックに陥るだろう。熟練のJava開発者なら、メソッドシグ…

Chapter 4. A Quick Tour^2

4.2 Building Calculator Using a Visitor 前節の算術式構文解析器は、値を計算するために少々Javaでコードを書く必要があった。ANTLR v4は私たちに文法をクリーンなままにし、言語アプリを実装するため構文解析木訪問器やその他の訪問器を使うよう促してい…

Chapter 4. A Quick Tour

ここまでANTLRのインストール方法、キープロセス、専門用語、言語アプリを作成するのに必要の部品の作り方、などを学んだ。この章ではANTLRの能力を説明する幾つかのサンプルを通して、ANTLRを駆け足で見ていく。簡略化のため詳細の多くは軽く扱うが、完全に…

Chapter 3. A Starter ANTLR Project^4

3.4 Building a Language Application 配列初期子のサンプルを続ける。次のゴールは初期化子の認識だけでなく、変換すること。たとえば、{99,3,451}のようなJavaのshort配列を"\u0063\u0003\u01c3"へ変換する(63は99の16進表現)。 認識を超えて移動するため…

Chapter 3. A Starter ANTLR Project^3

3.3 Integrating a Generated Parser into a Java Program 文法で良いスタートが切れれば、ANTLRが生成したコードをより大きなアプリへ統合できる。ここでは、初期化子パーサーを起動し、TestRigの-treeオプションに似た構文解析木を出力するシンプルなmain(…

A Starter ANTLR Project^1

最初のプロジェクトは、とても小さなC言語、あるいはJava派生言語のサブセットの文法構築。特に整数、もしかすると{1,2,3}, {1,{2,3},4}のようにネストしているかもしれない、を認識する。これらの構成物はintの配列、またはstructの初期化子になれるかもし…

Chapter 2. The Big Picture^5

2.5 Parse-Tree Listeners and Visitors ANTLRは実行時ライブラリで2つの木走査メカニズムを提供する。デフォルトでは、ANTRLはビルトインの木走査器によって駆動されるイベントに反応する構文解析木のリスナーインタフェースを生成する。リスナー自身、XML…

Chapter 2. The Big Picture^4

2.4 Building Language Applications Using Pars Tree 言語アプリを作るには、入力したそれぞれの句に対して適切なコードを実行する必要がある。最も簡単な方法は、構文解析器によって自動的に作られた構文解析木を操作すること。構文解析木の操作で良いこと…

Chapter 2. The Big Picture^3

2.3 You Can't Put Too Much Water into a Nuclear Reactor 曖昧な句、文は複数の解釈を持つもの。言い換えると、複数の文法構造に当てはまる語ということ。自然言語では曖昧さは面白いが、コンピュータベースの言語アプリでは問題を引き起こす。句を解釈あ…

Chapter 2. The Big Picture^2

2.2 Implementing Parsers ANTLRは文法規則から再帰的下向き構文解析器(recursive-descent parser)を生成する。再帰的下向き構文解析器は規則に付き1つの再帰メソッドの集合。下向き(descent)という用語は、構文解析が構文解析木の根(ルート;root)から始ま…

Chapter 2. The Big Picture

2.1 Let's Meta! 言語を実装するには、文を読んで、そこから見つけた句や入力記号に対して適切に反応するアプリを作る必要がある。もしあるアプリが計算する、あるいは文を「実行する」場合、そのアプリをインタプリタと呼ぶ(例としては、計算機、設定ファイ…

Chapter1. Meet ANTLR^2

1.2 Executing ANTLR and Testing Recognizer Hello.g4は"hello parrt"、"hello world"のようなフレーズを認識する*1簡単な文法 grammar Hello; r : 'hello' ID ; ID : [a-z]+ ; WS : [ \t\r\n]+ -> skip ; grammarに続く"Hello"が文法名。ANTLRでは文法を格…

Chapter1. Meet ANTLR

1.1 Installing ANTLR ANTLRはJavaで記述されているので、まずJavaの実行環境が必要。これはANTLRの生成したパーサーをC#/C++で使う場合も一緒。JavaはVersion1.6以降。インストールはhttp://www.antlr.org/download.htmlから最新版のjarファイルをdownload…

Welcome Abroad

ANTLR V4は強力なパーサージェネレーター。学界、実業界で言語、ツール、フレームワークを作るために幅広く使われている。 Twitter検索の解析(2億件/日を超える) Hive,PigなどHadoop向けデータウェアハウスシステム Lex Machina Oracle SQL Developer IDE Ne…