I think that Archana posted a mail last 20 feb asking if there was a BNF grammar for JESS.
 
Here is a LL(1) grammar of JESS (6.03) in BNF, which I suppose is correct (thanks for any comment) :
 
(e = empty)
 
<JESS> ::= <defs> | e
<defs> ::= <def> <defs>
<def> ::= <atom> | <string> | <variable> | <multivariable> | <float> | <integer> | <funcall> |
  <defrule> | <defquery> | <deffacts> | <deftemplate> | <deffunction> | <defglobal>
 
<defrule> ::= ( defrule <atom> <docString> <declaration> <LHS> => <actions> )
<docString> ::= <string> | e
<declaration> ::= ( declare <valuePair> <valuePairs> ) | e
<valuePairs> ::= <valuePair> <valuePairs> | e
<valuePair> ::= ( <atom> <liste> )
<liste> ::= <atom> | <string> | <variable> | <multivariable> | <float> | <integer> | <funcall>
<funcall> ::= ( <functor> <arguments> )
<functor> ::= <atom> | = | <variable>
<argument> ::= <atom> | <string> | <variable> | <multivariable> | <float> | <integer> | <nestedFuncalls>
<arguments> ::= <argument> <arguments> | e
<nestedFunclass> ::= ( assert <fact> ) | ( modify <valuePair> ) | ( <funcall> )
<fact> ::= ( <atom> <factSlot> <factSlots> )
<facts> ::= <fact> <facts> | e
<factSlot> ::= <orderedSlot> | <notOrderedSlot>
<factSlots> ::= <orderedSlot> factSslots> | <notOrderedSlot> <factSlots> | e
<orderedSlot> ::= <slot> <slots>
<notOrderedSlot> ::= ( <atom> <slot> <slots> )
<slot> ::= <atom> | <string> | <variable> | <multivariable> | <float> | <integer> | <funcall> | = <funcall>
<slots> ::= <slot> <slots> | e
<LHS> ::= <pattern> <LHS> | <variable> <- <pattern> <LHS> | e
<actions> ::= <funcall> <actions> | e
 
<pattern> ::= ( <patternValue> )
<patterns> ::= <pattern> <patterns> | e
<patternValue> ::= <group> <patterns> | <test> <funcall> | <otherCE>
<group> ::= not | and | or | exists | unique | explicit
<test> ::= test
<otherCE> ::= <atom> <slotCE>
<slotCE> ::= <patternSlotDatas> | <orderedSlotData> | ( <unorderedSlotData> ) | e
<patternSlotDatas> ::= <orderedSlotData> <orderedSlotDatas> | ( <unorderedSlotData> ) <unorderedSlotDatas> | e
<orderedSlotDatas> ::= <orderedSlotData> <orderedSlotDatas> | e
<unorderedSlotDatas> ::= ( <unorderedSlotData> ) <unorderedSlotDatas> | e
<orderedSlotData> ::= <slotData>
<unorderedSlotData> ::= <atom> <slotData>
<slotData> ::= <not> <slotData2> <and>
<slotData2> ::= <variable> | <multivariable> | <atom> <column> |
  <string> <funcall> | <float> <funcall> | <integer> <funcall> | = <funcall>
<not> ::= ~ | e
<and> ::= & | e
<or> ::= '|' | e
<column> ::= : <funcall> | <funcall>
 
<defquery> ::= ( defquery <atom> <docString> <declaration> <LHS> )
 
<deffacts> ::= ( deffacts <atom> <docString> <facts> )
 
<deftemplate> ::= ( deftemplate <atom> <extends> <docString> <slotDescs> )
<extends> ::= extends <atom> | e
<slotDescs> ::= ( <slotType> ) <slotDesc>
<slotDesc> ::= ( <slotType> ) <slotDesc> | e
<slotType> ::= slot <atom> <slotQualifier> <slotQualifiers> |
  multislot <atom> <multiSlotQualifier> <multiSlotQualifiers>
<slotQualifier> ::= <multiSlotQualifier> | ( type <token> )
<slotQualifiers> ::= <slotQualifier> <slotQualifiers> | e
<multiSlotQualifier> ::= ( default <slotValue> ) | ( default-dynamic <slotValue> )
<multiSlotQualifiers> ::= <multiSlotQualifier> <multiSlotQualifiers> | e
<slotValue> ::= <atom> | <string> | <float> | <integer> | <funcall>
 

<deffunction> ::= ( deffunction <atom> <docString> ( <parameters> ) <docString> <values> )
<parameter> ::= <variable> | <multiVariable>
<parameters> ::= <parameter> <parameters> | e
 
<defglobal> ::= ( defglobal * <variable> * = <values> )
<value> ::= <atom> | <string> | <variable> | <multivariable> | <float> | <integer> | <funcall>
<values> ::= <value> <values> | e
 
 
Emmanuel L�charny, IKTEK
06 08 33 32 61, www.iktek.com
 

Reply via email to