我是计算机科学专业的学生,我正在学习Prolog的逻辑编程。
我找到了一个有趣的Prolog翻译, picoProlog (http://spivey.oriel.ox.ac.uk/corner/Logic_Programming)。
要了解有关Prolog的更多信息,我正在尝试编译他们的源代码,但我失败了。
在这个网页上,他们说:
解释器源是用Pascal的最小方言编写的,避免了许多功能,包括指针,但使用宏来克服Pascal的一些局限性,其风格受到Kernighan和Plauger的书中Pascal软件工具的启发。它带有一个从Pascal方言到C语言的翻译器,可用于构建解释器,也可用于所需的宏处理器。
要在Linux机器上构建解释器,只需解压缩tar文件并输入make。该建筑分几个阶段进行:
- 首先,Pascal-to-C转换器ptc是从C源构建的,包括用lex和yacc编写的词法分析器和解析器。文件README提供了该翻译器接受的非常有限的Pascal子集的一些细节。
- 接下来,ptc用于构建宏处理器ppp。
- 最后,picoProlog解释器是根据文件pprolog.x中的源代码构建的,首先使用ppp扩展宏以获取文件pprolog.p,然后使用ptc转换为C,最后编译C代码。
醇>文本和软件版权©J。M. Spivey,1996,2002,2010。
他们说仅在Linux上编译,所以我不知道如何在Windows机器上编译这个源代码。我可以在 Windows XP 上使用 Turbo Pascal 7.0 (无任何要求)进行编译吗?你能删除 Pascal编译的部分脚本吗?
答案 0 :(得分:3)
为了避免花更多的时间来运行P2C / PTC引导,而你可能只对解释器而不是它的* nix引导感兴趣,我认为更容易忘记PTC的东西,并专注于获取pascal部分编译/使用FPC 2.6.x. (下面花了10分钟),生成一个独立的Windows EXE,添加了10到20行代码。
从ppp开始,嗯,编译(nand works!)开箱即用:
D:\dls\prlg\pprolog>fpc ppp.p
Free Pascal Compiler version 2.6.2 [2013/02/12] for i386
Copyright (c) 1993-2012 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling ppp.p
Linking ppp.exe
394 lines compiled, 0.1 sec , 30352 bytes code, 1692 bytes data
代码确实看起来意味着输入管道。我们通过它(ppp)运行pprolog.x并且它(pprolog.pp)几乎编译。有四个问题,但通过在顶部添加一些代码而不更改原始代码(在源代码中标记为MVDV:)来解决所有问题
之后,pprolog.pp用FPC编译:
Free Pascal Compiler version 2.6.2 [2013/02/12] for i386
Copyright (c) 1993-2012 by Florian Klaempfl and others
Target OS: Win32 for i386
Compiling pprolog.pp
pprolog.pp(487,19) Warning: unreachable code
pprolog.pp(532,19) Note: Local variable "dummy" is assigned but never used
Linking pprolog.exe
2150 lines compiled, 0.1 sec , 84400 bytes code, 13932 bytes data
1 warning(s) issued
1 note(s) issued
一些注意事项:
我已将生成的编译源代码放在http://www.stack.nl/~marcov/files/pprolog.pp
祝你好运!答案 1 :(得分:3)
我在谷歌搜索时发现了这个问题,虽然它已经老了,但我认为从程序作者那里添加一个明确的答案会很有帮助。
使用Free Pascal编译器编译picoProlog确实不是很难。我已经将Marco的建议纳入了源代码,修复了一个被揭示的小错误,并为Free Pascal的一个奇怪功能添加了一个解决方法。结果可以在BitBucket页面上找到:
http://bitbucket.org/Spivey/pprolog
有关在README中构建的说明。
注意:我在x86_64的Linux下使用Free Pascal构建了这个,但是还没有在Windows上测试它。我无法理解为什么它无法运作。
答案 2 :(得分:2)
考虑到Pascal存在多少种不同的变体,我的直觉是,掌握Linux环境比调整Pascal源代码以适应您的编译器更容易。这只是第一步。
获得Linux环境?试试虚拟框 - https://www.virtualbox.org