4个版本
| 0.1.3 | 2019年8月9日 |
|---|---|
| 0.1.2 | 2019年8月8日 |
| 0.1.1 | 2019年8月6日 |
| 0.1.0 | 2019年8月6日 |
#1690 在 编码
44KB
1K SLoC
stelar
stelar是一个SLR解析器
为什么是stelar?因为SteLaR。
SLR解析表的生成绝对没有优化,因此您应该只生成一次,通过serde序列化保存在某处,然后再以这种方式检索它
用法
您需要定义两种类型,T 和 NT,两者都需要是 Hash + Clone + PartialEq + Eq。
此外,如果您想得到更有意义的错误,您应该有 Debug。
T 是标记,或终结符类型,表示输入值。NT 是语法构造。
然后您必须定义形式为 (NT, Vec<Symbol<T, NT>>) 的规则并调用 create_rules。
为了使规则定义更容易,有一个宏 rule_rhs![],它通过创建一个 Vec 的符号来实现,使得 [..., Foo, ...] 映射到 Symbol::Terminal(Foo),并且 [...., (Bar), ....] 映射到 Symbol::NonTerminal(Bar)。
并且一个语法 g 是这样一个规则的 Vec,使得 g[i].index == i。
使用这个语法,你可以生成一个 ParseTable<T, NT>。
然后你需要一个 ValuedToken<T, V> 的迭代器,这是一个可能与值 V 相关联的标记 T(Option<V>)。
有了这个,你可以创建和解析数据。
示例
关于如何完成所有工作的示例,请参阅 calc_grammar
依赖关系
~0–0.9MB
~11K SLoC