【源码分析】Strawberry Prolog 5.0 源码分析

百般思念 提交于 2020-03-16 20:25:08

某厂面试归来,发现自己落伍了!>>>

源码下载

前言

介绍 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 函数体内的 ProgramIntelig.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 图形相关函数的实现

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!