主要观点:认为现有编程语言中运算符优先级和结合性的处理方式存在不足,应采用非传递性运算符优先级。介绍了现有四种带中缀运算符的编程语言类别及其优缺点,通过测试表达式展示了各方式的不足,提出用偏序替代全序来处理运算符优先级,定义了非传递性优先级的概念及相关性质,通过具体示例展示了非传递性优先级在语言中的应用,还讨论了不混合不同结合性运算符的问题以及在 C 风格语言中添加赋值运算符的示例,最后提到已有类似提议但相关解析算法缺乏。
关键信息:
- 现有四类编程语言:全序优先级和全结合性(如 C 等)、全序优先级和部分结合性(如 Python 等)、单优先级和结合性(如 Smalltalk 等)、单优先级和非结合性(如 occam 等)。
- 测试表达式展示各方式在处理
x + y * z
等表达式时的不足。 - 非传递性优先级的定义及性质,包括等价关系和兼容序关系等。
- 具体示例语法展示非传递性优先级在整数和布尔表达式语言中的应用。
- 不混合不同结合性运算符的讨论及在 C 风格语言中添加赋值运算符的示例。
重要细节:
- 各种编程语言在运算符优先级和结合性处理上的具体规则和示例,如 Rust 中
x <= y == z
的处理。 - 非传递性优先级中各符号的含义和用法,如
≐
、⋖
等。 - 语法中括号、标签等用于表示结合性和优先级的具体方式,如
(E) = "(" (E) ")"
等。 - 不同示例中表达式的解析结果及原因,如
x < y < z
在不同优先级设置下的结果。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。