erg/doc/zh_TW/compiler/parsing.md
Cai Bingjun 557f03ffc9 WIP
2022-10-15 12:18:04 +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 是左側值。