Répondre

2

Il y a une fonction appelée enregistrement Syntaxe (et API C CheckSyntax équivalent) qui peut vous dire si une construction est sémantiquement correcte:

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> 

La fonction, cependant, ne peut pas distinguer entre un syntaxiquement incorrect et construction sémantiquement incorrecte. Dans l'exemple ci-dessus, le point d'esquisse est sémantiquement et syntaxiquement correct. La règle d'impression est syntaxiquement correcte, mais pas sémantiquement correcte car le point deftemplate n'a pas été défini. L'annexe G du Guide de programmation de base a le CLIPS BNF, donc si vous voulez créer un analyseur qui vérifie la syntaxe, c'est un bon point de départ.