Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/yukihane/mavenize-language-implementation-patterns
書籍「言語実装パターン」サンプルコードのMaven化
https://github.com/yukihane/mavenize-language-implementation-patterns
antlr antlr3
Last synced: about 12 hours ago
JSON representation
書籍「言語実装パターン」サンプルコードのMaven化
- Host: GitHub
- URL: https://github.com/yukihane/mavenize-language-implementation-patterns
- Owner: yukihane
- Created: 2022-08-23T18:36:12.000Z (over 2 years ago)
- Default Branch: main
- Last Pushed: 2024-03-24T00:14:29.000Z (9 months ago)
- Last Synced: 2024-11-06T03:17:17.377Z (about 2 months 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