热情:语法

这是关于zest设计的系列内容的一部分。流行的语言设计建议是先关注语义,稍后再担心语法。但作者认为语法设计被低估了,它对使用语言的主观感受有很大影响,且先解释语法再写语义更容易。

从语法方面,作者希望:

  • 易于机器解析,理想是 LL(k)或接近。
  • 易于人类解析,尤其是在浏览代码时能一眼看出基本结构和重要操作。
  • 易于输入,至少在altgr-weur上。
  • 对有经验的程序员熟悉。

对于各种符号,作者试图使其更具主题一致性,但又要避免与其他语言的肌肉记忆冲突,如[]用于数组、元素/字段访问等。

数字语法如预期,'用于字符串,字符串不能包含换行符,作者考虑允许使用整数转义的任意非 UTF-8 字节字符串但未确定语法。

名字为小写和短横线连接,算术运算符必须用空格包围。=用于绑定名字到值。[]用于复合字面量(由结构体构建),可省略某些键的引号等。

类型是一等公民,通过几个关键字创建,可组合类型构造器和结构体等。结构体字段用.访问,作者曾用/避免与小数点的歧义但仍习惯用.

函数调用和定义使用特定语法,函数参数与结构体语法相同,可用于模式匹配。添加/用于统一函数调用语法以避免歧义。

序列化大值时类型先出现以利于高效解析,在模式中类型在变量后以提高可读性,可使用类型作为函数。{}用于块,多个表达式用换行或;分隔,单表达式块可用于分组,块的值是最后一个表达式的值。

避免 JavaScript 式的糟糕分号插入问题,规定表达式不能跨换行,仅在明显未结束时添加例外。@用于可变引用,避免与其他语言的语法混淆,不允许名字遮蔽。

只有几个优先级规则组,均为左关联,二进制运算符需用空格分隔且不能混合,链接运算符不能用空格分隔且可混合,@/的交互使用了一个略显尴尬的技巧。作者还考虑不使用短路布尔运算符,语法实际上接近 LL(k),AST 由递归下降解析器生成,模式在语义分析时检查,这种分层方法对工具友好且对人类也较友好。

阅读 18
0 条评论