Parrot 編譯器工具(PCT)被設計來設計高階語言的編譯器和執行時期環境。抽象化和自動化撰寫 Parrot 編譯器的過程。
NQP 是一個 Perl6 的子集,不需要執行時期函式庫
PGC 是 Perl6 的正規表示式實作和文法工具
HLL 編譯器幫助管理和封裝編譯過程。一個 HLL 編譯器物件被建立後,使用者就可以從命令列和編譯器互動,批量處理原始碼檔案,或是在執行時期進行執行時期求值。
一個 PCT 為基礎的編譯器由三個基本檔案組成。主要的進入點通常被寫成 PIR,文法規格書寫給 PGE,文法動作檔案寫給 NQP。這是三個必要的組件,大部分語言都需要額外檔案來產生執行時期函式庫和其他特性。
主要檔案 主要檔案通常是個 PIR 包含建立和執行編譯器物件的 :main 函式。此程式初始化一個 PCT::HLLCompiler 子類別,載入必要的支援函式庫,初始化任何編譯器或是語言指定的檔案
文法檔案 高階語言的文法檔案存成 .pg 檔。包含了 PCT::Grammer 的子類別並實作所有必要的規則 —— 寫成 PGE —— 來剖析語言。
動作檔案 動作檔案包含方法 —— 寫成 NQP —— 在 PCT::Grammer::Actions 物件裡,接受文法規則剖析後的資料,建立 Parrot 抽象語法樹。
PCT 的工作流程可以簡單客製化。編譯器丟出 HLL 原始碼給文法引擎。文法引擎剖析原始碼並傳回特定的匹配物件來呈現剖析後的原始碼。編譯器把匹配物件丟給動作方法,轉換成 Parrot 文法剖析樹。編譯器最後把 Parrot 文法剖析樹轉成 PIR 程式碼來存成檔案或是轉成 bytecode,或是馬上執行。
PCT 包含一個工具來自動產生這些檔案:mk_language_shell.pl。這程式為你的語言自動建立新的 languages/ 資料夾,必要的三個檔案,函式庫的初始檔案,一個 setup.pir 腳本自動化建構流程,還有基本的測試鞍具來證明你的語言運作如你預期。
自動產生的檔案都是不完整的,需要額外的編輯來實作成完整語言,他們是一個好的起點。一行命令你就可以建立可用的編譯器,細節任你補完。
mk_language_shell.pl 傾向從 Parrot 倉儲執行。它接收一個參數:新專案的名字來建立專案。取名沒有一定的規則,Parrot 開發者建議所有 Parrot 為基礎的專案使用獨一無二的專案名。
參考一下 Perl5 散佈版本的名字 Active Perl 和 Strawberry Perl。Python 實作品則是 IronPython 和 Jython。Parrot 上的 Ruby 編譯器是 Cardinal。Parrot 上的 Tcl 編譯器是 Partcl。
從 Parrot 目錄可以這樣執行 mk_language_shell.pl
$ cd languages/ $ perl ../tools/dev/mk_language_shell.pl <project name>