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