函数和方法是一个东西:
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