我可以使用 clips inside 机制来创建我的自定义 cod 解析器吗?
Can I use clips inside mechanism to create my custom cod parser?
出于创建知识编辑器的目的,我想解析剪辑规则并以更欣赏的方式表示它。任何帮助都是有价值的。
有一个名为 check-syntax 的函数(和 C API 等价的 CheckSyntax)可以告诉你一个结构在语义上是否正确:
CLIPS> (check-syntax "(deftemplate point (slot x) (slot y))")
FALSE
CLIPS> (check-syntax "(defrule print (point (slot ?x) (slot ?y)) =>)")
("
[PRNTUTIL2] Syntax Error: Check appropriate syntax for defrule.
ERROR:
(defrule MAIN::print
(point (
" FALSE)
CLIPS>
但是,该函数无法区分句法错误和语义错误的构造。在上面的示例中,deftemplate 点在语义和句法上都是正确的。打印规则在句法上是正确的,但在语义上是不正确的,因为尚未定义点 deftemplate。
基本编程指南的附录 G 有 CLIPS BNF,因此如果您想创建一个检查语法的解析器,这是一个很好的起点。
出于创建知识编辑器的目的,我想解析剪辑规则并以更欣赏的方式表示它。任何帮助都是有价值的。
有一个名为 check-syntax 的函数(和 C API 等价的 CheckSyntax)可以告诉你一个结构在语义上是否正确:
CLIPS> (check-syntax "(deftemplate point (slot x) (slot y))")
FALSE
CLIPS> (check-syntax "(defrule print (point (slot ?x) (slot ?y)) =>)")
("
[PRNTUTIL2] Syntax Error: Check appropriate syntax for defrule.
ERROR:
(defrule MAIN::print
(point (
" FALSE)
CLIPS>
但是,该函数无法区分句法错误和语义错误的构造。在上面的示例中,deftemplate 点在语义和句法上都是正确的。打印规则在句法上是正确的,但在语义上是不正确的,因为尚未定义点 deftemplate。
基本编程指南的附录 G 有 CLIPS BNF,因此如果您想创建一个检查语法的解析器,这是一个很好的起点。