• ## 2.1 statement中的expr类别
  1. expr是什么
    可以认为expr 是一个表达式, 最后会得到一个值, 表达式 可能是

    1. unop 的 比如 -a、not a 、 #a
    2. simpleexp 比如 123 、”123″, nil, true, false, …, a()
    3. binop 比如 1+2, 1 and 1, 1 < 2
  2. exprstat 分为
    • func
      • 例如 test()
    • assignment
      • 例如 a = test()
  3. primaryexp 分为
    • prefixexp
  4. prefixexp 分为
    • 变量名TK_NAME
    • ‘(‘expr’)’
  5. primaryexp 在处理完prefixexp之后,他的前面可能是一个变量名,也可能是一个被()包起来的表达式,那么接下去可能遇到的是
    • . 函数名. 取值
      • .之后 又是一个名称 类似 a.b 或者 a:b()
    • [ 认为是table要取内容
      • expr 类似 要取 a[expr] 的值
    • : 函数名: 认为接下去是函数
      • :之后 又是一个名称 a:b()
    • ( 、字符串 、{ 函数的参数
  6. assignment 分为
    • , 则又是一个 primaryexp
    • = 则是一个 explist1
  7. explist1
    • , 解析 {expr,expr,expr}
  8. expr
    • unop
      • ‘-‘
      • not
      • ‘#’
    • simpleexp
      • 数字
      • 字符串
      • nil
      • true
      • false
      • {
      • 函数体
      • primaryexp
    • binop
      • 有’+’ | ‘-‘ | ‘*’ | ‘/’ | ‘%’ | ‘^’ | ‘&’ | ‘|’ | ‘~’ | ‘<<‘ | ‘>>’ | ‘..’ | ‘>’ | ‘<‘ | ‘=’ | ‘>=’ | ‘<=’ | ‘‘ | ‘~=’ | and | or

发表评论