{"id":18407857,"url":"https://github.com/yukihane/mavenize-language-implementation-patterns","last_synced_at":"2025-06-29T06:08:01.780Z","repository":{"id":58391104,"uuid":"528119108","full_name":"yukihane/mavenize-language-implementation-patterns","owner":"yukihane","description":"書籍「言語実装パターン」サンプルコードのMaven化","archived":false,"fork":false,"pushed_at":"2024-03-24T00:14:29.000Z","size":76,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-03T18:45:26.262Z","etag":null,"topics":["antlr","antlr3"],"latest_commit_sha":null,"homepage":"https://www.oreilly.co.jp/books/9784873115320/","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/yukihane.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-08-23T18:36:12.000Z","updated_at":"2024-03-24T02:19:35.000Z","dependencies_parsed_at":"2024-11-06T03:17:35.642Z","dependency_job_id":"f808812a-f52b-4493-8899-d798d06601ea","html_url":"https://github.com/yukihane/mavenize-language-implementation-patterns","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/yukihane/mavenize-language-implementation-patterns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukihane%2Fmavenize-language-implementation-patterns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukihane%2Fmavenize-language-implementation-patterns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukihane%2Fmavenize-language-implementation-patterns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukihane%2Fmavenize-language-implementation-patterns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/yukihane","download_url":"https://codeload.github.com/yukihane/mavenize-language-implementation-patterns/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/yukihane%2Fmavenize-language-implementation-patterns/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":262545037,"owners_count":23326660,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["antlr","antlr3"],"created_at":"2024-11-06T03:15:52.752Z","updated_at":"2025-06-29T06:08:01.761Z","avatar_url":"https://github.com/yukihane.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"## これは何？\n\n書籍 https://www.oreilly.co.jp/books/9784873115320/[言語実装パターン] のサンプルコードを Maven 化し、 現代的な IDE にインポートできるようにするためのスクリプトです。\n\nオリジナルのコードは https://ant.apache.org/[Apache Ant] でプロジェクト構成されていますが、 2022 年現在もはやメジャーなツールではないためコードをビルドするハードルが上がってしまっています。\n\nこのコードサンプルを Maven プロジェクトとして取り扱えるようにすることで、上記の問題を解消します。\n\n## 使い方\n\n### セットアップ\n\n次のコマンドを実行します:\n\n[source]\n----\n./mavenize.sh\n----\n\nオリジナルのコードはオープンソース的ライセンスではないようなので、オライリーのサイトから各自で取得するようにしています。\n\n### 実行方法\n\n基本的には、各ディレクトリに移動し、次のコマンドを実行します:\n[source]\n----\nmvn clean compile exec:java\n----\n\n`-q` オプションを追加すると、 Maven が出力するメッセージを抑制することができます。\n\n[source]\n----\nmvn -q clean compile exec:java\n----\n\n場合によっては追加の引数が必要です。\n各ディレクトリの README を参照してください。\n\n### IDE へ取り込む\n\nTODO\n\n\n## 書籍の説明箇所とコードの対応づけ\n\n[cols=\"2\", option=\"header\"]\n|===\n|ページ\n|ディレクトリ\n\n|p.29\n|parsing/lexer\n\n|p.35\n|parsing/recursive-descent\n\n|p.39\n|parsing/multi\n\n|p.56\n|parsing/memoize\n\n|p.74\n|parsing/antlr\n\n|p.83\n|IR/Homo\n\n|p.85\n|IR/Normalized\n\n|p.87\n|IR/Hetero\n\n|p.99\n|walking/embedded\n\n|p.101\n|walking/visitor\n\n|p.105\n|walking/tree-grammar\n\n|p.109\n|walking/patterns\n\n|p.125\n|symtab/monolithic\n\n|p.130\n|symtab/nested\n\n|p.143\n|symtab/aggr\n\n|p.152\n|symtab/class\n\n|p.162\n|semantics/types\n\n|p.171\n|semantics/promote\n\n|p.176\n|semantics/safety\n\n|p.183\n|semantics/oo\n\n|p.199\n|interp/syntax\n\n|p.204\n|interp/tree\n\n|p.226\n|interp/asm\n\n|p.231\n|interp/stack\n\n|p.240\n|interp/reg\n\n|p.260\n|trans/make\n\n|p.265\n|trans/wiki\n\n|p.274\n|trans/intro\n\n|p.278\n|trans/web\n\n|p.280\n|trans/ast\n\n|p.283\n|trans/ast-st\n\n|p.290\n|trans/sql\n\n|===\n\n## 付録\n\n### オリジナルの Ant を使うには\n\n`build-macros.xml` の 62 行目で Java のバージョンを指定していますが、 `1.5` と古いので、ここを更新すれば動作するはずです。\n\n### ANTLR3.2 は Java8 に対応していない\n\nソースコードには `antlr-3.2.jar` が同梱されていますが、どうやら Java7 までにしか対応していないようです。\n\nJava17 で実行すると次のようなエラーが出ました。\n[source]\n----\ninternal error: Can't get property indirectDelegates using method get/isIndirectDelegates from org.antlr.tool.Grammar instance : java.lang.NullPointerException\n----\n検索してみると、このバージョンは Java7 までにしか対応していないようです。\n\n* https://stackoverflow.com/a/22367682/4506703\n\nhttps://www.antlr3.org/download.html[公式サイト]から最新版(これを書いた時点では `3.5.3` でした)をダウンロードしてそれを利用する必要があります。\n\nちなみにコマンドラインでの実行方法はこちらに説明があります。\n\n* 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]\n\n### サンプルコードが ANTLR3 で実行できない\n\n理由がわからないので Stack Overflow で質問しています。\n\n* https://stackoverflow.com/q/73476914/4506703\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyukihane%2Fmavenize-language-implementation-patterns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fyukihane%2Fmavenize-language-implementation-patterns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fyukihane%2Fmavenize-language-implementation-patterns/lists"}