The syntax of CSI(C&F) programs is given by the following formal description using regular expressions (RE):
Program = StatSeq?StatSeq = Stat | StatSeq Stat
Stat = e | InputStat | PrintStat | ImportStat | ExportStat | DelStat | MemDumpStat | ExitStat |
GotoStat | LabelStat | CallStat | ProcStat | AssStat | IfStat1 | IfStat2 | LoopStat |
ForStat | ComStat | OperStat | ParaStat | TableStat | FuzzyVarStat | EvalTreeStat |
FuzzyCompStat | FuzzyConcStat | AggregateStat | EvalStat
ComStat = "/*" StatSeq? "*/"
OperStat = "OPERATORSET"
"IMPORTANCE" FuzzyOp
"AND" FuzzyOp
"OR" FuzzyOp
"CERTAINTY" FuzzyOp
"INFERENCE" FuzzyOp
"ACCUMULATE" FuzzyOp
"DEFUZZIFICATION" DefuzzyOp
"GAMMA" Number
"ACCURACY" Number
"END"
ParaStat = "PARAMETERSET"
"NAME" Ident
"LOWER" Number
"UPPER" Number
"MEDIAN" Number
"DISTIRBUTION" Number
"DILATATION" Number
"IMPORTANCE" Number
"TERMS" Ident+
"END"
TableStat = "TABLE" Ident
FuzzyVarStat = "FUZZYVAR" Ident Ident
EvalTreeStat = "EVALTREE" Ident Ident (Ident ("OR" | "AND"))* "END"
FuzzyCompStat = "FUZZYCOMPARE" Ident "IS" Ident ("<" | ">" | "=" | "#") Expr
FuzzyConcStat = "FUZZYCONCAT" Ident IS Ident ("AND" | "OR") Ident
AggregateStat = "AGGREGATE" Ident ("AND" | "OR") Ident Ident
EvalStat = "EVAL" Ident
DefuzzyOp = "COG" | "NO_DFOP"
FuzzyOp = ("MAXIUMUM" | "MINIMUM" | "FUZZY_AND" | "FUZZY_OR" |
"ASS_COMP_AND" | "ASS_COMP_OR" | "NO_FOP")
InputStat = "INPUT" Ident
PrintStat = "PRINT" (Ident | "CR")
ImportStat = "IMPORT" ("RULESET" | "VARIABLES" | "PARAMETERSET" Ident | "PSLIST") Ident
ExportStat = "EXPORT" ("RULESET" | "VARIABLES" | "PARAMETERSET" Ident | "PSLIST") Ident
DelStat = "DELETE" ("ALL" | ("EVALTREE" | "RULESET" | e) Ident)
MemDumpStat = "MEMDUMP" ("ALL" | Ident)
ExitStat = "EXIT"
GotoStat = "GOTO" Ident
LabelStat = "LABEL" Ident
CallStat = "CALL" Ident
ProcStat = "PROCEDURE" Ident StatSeq? "RETURN"
AssStat = ("LET" | "SET") Ident ("=" | ":") Expr
IfStat1 = "IF" Cond "THEN" StatSeq? "ENDIF"
IfStat2 = "IF" Cond "THEN" StatSeq? "ELSE" StatSeq? "ENDIF"
LoopStat = "LOOP" StatSeq? "EXITLOOP" Cond StatSeq? "ENDLOOP"
ForStat = "FOR" Ident "=" Expr "TO" Expr "STEP" Expr StatSeq "NEXT" Ident
Cond = "(" Expr ("=" | "!" | "<" | ">" | "&" | "|") Expr")"
Expr = signedExpr | unsignedExpr
unsignedExpr = Expr ("+" | "-" | "*" | "/") Expr | Number | Ident | "(" Expr ")" | Func | CondOp
signedExpr = ("+" | "-") "(" unsignedExpr ")"
Func = unary_Func | (CountOp n_ary_Func CountOp)
unary_Func = ("SIN" | "COS" | "TAN" | "LOG" | "ABS" | "SQR" | "SRT") Arglist
n_ary_Func = ("SUM" | "MUL" | "MIN" | "MAX") ( IndexStat | e ) Arglist
CondOp = "?" "{" Expr, Expr, Expr"}"
Arglist = "{" Expr ( "," Expr | e )* "}"
IndexStat = "(" letter "=" Number (":" Number | e) ")"
Count = "#" letter
CountOp = (Count ("+" | "-" | "*" | "/") | e) | ( ("+" | "-" | "*" | "/") Count | e)
Number = digit+ | digit+ "." digit+
Ident = (letter | digit) (letter | digit)*
digit = 0..9
letter = printable ascii characters
e = empty
This formal description should give the reader a quite complete structure analysis of a CSI(C&F) program.