「Coins を使って新たなコンパイラを作る:LLパーサを使った例」を動作させてみた

「Coins を使って新たなコンパイラを作る:LLパーサを使った例」が(自分にとっては)余りにも分かりにくく、色々はまってしまったので記録(on Linux)

準備

  • JDK を使えるようにしておく
  • JavaCC 使えるようにしておく
  • COINS を展開しておく(unzip coins-1.4.4.3-ja.jar)
  • ページから pl0.jj, PL0Driver.java, mult.p を取得
  • pl0.jj の「printfSym.setOptionalParam();」を「//」でコメントアウト
  • ファイル(特に PL0Driver.java)はディレクトリ pl0front 内に置き、そのディレクトリ内で作業

ドライバのコンパイル

$ export JAVA_HOME=/usr/local/jdk1.6.0_11
$ export COINS=/usr/local/coins-1.4.4.3-ja
$ javacc pl0.jj
$ $JAVA_HOME/bin/javac -cp .. ParseException.java
$ $JAVA_HOME/bin/javac SimpleCharStream.java
$ $JAVA_HOME/bin/javac TokenMgrError.java
$ $JAVA_HOME/bin/javac -cp $COINS/classes:.. PL0Parser.java
$ $JAVA_HOME/bin/javac -cp $COINS/classes:.. PL0Driver.java

小細工1(-coins:assembler=as をつければ不要だったようだ〜)

# cd /usr/bin
# ln -s as gas

小細工2

$ mkdir ~/coins
$ cp $COINS/suffixes ~/coins/

「p, PL0, PL0 source, -,s,o」を最後に追加


コンパイル、実行

$ $JAVA_HOME/bin/java -cp $COINS/classes:.. pl0front.PL0Driver -coins:target=x86 mult.p
$ ./a.out
785
595