kmyaccはpython,Actionscript,php,C#,HSPなど色々な言語に対応してるようなので、Windows環境で使えるよう野良コンパイルしてみた。

kmyaccのソースはここ
moriyoshiさんが各種パッチを当てたソースを公開していただいてるので、ありがたく頂戴いたします。

ソースはあってもCコンパイラが当方にはありません。”Borland C++ Compiler 5.5″を使用したいのですが、どこからダウンロードすればよいか分からず。結局Visual Windows for BC++をダウンロードしインストール。

Borland C++ Compiler 5.5の設定とkmyaccのコンパイルは、以下のサイトを参考にした。
kmyaccのインストールは”Borland C++ Compiler 5.5″をインストールしたディレクトリィ。makeファイルは以下の通り。

# Makefile for KM-yacc

BIN = C:\\PROGRA~1\\Borland\\Bcc55\\Bin
PARLIB = C:\\PROGRA~1\\Borland\\Bcc55\\Lib

CC      = bcc32
LINKER  = ilink32

INCLUDE = -I"C:\Program Files\Borland\Bcc55\Include"
LIB     = -L"C:\Program Files\Borland\Bcc55\Lib;C:\Program Files\Borland\Bcc55\Lib\PSDK"

#コンソールアプリケーションのためのコンパイルオプション
CFLAGS = -WC -O -Duint="unsigned int" -DPARSERBASE="\"$(PARLIB)\\kmyacc\""
LFLAGS = /Tpe

TARGET = kmyacc.exe
OBJS   = yacc.obj grammar.obj token.obj lalr.obj misc.obj genparser.obj compress.obj

all: $(TARGET)

# -- objファイルの作成
.c.obj:
	$(CC) $(CFLAGS) $(INCLUDE) -c $<

# -- exeファイルの作成
$(TARGET): $(OBJS)
 $(LINKER) $(LFLAGS) $(LIB) $(OBJS) c0x32.obj,$(TARGET),,cw32.lib import32.lib

#------------------------------------------
#
TOBJS = tokentest.obj token.obj misc.obj
TOKENTEST = tokentest.exe

tokentest: $(TOKENTEST)

$(TOKENTEST): $(TOBJS)
 $(LINKER) $(LFLAGS) $(LIB) $(TOBJS) c0x32.obj,$(TOKENTEST),,cw32.lib import32.lib

clean:
	del *.obj
	del *.tds
	del *.il*
	del *.map
    del *.bak
    del tokentest.exe

install: $(TARGET)
    if not exist $(BIN) mkdir $(BIN)
    copy $(TARGET) $(BIN)
    if not exist $(PARLIB) mkdir $(PARLIB)
    copy kmyacc.as.parser $(PARLIB)
    copy kmyacc.c.parser $(PARLIB)
    copy kmyacc.cs.parser $(PARLIB)
    copy kmyacc.hsp.parser $(PARLIB)
    copy kmyacc.java.parser $(PARLIB)
    copy kmyacc.js.parser $(PARLIB)
    copy kmyacc.php.parser $(PARLIB)
    copy kmyacc.pl.parser $(PARLIB)
    copy kmyacc.py.parser $(PARLIB)

# DO NOT DELETE THIS LINE -- make depend depends on it.
compress.obj: compress.c config.h common.h token.h yacc.h misc.h \
 grammar.h lalr.h compress.h
genparser.obj: genparser.c config.h common.h token.h yacc.h misc.h \
 grammar.h lalr.h compress.h genparser.h
grammar.obj: grammar.c config.h common.h yacc.h misc.h token.h \
 genparser.h grammar.h
lalr.obj: lalr.c config.h common.h yacc.h misc.h lalr.h grammar.h
misc.obj: misc.c config.h common.h yacc.h misc.h
token.obj: token.c config.h common.h yacc.h token.h misc.h
tokentest.obj: tokentest.c token.h
yacc.obj: yacc.c config.h common.h misc.h token.h grammar.h lalr.h \
genparser.h yacc.h

これでPHPやActionScriptで電卓が書ける!?