# KRB Syntax

This section describes the syntax for defining rules in KRB files.

## Keywords

as | foreach | taking
assert | in | True
bc_extras | None | use
check | plan_extras | when
extending | python | with
False | step | without
fc_extras |  |

## Syntax of the Entire KRB File

    file ::= [NL]

             ['extending' IDENTIFIER ['without' {IDENTIFIER,}] NL]

             [{fc_rule}
              ['fc_extras' NL INDENT
                 {<python_statement> NL}
               DEINDENT]]

             [{bc_rule}
              ['bc_extras' NL INDENT
                 {<python_statement> NL}
               DEINDENT]
              ['plan_extras' NL INDENT
                 {<python_statement> NL}
               DEINDENT]]

The KRB file has three optional parts. It must contain at least one rule (either forward-chaining or backward-chaining).

The filename (minus the .krb extension) is the name of the rule base. This must be a legal Python identifier.

### Extending clause

The optional `extending` clause, if used, is the first line of the file. This defines the parent rule base that this rule base inherits from. It may also specify a list of backward-chaining goal names to be excluded from this inheritance.

### Forward-Chaining Section

If the krb file contains any forward-chaining rules, a Python source file will be created named <rb_name>_fc.py, where <rb_name> is the rule base name.

The syntax of a forward-chaining rule (fc_rule) is defined here.

The `fc_extras` may only be used if there are forward-chaining rules. This allows you to add other Python code (for example, `import` statements) to the generated Python source file.

### Backward-Chaining Section

If the krb file contains any backward-chaining rules, a Python source file will be created named <rb_name>_bc.py, where <rb_name> is the rule base name.

The syntax of a backward-chaining rule (bc_rule) is defined here.

The `bc_extras` can only be used if there are backward-chaining rules. This allows you to add other Python code (for example, `import` statements) to the generated Python source file.

In addition, if any of the backward-chaining rules have plan code (a with clause or any subgoals in the when clause with a plan_spec), a Python source file will be created named <rb_name>_plans.py, where <rb_name> is the rule base name.

You use the `plan_extras` to include arbitrary Python code in this plans file.

Copyright © 2007-2009 Bruce Frederiksen

Page last modified Mon, Oct 27 2008.