这是关于zest设计的系列内容的一部分。流行的语言设计建议是先关注语义,稍后再担心语法。但作者认为语法设计被低估了,它对使用语言的主观感受有很大影响,且先解释语法再写语义更容易。
从语法方面,作者希望:
- 易于机器解析,理想是 LL(k)或接近。
- 易于人类解析,尤其是在浏览代码时能一眼看出基本结构和重要操作。
- 易于输入,至少在altgr-weur上。
- 对有经验的程序员熟悉。
对于各种符号,作者试图使其更具主题一致性,但又要避免与其他语言的肌肉记忆冲突,如[]
用于数组、元素/字段访问等。
数字语法如预期,'
用于字符串,字符串不能包含换行符,作者考虑允许使用整数转义的任意非 UTF-8 字节字符串但未确定语法。
名字为小写和短横线连接,算术运算符必须用空格包围。=
用于绑定名字到值。[]
用于复合字面量(由结构体构建),可省略某些键的引号等。
类型是一等公民,通过几个关键字创建,可组合类型构造器和结构体等。结构体字段用.
访问,作者曾用/
避免与小数点的歧义但仍习惯用.
。
函数调用和定义使用特定语法,函数参数与结构体语法相同,可用于模式匹配。添加/
用于统一函数调用语法以避免歧义。
序列化大值时类型先出现以利于高效解析,在模式中类型在变量后以提高可读性,可使用类型作为函数。{}
用于块,多个表达式用换行或;
分隔,单表达式块可用于分组,块的值是最后一个表达式的值。
避免 JavaScript 式的糟糕分号插入问题,规定表达式不能跨换行,仅在明显未结束时添加例外。@
用于可变引用,避免与其他语言的语法混淆,不允许名字遮蔽。
只有几个优先级规则组,均为左关联,二进制运算符需用空格分隔且不能混合,链接运算符不能用空格分隔且可混合,@
和/
的交互使用了一个略显尴尬的技巧。作者还考虑不使用短路布尔运算符,语法实际上接近 LL(k),AST 由递归下降解析器生成,模式在语义分析时检查,这种分层方法对工具友好且对人类也较友好。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。