created by db, 7/13/98
updated by db, 7/16/98, various details, due to review
updated by db, 8/4/98, methodname and megamodulename
are now string_literal
updated by lm, 8/11/98, INVOKEEXTRACT and EXTRACTWHENDONE
renamed to INVEX and EXWDONE
updated by ns, 5/27/99, updates to EXAMINE, removed date type, removed invocation_status_comparison, added reserved word PARTIAL
{ } repetition (zero, one or more times)
[ ] optional
| or
( ) brackets for grouping choices
` ` literals, keywords, symbols
___ term to be defined, just for enhancing readibility
string ::= letter{letter}
string_literal ::= `"` {letter} `"`
integer_literal ::= [(`+`|`-`)]digit{digit}
real_literal ::= ([(`+`|`-`)]digit{digit}`.`
digit{digit}) | ([(`+`|`-`)]digit{digit}`E`[(`+`|`-`)]digit{digit}
implementation postponed to CHAIMS
3.0
boolean_literal ::= `TRUE` | `FALSE`
invocation_status_literal
::= `DONE` | `NOT_DONE`| `PARTIAL` | `ERROR`
implementation of ERROR probably
postponed to CHAIMS 3.0
programname, paramatername, invocation_handle, megamodule_handle, dataname ::= string
megamodulename, methodname ::= string_literal
in_name_value_list ::= in_name_value_pair { `,` in_name_value_pair}
in_name_value_pair ::= parametername `=` invalue
invalue ::= simple_literal | dataname
simple_literal ::= string_literal | integer_literal | boolean_literal | datetime_literal | real_literal
out_name_value_list ::= out_name_value_pair { `,` out_name_value_pair}
out_name_value_pair ::= dataname `=` parametername
megaprogram ::= programname `BEGINCHAIMS` {statement}`ENDCHAIMS`
statement ::= simple_statement | complex_statement | shortcut_statement
complex_statement ::= while_loop | conditional_statement
while_loop ::= `WHILE (`boolean_expression`) {`statement {statement}`}`
conditional_statement ::=
`IF (`boolean_expression`) THEN {`statement {statement}`}`[`ELSEIF
(`boolean_expression`) THEN {`statement {statement}`}`][`ELSE
{`statement {statement}`}`
implementation of ELSEIF postponed
to CHAIMS 3.0
boolean_expression ::= (boolean_expression
(`&`|`|`) boolean_expression) | boolean_literal | dataname
| general_comparison
implementation of & and |
postponed to CHAIMS 3.0; if we have local helper modules providing boolean
operators and the shortcut INVEX, we might not need it at all
general_comparison ::= dataname (`==`|`!=`|`>`|`>=`|`<`|`<=`) dataname
simple_statement ::= setup_statement | terminate_statement | estimate_statement | invoke_statement | extract_statement | examine_statement | setparam_statement | getparam_statement | assignment_statement
setup_statement ::= megamodule_handle `= SETUP(` megamodulename `)`
terminate_statement ::= (megamodule_handle`.TERMINATE()`) | (invocation_handle`.TERMINATE()`)
estimate_statement ::= `(`out_name_value_list`) =` megamodule_handle`.ESTIMATE(`methodname`)`
invoke_statement ::= invocation_handle `=` megamodule_handle`.INVOKE(` methodname [`,` in_name_value_list] `)`
extract_statement ::= `(`out_name_value_list`) =` invocation_handle`.EXTRACT()`
examine_statement ::=
(`(`dataname `= STATUS) =` invocation_handle.`EXAMINE()`) |
(`(`dataname `= STATUS,` dataname `= PROGRESS) =` invocation_handle.`EXAMINE()`) |
(`(`dataname `= STATUS) =` invocation_handle.`EXAMINE(`parametername`)`) |
(`(`dataname `= STATUS,` dataname `= PROGRESS) =` invocation_handle.`EXAMINE(`parametername`)`)
setparam_statement ::= megamodule_handle`.SETPARAM(`in_name_value_list`)`
getparam_statement ::= `(`out_name_value_list`) =` megamodule_handle`.GETPARAM()`
assignment_statement ::= dataname `=` simple_literal
shortcut_statement ::= extractwhendone_statement | invokeextract_statement
invokeextract_statement ::= `(`out_name_value_list`) =` megamodule_handle`.INVEX("` methodname `"` [`,` in_name_value_list] `)`
extractwhendone_statement ::= `(`out_name_value_list`) =` invocation_handle`.EXWDONE()`
In order to enhance the readibility of this document some literals have not been quoted individually but in groups. This does not mean that there might not be less/more spaces in between the literals within such a group.