MyLang 语言 -- 自己的语言

 

函数和方法是一个东西:

function-name($argument-one, $argument-two)
$argument.function-name($argument-two)

如果是一个参数:

function-name($argument)
$arguemnt.function-name

如果在语法中插入代码,会增加语法的复杂度吗?

现在语法描述中,没有插入代码的空间,括号被 Group 占据,因为键盘符号,只有那么多,好吧,这都不是问题:

## grammar
rule -> :type Name (type $name)

每次解析到 type Name 的时候,就会动态的添加类型常量,这个数据是解析 my 语法所必须的数据,因为是强类型语言,每个符号在定义的时候都要声明其类型。

(my @buf Buffer)
(struct Cursor |name:int len:int|)

所以,应当给表达式预留一个语法空间,好处理类似的问题。其实插入语法的表达式很简单,无非是加入关键字,这些关键字作为数组,是某种数据类型作为 Order 解析代码的组件。

(push @names $name) (my @names Strs) (say "match new keyword")

语言的语法会一直变化,会变得更简洁,更有可读性:

关于操作符的优先级, 解析它们需要一个比较复杂的算法,是操作语法树层次的:

a + b - c * d / e

包声明

(ns package)

引用模块

(use module)

类型定义

(type String)

函数定义

(fn (fn-name args:type) :return-type exprs)

变量声明, 关于多变量同时赋值:在解构一个数据结构时,需要对两个或以上的变量同时赋值,这很常见:

(my $name value) (my [$name $value] (flat value))

变量赋值和变量声明不同:

$name = $other-name

 

转载于:https://my.oschina.net/u/563463/blog/1827437

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值