編譯器

本書內容

前言

CPU0

處理器

虛擬機

組合語言

組譯器

編譯器

作業系統

打造CPU0

打造周邊裝置

相關書籍

打造編譯器

打造搜尋引擎

發明程式語言

設計作業系統

虛擬機器實作

重建網路

系統程式

訊息

相關網站

參考文獻

最新修改

簡體版

English

C0 語言的語法

BASE_LIST = BASE*
BASE = IF | FOR | WHILE | STMT ; | CLASS | METHOD | (PATH? (=> VAR_LIST)?)? BLOCK
IF = if (EXP) BASE (else BASE)?
FOR = for ( STMT ; EXP ; STMT) BASE
WHILE = while (EXP) BASE
STMT = (return|yield|throw) ITEM | PATH = (EXP | BLOCK)
CLASS = class Id is Id BLOCK
BLOCK = { (VAR_LIST) BASE_LIST }
EXP =  ( EXP Op2 EXP ) | ITEM (Op2 ITEM)?
ITEM = Int | Float | String | Id Op1? | PATH
PATH = Id(EXP_LIST?)? (. Id(EXP_LIST?)? )*
EXP_LIST = EXP (, EXP)*
VAR_LIST = VAR (, VAR)*
VAR = Id (= EXP)?

Id = [A-Za-z_][0-9A-Za-z_]*
Int = [0-9]+
Float = [0-9]+.[0-9]+
String = ".*"
Op2 = [+-/*%&|^><=|'<<'|'>>']
Op1 = (++ | --)

C0 語言的語意

所有的函數都可以表現為 closure 形式,只是多了一個 block 參數,這個 block 是 { … } 區塊的 closure 形式,會被傳入到函數 f 當中。

f(b, o, o, …)

class C is P {  
  def method(o, o, ...) { 
    PATH(o, o, ...) { 
    }
    .... { 
    }
  }
}

block C => o c(b) { ... }     ; b.closure = C ; C.default = P
    ; if C has no Parent then C.default = global;
block F => o c.f(b, o, o, ...)  { ... }           ; b.closure = F ; F.default = C
block CALL => o call(b, o, o,...) { ... }         ; b.closure = CALL; CALL.default = F
block B = o call(b, o, ....) { ... }              ; b.closure = CALL; CALL.default = F

Facebook

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License