1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2015年4月17日 |
---|
在 解析器工具 中排名 #272
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