6个版本
0.1.6 | 2020年9月28日 |
---|---|
0.1.5 | 2020年9月25日 |
#2752 in 解析器实现
4KB
Ogma
Ogma(以这位人物的名字命名)是一个用于创建自然语言DSL的库。具体来说,该库提供便利的宏,用于将函数包装起来以解析英语参数。
示例
#[given(Add, "the addition of q`input` and d`constant` henceforth q`out`")]
fn add<'a>(
ctx: &mut Context,
input: &Vec<Query<'a>>,
constant: i32,
out: &Vec<Query<'a>>,
) -> Result<(), Trap> {
// get global variable from `ctx` using `input`, add `constant` to it
// and save to `ctx` via `out`
Ok(())
}
然后您可以在脚本中使用它
let mut ctx = bdd::Step::new();
let script = Module::compile(
&mut ctx,
r#"
Given the addition of the input and 2 henceforth the left
And the product of the input and 2 henceforth the right
When the left is equal to the right
Then do nothing
"#,
)
.unwrap();
let mut instance = script.instance();
instance.ctx_mut().set_global::<_, i32>("input", 2);
assert!(instance.exec().is_ok());
许可证:MIT OR Apache-2.0
依赖关系
~2MB
~49K SLoC