簡體   English   中英

如何從源代碼編譯picoProlog?

[英]How to compile picoProlog from source code?

我是計算機科學專業的學生,​​我正在學習Prolog的邏輯編程。

我找到了一個有趣的Prolog解釋器, picoProloghttp://spivey.oriel.ox.ac.uk/corner/Logic_Programming )。

要了解有關Prolog的更多信息,我正在嘗試編譯他們的源代碼,但我失敗了。

在這個網頁上,他們說:

解釋器源是用Pascal的最小方言編寫的,避免了許多功能,包括指針,但使用宏來克服Pascal的一些限制,其風格受到Kernighan和Plauger的書中Pascal軟件工具的啟發。 它附帶一個從Pascal方言到C語言的翻譯器,可用於構建解釋器,也可用於所需的宏處理器。

要在Linux機器上構建解釋器 ,只需解壓縮tar文件並輸入make。 該建築分幾個階段進行:

  1. 首先,Pascal-to-C轉換器ptc是從C源構建的,包括用lex和yacc編寫的詞法分析器和解析器。 文件README提供了此轉換器接受的非常有限的Pascal子集的一些細節。
  2. 接下來,ptc用於構建宏處理器ppp。
  3. 最后,picoProlog解釋器是根據文件pprolog.x中的源代碼構建的,首先使用ppp擴展宏以獲取文件pprolog.p,然后使用ptc轉換為C,最后編譯C代碼。

文本和軟件版權©JM Spivey,1996,2002,2010。

他們說只關於在Linux上編譯 ,所以我不知道如何在Windows機器上編譯這個源代碼。 我可以在Windows XP上使用Turbo Pascal 7.0 (沒有任何要求)編譯它嗎? 你能刪除Pascal編譯的部分腳本嗎?

為了避免花更多的時間來運行P2C / PTC引導,而你可能只對解釋器而不是它的* nix引導感興趣,我認為更容易忘記PTC的東西並專注於讓pascal部分編譯/工作使用FPC 2.6.x. (下面花了10分鍾),生成一個獨立的Windows EXE,增加了10-20個代碼行。

從ppp開始,嗯,編譯(nand工作!)開箱即用:

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)來解決問題

  1. 一些范圍檢查錯誤,因為整數類型對於設置的1MB堆棧空間來說太小。 這禁止使用Turbo Pascal,但我們可以通過將integer定義為longint來解決它。
  2. 似乎它假定前向函數不需要在FPC中重復它們的參數,它們通常會修復。
  3. 在(“初始化”)的最后一個函數中,使用了一些非標准的ptc庫函數,這些函數借用C(argv,argc)而不是它們的典型pascal等價物。 固定。
  4. (測試后由原作者報告)ParseFactor有一個右手遞歸,可以通過讀取結果來代替。 啟用TP模式(使用行上方為{$ mode tp}),或添加()以消除歧義

在這之后,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

一些說明:

  1. UNTESTED
  2. 我不知道我是否完全正確地使用了argv / argc的范圍。 (0..argc-1,而paramcount是從1開始等)檢查是否有必要。
  3. 字符串系統早於TP字符串類型並且是復雜的(可能是因為PTC,請參閱README),我不知道它是否可行。

我把生成的編譯源代碼放在http://www.stack.nl/~marcov/files/pprolog.pp

祝好運!

我在谷歌搜索時發現了這個問題,盡管它已經過時了,但我認為從程序作者那里添加一個明確的答案會很有幫助。

使用Free Pascal編譯器編譯picoProlog確實不太難。 我已經將Marco的建議納入了源代碼,修復了一個被揭示的小錯誤,並為Free Pascal的一個奇怪功能添加了一個解決方法。 結果可以在BitBucket頁面上找到:

http://bitbucket.org/Spivey/pprolog

有關在README中構建的說明。

注意:我在Linux下在x86_64上使用Free Pascal構建了這個,但是沒有在Windows上測試它。 我看不出它為什么不起作用的原因。

鑒於Pascal存在多少種不同的變體,我的直覺是獲取Linux環境比調整Pascal源代碼以適應您的編譯器更容易。 這只是第一步。

獲得Linux環境? 試試虛擬機 - https://www.virtualbox.org

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM