用 PHP 寫一個"程式語言"

CryptoPanda發表於2018-12-21

php-lisp 是一個用PHP寫的lisp直譯器 (Just for fun)

  1. 單元測試覆蓋率 93%
  2. 全部使用 php declare(strict_types=1); 嚴格模式
  3. 核心直譯器0依賴 打包好的 phar 檔案只有 57K
  1. 使用 composer 安裝
    composer require php-lisp/php-lisp

  2. 下載 Phar 檔案
    wget https://github.com/php-lisp/php-lisp/releases/download/v1.0.1/psp

  3. clone 程式碼
    git clone git@github.com:php-lisp/php-lisp.git
    cd php-lisp && composer install && ./bin/psp -h

  1. 使用 REPL

    ./psp 
  2. 檢視幫助

    ./bin/psp -h
  3. 執行 psp 程式碼

    echo '(define zero (lambda (f) (lambda (x) x))) 
      (define one (lambda (f) (lambda (x) (f x)))) 
      (define plus (lambda (m n) (lambda (f) (lambda (x) ((n f) ((m f) x)))))) 
      (define mult (lambda (m n) (lambda (f) (lambda (x) ((n (m f)) x))))) 
      (define xp (lambda (m n) (lambda (f) (lambda (x) (((n m) f) x))))) 
      (define pr (lambda (x) (do (echo x) x))) 
      (define prn (lambda (n) (do ((n pr) ".") (echo "\n")))) 
      (define two (plus one one)) 
      (define three (plus two one)) 
      (define six (mult two three)) 
      (define sixty-four (xp two six)) 
      (prn sixty-four)'  >> church-encoding.psp  && ./bin/psp church-encoding.psp

更多 Demo 檢視 https://github.com/php-lisp/php-lisp/tree/...

參考

REPL
LISP
pharen
lispphp
mal
pEigthP

Email: itwujunze#gamil.com

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章