Syntax CHAIMS 2.0 - specified in EBNF

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

EBNF-syntax:
 
Reserved words in CHAIMS 2.0:
TRUE, FALSE, DONE, NOT_DONE, PARTIAL, ERROR, BEGINCHAIMS, ENDCHAIMS, WHILE, IF, THEN, ELSE, ELSEIF, SETUP, TERMINATE, ESTIMATE, INVOKE, EXTRACT, EXAMINE, SETPARAM, GETPARAM, INVEX, EXWDONE

 

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.