9b4aa785创建于 1月20日历史提交
文件最后提交记录最后更新时间
Update for Cangjie 1.0.04 个月前
Update for Cangjie 1.0.04 个月前
Update for Cangjie 1.0.04 个月前
Update for Cangjie 1.0.04 个月前
README.md

Egg 语言的cangjie实现

egg编程语言

egg语言来自《eloquent javascript》

解释器,它决定了编程语言中表达式的含义,只是一个程序。

Hal Abelson and Gerald Sussman, Structure and Interpretation of Computer Programs

Illustration

构建自己的编程语言出人意料地容易(只要你不要定得太高),而且非常令人豁然开朗。

在这一章中,我想展示的主要内容是,构建编程语言并没有什么魔法。我经常觉得某些人类发明如此聪明和复杂,以至于我永远无法理解它们。但通过一点阅读和实验,它们往往变得相当平凡。

我们将构建一种名为 Egg 的编程语言。这将是一种小巧简单的语言——但足以表达你所能想到的任何计算。它将允许基于函数的简单抽象。

类型介绍

  • 数值类型 Float64

  • 字符串类型被 ""包裹不支持 \转义

  • 数组

    array param1 param2 ...
    
  • 函数一等公民

    (fun (param1 param2 ...) body)
    
  • bool

​ ture false

语法

  • 使用() 为应用表达式,不支持(1)

  • 定义变量

    (define name value) 或 (define name(params...) body)
    
  • if

    (if condition consequence alternative)
    
  • while

    (while condition body)
    
  • do 按顺序执行所有表达式,并返回最后一个表达式的结果。

    (do expr1 expr2 ... exprN)
    

基本运算

  • 加法 返回 param1 + param2 + ... + paramN

    (+ param1 param2 ...)
    
  • 减法 返回 param1 - param2 - ... + paramN

    (- param1 param2 ...)
    
  • 乘法 返回 param1 * param2 * ... * paramN

    (* param1 param2 ...)
    
  • 除法 返回 dividend / divisor

    (/ dividend divisor)
    
  • 大于 返回 bool

    (> param1 param2)
    
  • 小于 返回 bool

    (< param1 param2)
    
  • 等于 返回 bool

    (== param1 param2)
    

内置函数

  • printf 输出

    (printf param1 param2 ...)
    
  • element 访问index位置的值

    (element arrayOrString index)
    
  • length 输出数组或者字符串的长度

    (length arrayOrSring)