8个版本
使用旧的Rust 2015
0.0.8 | 2015年5月1日 |
---|---|
0.0.7 | 2015年4月25日 |
0.0.1 | 2015年3月31日 |
#153 in #description
27 每月下载量
用于 ggp-rs
64KB
1.5K SLoC
GDL解析器
这是一个GDL(游戏描述语言)的解析器。GDL是Datalog的一个子集,但在用于GGP(通用游戏)时以KIF(知识交换格式)发送。此解析器专注于GDL而非KIF,以GGP为目的,目前正在ggp-rs中使用。
解析器将GDL字符串转换为AST,但不对此AST进行任何语义分析。它使用rust-peg解析器生成器。AST基于GGP Base中使用的AST,可以在此处查看。
安装
您可以通过将以下内容添加到您的Cargo.toml
的依赖关系部分来从crates.io安装此包:
gdl-parser = "*"
用法
extern crate gdl_parser;
use gdl_parser::parse;
println!("{:?}", parse("(role red) (role black)"));
文档
您可以在此处找到API文档。
语法
以下是语法的EBNF。我是通过检查GGP Base中的解析代码自己想出这个EBNF的,所以如果有任何错误,请报告。
description := { rule | sentence }
rule := '(' '<=' sentence { literal } ')'
sentence := prop_lit | ( '(' rel_lit ')' )
literal := ( '(' (or_lit | not_lit | distinct_lit | rel_lit) ')' ) | prop_lit
not_lit := 'not' literal
or_lit := 'or' { literal }
distinct_lit := 'distinct' term term
prop_lit := constant
rel_lit := constant { term }
term := ( '(' func_term ')' ) | var_term | const_term
func_term := constant { term }
var_term := '?' constant
const_term := constant
(* ident is any string of letters, digits, and underscores *)
constant := ident
许可
依赖
~225KB