#lua #nom #parser

nom-lua

Lua 5.3 解析器,使用 nom 编写

1 个不稳定版本

使用旧版 Rust 2015

0.0.2 2017 年 5 月 8 日

#166 in #lua


用于 llang

MIT/Apache

60KB
1K SLoC

nom-lua travis-badge appveyor-badge coveralls-badge license-badge docs-badge

Lua 5.3 解析器,使用 nom 编写

语法

  • 代码块(需要测试)
  • 代码块
  • 语句
    • ";"
    • 变量列表 = 表达式列表
    • 函数调用(依赖函数调用)
    • 标签
    • "break"
    • goto
    • do end
    • while
    • repeat until
    • if
    • for
    • for in
    • function(依赖函数名)
    • local function
    • local
  • 返回语句(需要测试)
  • 标签
  • 变量列表(依赖变量)
  • 变量
  • 名称列表(需要测试)
  • 表达式列表(需要测试)
  • 表达式(需要测试)
    • 数字
    • 空值
    • 布尔值
    • 字符串字面量
    • "..."
    • 函数定义
    • 前缀表达式
    • 表构造器
    • 运算符
  • 前缀表达式(需要完成)
  • 函数调用(依赖参数,前缀表达式)
  • 参数(依赖表达式列表,表构造器,字符串字面量)
  • 函数名
  • 函数定义
  • 函数体
  • 参数列表
  • 表构造器(需要测试)
  • 字段列表(需要测试)
  • 字段
  • 字段分隔符
  • 二进制运算符(优先级错误)
  • 一元运算符
  • 名称
  • 数字
    • 数字
    • 十六进制数字
    • 浮点数
    • 十六进制浮点数
  • 字面量字符串
    • 短字面量
      • 换行符
      • 字节
      • Unicode
      • 转义字符
      • '\z'
    • 字面量

待办事项

  • 不同的整数和浮点数值(i32, f32)
  • 更好的语法错误
  • 溢出时回退到浮点数
  • 基准测试
  • 模糊测试
  • 将测试改为失败而不是恐慌
  • 在更多操作上强制执行 ASTNodes 的正确性。例如,BinOp 可以取 BinOp 枚举而不是 ASTNode
  • 在 CI 上构建所有功能

许可证

nom-lua 主要在 MIT 许可证和 Apache 许可证(版本 2.0)的条款下分发。

有关详细信息,请参阅 LICENSE-APACHELICENSE-MIT

依赖项

~695KB
~14K SLoC