第 5 章:表达式与运算符

表达式 (Expressions) 是 Flurry 程序中计算值的基本方式。它们由字面量、变量、常量、运算符和函数调用等组合而成。Flurry 的表达式系统设计旨在提供强大的表达能力,同时通过一致的语法风格(特别是后缀操作)提升代码的可读性和流畅性。

本章将深入探讨 Flurry 中各种表达式的构成、运算符的行为与优先级,以及 Flurry 独特的“取像”操作。

核心概念:

  • 表达式求值: 任何表达式最终都会计算出一个值(除非它发散或产生副作用)。
  • 运算符: 用于组合或修改值的特殊符号(如 +, -, >, .)。
  • 优先级与结合性: 决定复杂表达式中运算符的计算顺序。Flurry 采用 Pratt 解析器常用的绑定力 (Binding Power) 或优先级方案来处理。
  • 后缀风格: Flurry 大量采用后缀运算符和操作(如 .field, .method(), .*, .ref, 'image),使得链式调用非常自然。
  • 无内置位运算符: Flurry 选择不提供传统的位运算符(&, |, ^, ~, <<, >>),而是依赖 bitvec 抽象视图或标准库函数(如 math 包)进行位操作。
  • 编译时连接 (++): ++ 运算符专用于编译时连接集合(如 str, meta.List)。

章节内容:

  • 常用运算符: 介绍 Flurry 支持的算术、比较、逻辑等运算符,并重点讨论它们的空格敏感性规则。
  • 后缀风格与链式调用: 详细阐述选择运算符 (.)、解引用 (.*)、取引用 (.ref) 以及其他后缀操作如何促进流畅的链式调用。
  • 取像操作 (expr ' image): 深入讲解 ' 操作符的用途,以及如何获取表达式的不同“像”。

理解 Flurry 的表达式求值规则和运算符行为是编写任何非平凡程序的基础。其独特的后缀风格和对位运算的处理方式是需要特别注意的设计点。