首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

手把手教你寫腳本引擎(三):語言核心設計——型別、堆疊、閉包與圖靈完備性

     編輯:關於C++

系列第三篇確立腳本語言核心規格:非惰性計算、弱型別、支援基本型別/陣列/函數指標、隱式轉型與函數多載。採 Pascal 風格語法避開 C 語言宣告解析複雜度,編譯目標為自製指令集配合虛擬機執行。

語言規格概覽

檔案結構

unit 單元名;
uses 單元名1, 單元名2, ...;

type
  新型別名 = 型別宣告;
  ...

var
  變數群: 型別;
  ...

interface
  公開函數宣告;

implementation
  公開與私有函數實作
end.

型別系統

  • 基本型別:boolean、integer、real、char、string
  • 陣列型別:array of 型別
  • 函數指標:type MyPtr = function(a,b:integer):integer;

函數與陳述句

  • 程序/函數:procedure 名(參數) / function 名(參數): 回傳型別
  • 參數支援 var 參考傳遞
  • 控制結構:if-then-else、for-to/downto、while-do、repeat-until、begin-end 區塊
  • 跳躍指令:continue、break、exit

運算子與表達式

算術:+ - * div mod /(/ 強制回傳 real)
邏輯:and or xor not
陣列/字串索引:expr[index](0-based,引用複製語意)

範例程式:質數判斷

unit PrimeTest;
uses IO;

interface
function IsPrime(Num: integer): boolean;

implementation
function IsPrime(Num: integer): boolean;
var i: integer;
begin
  result := true;
  if Num < 2 then result := false
  else if Num > 2 then
    for i := 2 to Num-1 do
      if Num mod i = 0 then result := false;
end;
end.

執行環境設計

資料表示

  • 基本型別:直接儲存(1/4/1/8 bytes)
  • 函數指標:全域函數 ID(等同 integer)
  • 字串/陣列:[RefCount:int][Data] 結構,引用計數實現自動記憶體管理
  • 字串寫時複製(Copy-on-Write):賦值共享緩衝區,修改前複製

呼叫堆疊幀結構

分段式堆疊,每幀包含:參數區、區域變數、暫存區、參數基址、返回位址。函數呼叫/返回時自動維護參考計數與幀指標。

指令集範例:A(x) { result := B(x+1, x-1); }

FUNCTION_A:
  00 push x;  01 push 1;  02 add;      // x+1
  03 push x;  04 push 1;  05 sub;      // x-1
  06 call FUNCTION_B;
  07 pushref result;  08 assign;       // 儲存返回值
  09 ret 1;

FUNCTION_B:
  10 push x;  11 push y;  12 mul;
  13 pushref result;  14 assign;
  15 ret 2;

語言特性選擇指南

需求建議特性
宿主頻繁回呼腳本函數閉包或函數指標型別
宿主 API 需接受多型參數無型別或弱型別
大型 API 需命名空間/類別組織類別系統
極致執行速度強/弱型別 + JIT 編譯
簡單設定腳本命令式、無運算式、無函數

圖靈完備性判據

具備陣列、閉包、或「結構+指標」即為圖靈完備(能表達遞迴資料結構)。

下篇預告

語法分析與語義分析實作細節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved