Skip to content

Latest commit

 

History

History
179 lines (115 loc) · 3.65 KB

File metadata and controls

179 lines (115 loc) · 3.65 KB

これは何?

書籍 言語実装パターン のサンプルコードを Maven 化し、 現代的な IDE にインポートできるようにするためのスクリプトです。

オリジナルのコードは Apache Ant でプロジェクト構成されていますが、 2022 年現在もはやメジャーなツールではないためコードをビルドするハードルが上がってしまっています。

このコードサンプルを Maven プロジェクトとして取り扱えるようにすることで、上記の問題を解消します。

使い方

セットアップ

次のコマンドを実行します:

./mavenize.sh

オリジナルのコードはオープンソース的ライセンスではないようなので、オライリーのサイトから各自で取得するようにしています。

実行方法

基本的には、各ディレクトリに移動し、次のコマンドを実行します:

mvn clean compile exec:java

-q オプションを追加すると、 Maven が出力するメッセージを抑制することができます。

mvn -q clean compile exec:java

場合によっては追加の引数が必要です。 各ディレクトリの README を参照してください。

IDE へ取り込む

TODO

書籍の説明箇所とコードの対応づけ

ページ

ディレクトリ

p.29

parsing/lexer

p.35

parsing/recursive-descent

p.39

parsing/multi

p.56

parsing/memoize

p.74

parsing/antlr

p.83

IR/Homo

p.85

IR/Normalized

p.87

IR/Hetero

p.99

walking/embedded

p.101

walking/visitor

p.105

walking/tree-grammar

p.109

walking/patterns

p.125

symtab/monolithic

p.130

symtab/nested

p.143

symtab/aggr

p.152

symtab/class

p.162

semantics/types

p.171

semantics/promote

p.176

semantics/safety

p.183

semantics/oo

p.199

interp/syntax

p.204

interp/tree

p.226

interp/asm

p.231

interp/stack

p.240

interp/reg

p.260

trans/make

p.265

trans/wiki

p.274

trans/intro

p.278

trans/web

p.280

trans/ast

p.283

trans/ast-st

p.290

trans/sql

付録

オリジナルの Ant を使うには

build-macros.xml の 62 行目で Java のバージョンを指定していますが、 1.5 と古いので、ここを更新すれば動作するはずです。

ANTLR3.2 は Java8 に対応していない

ソースコードには antlr-3.2.jar が同梱されていますが、どうやら Java7 までにしか対応していないようです。

Java17 で実行すると次のようなエラーが出ました。

internal error: Can't get property indirectDelegates using method get/isIndirectDelegates from org.antlr.tool.Grammar instance : java.lang.NullPointerException

検索してみると、このバージョンは Java7 までにしか対応していないようです。

公式サイトから最新版(これを書いた時点では 3.5.3 でした)をダウンロードしてそれを利用する必要があります。

ちなみにコマンドラインでの実行方法はこちらに説明があります。

サンプルコードが ANTLR3 で実行できない

理由がわからないので Stack Overflow で質問しています。