2 – 语言

2 – 语言 本节描述 Lua 的词汇、语法和语义。换句话说,本节描述哪些记号是有效的,它们如何被组织到一起,以及这些组合代表什么意思。

本语言的构造将通过扩展巴科斯范式来解释,其中 {a} 表示 0 或多个 a,而 [a] 则表示一个可选的 a。非终结符用斜体显示,关健字用粗体显示,其它终结符用打印机字体显示,并用单引号引用。

2.1 – 词汇约定 Lua 中的标识符可以是任何非数字开头的字母、数字和下划线组成的字符串。这与大多数语言对标识符的定义相符。(字母的定义依照当前的区域设置而定:任何在当前区域设置中被看作是字母的字符均可被用在标识符中。)

下面的关健字被保留,不能作为标识符来使用:

and break do else elseif end false for function if in local nil not or repeat return then true until while

Lua 是一个大小写敏感的语言:“and” 是一个保留字,但 “And” 和 “AND” 两个不同且合法的标识符。作为一个约定,以一条下划线紧跟一个大写字母开头的标识符(如 _VERSION)被作为 Lua 使用的内部变量。

下面几行表示其它的记号:

+ – * / ^ = ~= <= >= < > == ( ) { } [ ] ; : , . .. …

字面字符串可以用单引号或双引号界定,而且包含下面的一些类 C 的转义序列:

/a — 响铃 /b — 回退 /f — 换页 /n — 换行 /r — 回车 /t — 水平制表符 /v — 垂直制表符 // — 反斜杠 /" — 引号 /’ — 撇号 /[ — 左方括号 /] — 右方括号

此外,’/newline'(即一个反斜杠跟一个真的换行符)会在字符串中形成一个换行符。字符串中的一个字符也可以用它的数值来指定,使用’/ddd’这样的转义序列,这里ddd是一个三位十进制数字序列。Lua 中的字符串可以包含任何8位值,包括嵌入的0,它可以用’/0’来指定。

字面字符串也可以用匹配的双方括号 [[···]] 来界定。在这样的括号形式中的字符串可以贯穿多行,可以包含嵌套的 [[···]] 对,而且不会解释任何转义序列。为了方便,当 ‘[[‘ 紧跟一个换行符时,该换行符不会被包含到字符串中。例如,在一个使用 ASCII(其中 ‘a’ 被编码为 97, 换行符被编码为 10, 而 ‘1’ 被编友为 49) 的系统中,下面四个字面字符串表示同一个字符串:

(1) "alo/n123/"" (2) ‘/97lo/10/04923"’ (3) [[alo 123"]] (4) [[ alo 123"]]

数字常量的书写中可以包含可选的小数部分和可选的指数部分。合法的数字常量的例子有

3 3.0 3.1416 314.16e-2 0.31416E1

句释在字符串以外的任何地方以双连字符(–)开始。如果紧跟 — 的文本不是 [[,该句释是短句释,贯穿至该行的行尾。否则,它是一个长句释,贯穿到对应的 ]] 处。长句释可以贯穿多行且可包含嵌套的 [[···]] 对。

为了方便,程序块中的第一行如果以 # 开始会被跳过。这一功能使 Lua 在 Unix 系统中被用作一个脚本解释器。

2.2 – 值和类型 Lua 是一个动态类型语言。这意味着变量没有类型;只有值才有。在语言中没有类型定义。所有的值携带它们自己的类型。

在 Lua 中有八种基本类型:nil, boolean, number, string, function, userdata, thread 和table。Nil 是值 nil 的类型,它的主要属性是与任何其它的值都不同;通常它表示没有可用的值。Boolean是值true 和 false 的类型。在 Lua 中,nil 和 false 都构成一个 false 条件;任何其它值构成 true。Number 代表(双精度浮点)实数。(生成使用其它数值表示--如单精度浮点型或长整型--的 Lua 解释器是很容易的。)String 表示字符数组。Lua 是纯8位的:字符串可以包含任意的8位字符,包括内嵌0(‘/0’)(参见 2.1)。

函数在 Lua 中是第一类(first class)值。意即函数可以被保存在变量中,作为参数传递给其它函数,并被作为结果返回。Lua 可以调用(和操纵)用 Lua 和 C 写的函数(参见 2.5.7)。

先知三日,富贵十年。

2 – 语言

相关文章:

你感兴趣的文章:

标签云: