#parser #description #language #ast #string #game #gdl

gdl-parser

用于GDL(游戏描述语言)的解析器

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

MIT 协议

64KB
1.5K SLoC

GDL解析器

这是一个GDL(游戏描述语言)的解析器。GDL是Datalog的一个子集,但在用于GGP(通用游戏)时以KIF(知识交换格式)发送。此解析器专注于GDL而非KIF,以GGP为目的,目前正在ggp-rs中使用。

解析器将GDL字符串转换为AST,但不对此AST进行任何语义分析。它使用rust-peg解析器生成器。AST基于GGP Base中使用的AST,可以在此处查看。

GDL的规范可以在这里找到,KIF的规范可以在这里找到。

安装

您可以通过将以下内容添加到您的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

许可

MIT

依赖

~225KB