Skip to content

yukihane/mavenize-language-implementation-patterns

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

57 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

これは何?

書籍 言語実装パターン のサンプルコードを 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 で質問しています。

About

書籍「言語実装パターン」サンプルコードのMaven化

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages