1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2015年4月17日

解析器工具 中排名 #272

BSL-1.0 许可证

1KB

pct - 解析器构建工具包

pct 是一个用 Rust 编写的库,它提供了生成和执行 LL(1) 解析器的功能。

小贴士:不要使用这个。

它提供了以下功能

  • cfg::bnf::from_str:从一个包含 BNF 语法字符串创建一个 Cfg
  • cfg::ll1::generate_table:从一个 Cfg 创建 LL(1) 解析表。如果存在冲突,则引发恐慌。
  • cfg::ll1::parse:从一个 LL(1) 解析表和一个 Vec<cfg::Token>,返回用于推导向量的规则列表。如果不能推导,则引发恐慌。

限制

  • 不能消除左递归或左因式分解。左递归 无限循环。
  • 在返回选项而不是引发恐慌。欢迎。
  • 可能非常慢。
  • 起始符号只能指向一个产生式。

输入格式

一个示例输入可能是

S A B C
A
A d
B e
C
C f

这对应于语法

S → A B C
A → d | ε
B → e
C → f | ε

输入到 cfg::bnf::from_str 应根据以下规则构建

  • 规则由换行符终止。
  • 大写字母表示语法中的非终结符。
  • 小写字母表示语法中的终结符。
  • 行的第一个字母必须是大写,并且是规则的左侧。
  • 行中的其余部分是行的右侧;如果它为空,则是一个 epsilon 产生式。
  • 第一个规则用作起始规则。对于多个起始规则,请使用增强语法。

关于示例语法的说明

(0) S → A B C
(1) A → ε
(2) A → d ε
(3) B → e
(4) C →  ε
(5) C → f
FIRST
 A | d, ε
 B | e
 C | f, ε
 S | d, e

FOLLOW
 A | e
 B | F, $
 C | $
 S | $

解析表

   $  d  e  f
-------------
S:    0  0
A:    2  1
B:       3
C: 4        5

无运行时依赖项