「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