Skip to content

6.1 记号 ​

PSPP 将大多数语法文件的行划分为称为_记号_的一系列短片段。这些记号随后被组合成命令,每条命令告知 PSPP 采取某种操作——读入数据、写出数据、执行统计过程等。下面描述每种类型的记号。

标识符

标识符是通常指定变量、命令或子命令的名称。标识符的首字符必须是字母、‘#’ 或 ‘@’。标识符的其余字符必须是字母、数字,或下列特殊字符之一:

. _ $ # @

标识符可以为任意长度,但只有前 64 字节有效。标识符不区分大小写:foobar、Foobar、FooBar、FOOBAR 和 FoObaR 是同一标识符的不同表示形式。

部分标识符是保留的。保留标识符除本手册中明确描述的上下文外,不得用于任何其他上下文。保留标识符如下:

ALL AND BY EQ GE GT LE LT NE NOT OR TO WITH

关键字

关键字是标识符的一个子类,构成命令语法中固定的一部分。例如,命令名与子命令名就是关键字。如果缩写无歧义,关键字可缩写为其前 3 个字符。(3 个或更多字符的唯一缩写也可接受:‘FRE’、‘FREQ’ 和 ‘FREQUENCIES’ 在最后一个是关键字时等价。)

保留标识符总是用作关键字。其他标识符既可用作关键字,也可用作用户定义的标识符,例如变量名。

数字

数字以十进制表示。小数点可选。数字可用科学记数法表示,方法是添加 ‘e’ 和 10 为底的指数,因此 ‘1.234e3’ 的值为 1234。以下是更多有效数字的示例:

-5  3.14159265359  1e100  -.707  8945.

负数用 ‘-’ 前缀表示。但是,在期望字面 ‘-’ 记号的场合,看似负数的内容会被当作 ‘-’ 后跟一个正数。

数字记号内部不允许有空白,但在 ‘-’ 与数字其余部分之间的水平空白除外。

上面最后一个示例 ‘8945.’,如果它是行上的最后一个记号,会被解释为两个记号:‘8945’ 和 ‘.’。见 由记号组成命令。

字符串

字符串是用成对单引号(‘'’)或双引号(‘"’)括起来的字面字符序列。要在字符串中包含用于引号的字符,将其双写即可,例如 ‘'it''s an apostrophe'’。字符串内部的空白与字母大小写是有意义的。

字符串可用 ‘+’ 连接,因此 ‘"a" + 'b' + 'c'’ 等价于 ‘'abc'’。为了使长字符串可以跨行断开,在 ‘+’ 之前或之后(或前后同时)可以出现换行。(但是,‘+’ 之前或之后的完全空行会被解释为结束当前命令。)

字符串也可以通过用 ‘x’ 或 ‘X’ 作为起始引号字符的前缀,以十六进制字符值表示。无论语法文件或活动数据集的编码如何,字符串中的十六进制数字都被解释为 UTF-8 编码的 Unicode 字符。

单个 Unicode 码点也可以通过用 ‘u’ 或 ‘U’ 作为单引号或双引号的前缀,并指定十六进制码点编号来表示。例如,Unicode 码点 U+1D11E(音乐高音谱号字符)可表示为 U'1D11E'。无效的 Unicode 码点(高于 U+10FFFF,或介于 U+D800 与 U+DFFF 之间)不被允许。

当字符串用 ‘+’ 连接时,每一段的前缀单独考虑。例如,'The G clef symbol is:' + u"1d11e" + "." 会在一个原本纯文本的字符串中间插入一个高音谱号符号。

标点符号与运算符

这些记号是标点符号与运算符:

, / = ( ) + - * / ** < <= <> > >= ~= & | .

其中大多数出现在命令的语法内部,但句号(‘.’)标点符号仅用于命令的末尾。它作为标点符号只出现在一行最后一个字符(空白除外)的位置。当它是行上最后一个非空白字符时,句号不被视为另一个记号的一部分,即使它原本可能是一个记号的一部分,例如标识符或浮点数的一部分。

基于 GNU PSPP 2.0.1 手册与入门教程整理