前言
介绍 Prolog IDEs 的很多,但是专门介绍 Strawberry Prolog 的文章几乎没有。不要看它的官方网站还是上世纪的风格,也没有什么移动版视图,但是其到2020年1月23日仍有更新,推出了5.0版本的二进制包,相应地提供了其源码包。自 3.0 Beta 4 推出的示例小游戏 WarCraft.pro(位于 安装目录/Games/
下)至今仍吸引着我。希望能转化为其他编程语言实现,研究 IDE 如何实现了 Prolog 脚本是其中一项重要内容,在此写下自己的分析进展。
Assert.cpp - 编译入口
文件内只定义了一个函数:
void assert(DWORD iii, DWORD where)
在 Linux 下编译会提示 assert
函数只需要一个参数却给了两个,这是因为与系统定义的 assert
函数冲突了,虽然 stdafx.h
中似乎取消了 assert
原来的定义:
#undef assert //???plam
重命名这个函数为 prologAssert
之类的别的名称可以避免错误,在 HeadFunc.h
中的下述声明也需要修改:
extern void assert(DWORD, DWORD);
assert
函数体内的 Program
在 Intelig.cpp
文件中声明:
DWORD *Functors, *Program, *Program2, *ProgTail, *Pointers;
在 Global.cpp
中赋值:
Program=(LPDWORD)GlobalLock(hProgram);
Intelig.cpp - 加载语法文件(.add和.def)
void compile(int flag)
{
...
file.SeekToBegin();
f_end=file.Read(string, L_BUFER);
...
}
string
即 IDE 读取到的 Standard.def
的文件内容。
stdafx.h - 引入MFC库
Graphic.h - Strawberry Prolog 图形相关函数的实现
来源:oschina
链接:https://my.oschina.net/baytars/blog/3196135