7.4 Formal Description of CSI(C&F)

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.