#peg #parser

nightly p-arse

不优雅的解析器

1个不稳定版本

0.0.1 2021年12月27日

#58 in #peg

GPL-3.0许可证

33KB
846

p-() — 不优雅的解析器

p-arse是一个专注于可读性和类型安全的PEG解析器库 • 它尽可能地遵循原始论文的语法 • 解析器是无参数的(它们通常是变量,而不是函数),与nom的解析器相反,后者是函数或函数的组合 • 这鼓励用户绑定并命名许多中间解析器 • 在这方面与pest相似

警告:项目处于早期阶段

示例

let parse_hex_dd = |s: &str| {
    u8::from_str_radix(s, 16).unwrap()
};
let construct_color = |(r, g, b)| Color { r, g, b };

let hex_d = ('0'.to('9')).or('a'.to('f'));
let hex_dd = (hex_d, hex_d).maps(parse_hex_dd);
let color = ("#", hex_dd, hex_dd, hex_dd).r0().map(construct_color);

let (color, _tail) = color.p_arse("#defec8").unwrap();

查看其他示例:示例 • 我有一些来自其他解析器库的复制示例,例如 nom的十六进制颜色 (我的), pest的标识列表 (我的) 和 pom的json (我的)

待办事项

  • 添加文档
  • 添加详细错误消息
  • 允许访问解析器捕获的字符串切片(其子捕获的连接)(有点工作,除了使用.rn()的情况)

参考

  1. https://bford.info/pub/lang/peg.pdf

依赖