Skip to content

Latest commit

 

History

History
64 lines (42 loc) · 1.71 KB

0X06定义Lua(2).md

File metadata and controls

64 lines (42 loc) · 1.71 KB

0X06 定义 Lua (2)

标识符(Name)

标识符(Name),是一个非常重要的概念.标识符可以用来命名变量或者标签,很多语句的定义都用到了它.

首先我们先定义一个和 Name 有点差异的 NameString.

NameString = (Letter |  '_') , {Letter | Digit | '_'};

Name 就是从 NameString 中排除所有的关键字:

KeyWords = 'and' | 'break' | 'do' | 'else' | 'elseif' | 'end' | 'false' | 'for' | 'function' | 'goto' | 'if' | 'in' | 'local' | 'nil' | 'not' | 'or' | 'repeat' | 'return' | 'then' | 'true' | 'until' | 'while';
Name = NameString - KeyWords;

表达式

exp = NilValue | BoolValue | Numeral | LiteralString | '...' | functiondef | prefixexp | tableconstructor | exp, binop, exp | unop exp;

表达式和语句(stat)类似,包含非常多内容,并且嵌套了自身.

其中用到的的一些名词我们已经介绍过,剩下的我们将会在后边介绍.

表构造

这一部分介绍的是构造表的语法.

tableconstructor = '{', [fieldlist], '}';
fieldlist = field, {fieldsep, field}, [fieldsep];
field = '[', exp, ']', '=', exp | Name, '=', exp | exp;
fieldsep = ',' | ';';

之前可能漏讲了一点关于 Lua 表构造表达式的内容--不同成员项目之间可以用逗号分隔,也可以用分号分隔.

运算符

二元运算符

binop =  '+' | '-' | '*' | '/' | '//' | '^' | '%' | '&' | '~' | '|' | '>>' | '<<' | '..' | '<' | '<=' | '>' | '>=' | '==' | '~=' | and | or;

一元运算符

unop = '-' | not | '#' | '~';

注意这些同样是语法层面的定义,并不能检测变量可不可以进行这样的运算.

逻辑值和nil

NilValue = 'nil';
BoolValue = 'true' | 'false';