erg/doc/zh_CN/compiler/parsing.md
Cai Bingjun 198117413f trifle
2022-10-14 21:01:52 +08:00

1.5 KiB
Raw Blame History

解析 Erg 语言

badge

空格的处理

Erg语法的一个特点是它对空间敏感 这是为了弥补因省略()而造成的表达力损失。在 Nim 中可以找到类似的语法,它也允许省略 ()

f +1 == f(+1)
f + 1 == `+`(f, 1)
f (1,) == f((1,))
f(1,) == f(1)
(f () -> ...) == f(() -> ...)
(f() -> ...) == (f() -> ...)

左值,右值

在 Erg 中,左侧的值并不像 = 的左侧那么简单 事实上,= 左侧有一个右值(非常令人困惑),而 = 右侧有一个左值 右值中甚至可以有左值

# i 是左边的值Array(Int) 和 [1, 2, 3] 是右边的值
i: Array(Int) = [1, 2, 3]
# `[1, 2, 3].iter().map i -> i + 1`是右边的值,但是->左边的i是左边的值
a = [1, 2, 3].iter().map i -> i + 1
# {x = 1; y = 2} 是右侧值,但 x, y 是左侧值
r = {x = 1; y = 2}

左侧和右侧值的精确定义是"如果它是可评估的,则为右侧值,否则为左侧值" 例如,考虑代码 i = 1; i,其中第二个 i 是右侧值,因为它是可评估的,但第一个 i 是左侧值。