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编码

GPL-3.0-or-later

44KB
1K SLoC

stelar

stelar是一个SLR解析器

为什么是stelar?因为SteLaR。

SLR解析表的生成绝对没有优化,因此您应该只生成一次,通过serde序列化保存在某处,然后再以这种方式检索它

用法

您需要定义两种类型,TNT,两者都需要是 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 相关联的标记 TOption<V>)。

有了这个,你可以创建和解析数据。

示例

关于如何完成所有工作的示例,请参阅 calc_grammar

依赖关系

~0–0.9MB
~11K SLoC