https://github.com/yukihane/mavenize-language-implementation-patterns
書籍「言語実装パターン」サンプルコードのMaven化
https://github.com/yukihane/mavenize-language-implementation-patterns
antlr antlr3
Last synced: 12 months ago
JSON representation
書籍「言語実装パターン」サンプルコードのMaven化
- Host: GitHub
- URL: https://github.com/yukihane/mavenize-language-implementation-patterns
- Owner: yukihane
- Created: 2022-08-23T18:36:12.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-03-24T00:14:29.000Z (over 2 years ago)
- Last Synced: 2025-06-03T18:45:26.262Z (about 1 year ago)
- Topics: antlr, antlr3
- Language: Shell
- Homepage: https://www.oreilly.co.jp/books/9784873115320/
- Size: 74.2 KB
- Stars: 1
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.adoc
Awesome Lists containing this project
README
## これは何?
書籍 https://www.oreilly.co.jp/books/9784873115320/[言語実装パターン] のサンプルコードを Maven 化し、 現代的な IDE にインポートできるようにするためのスクリプトです。
オリジナルのコードは https://ant.apache.org/[Apache Ant] でプロジェクト構成されていますが、 2022 年現在もはやメジャーなツールではないためコードをビルドするハードルが上がってしまっています。
このコードサンプルを Maven プロジェクトとして取り扱えるようにすることで、上記の問題を解消します。
## 使い方
### セットアップ
次のコマンドを実行します:
[source]
----
./mavenize.sh
----
オリジナルのコードはオープンソース的ライセンスではないようなので、オライリーのサイトから各自で取得するようにしています。
### 実行方法
基本的には、各ディレクトリに移動し、次のコマンドを実行します:
[source]
----
mvn clean compile exec:java
----
`-q` オプションを追加すると、 Maven が出力するメッセージを抑制することができます。
[source]
----
mvn -q clean compile exec:java
----
場合によっては追加の引数が必要です。
各ディレクトリの README を参照してください。
### IDE へ取り込む
TODO
## 書籍の説明箇所とコードの対応づけ
[cols="2", option="header"]
|===
|ページ
|ディレクトリ
|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 で実行すると次のようなエラーが出ました。
[source]
----
internal error: Can't get property indirectDelegates using method get/isIndirectDelegates from org.antlr.tool.Grammar instance : java.lang.NullPointerException
----
検索してみると、このバージョンは Java7 までにしか対応していないようです。
* https://stackoverflow.com/a/22367682/4506703
https://www.antlr3.org/download.html[公式サイト]から最新版(これを書いた時点では `3.5.3` でした)をダウンロードしてそれを利用する必要があります。
ちなみにコマンドラインでの実行方法はこちらに説明があります。
* https://theantlrguy.atlassian.net/wiki/spaces/ANTLR3/pages/2687267/How+do+I+use+ANTLR+v3+from+the+command+line[How do I use ANTLR v3 from the command line? - ANTLR 3 - Confluence]
### サンプルコードが ANTLR3 で実行できない
理由がわからないので Stack Overflow で質問しています。
* https://stackoverflow.com/q/73476914/4506703