Code Monkey home page Code Monkey logo

mavenize-language-implementation-patterns's Introduction

これは何?

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

mavenize-language-implementation-patterns's People

Contributors

yukihane avatar

Stargazers

 avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.