| edlUnit | ::= | ( suiteDecl ( observablesSection | importDecl )+ <EOF> ) |
| importDecl | ::= | "@import" <STRING_LITERAL> |
| importEdlUnit | ::= | ( observablesSection | importDecl )+ <EOF> |
| suiteDecl | ::= | "begin" "EDLSuite" ( <STRING_LITERAL> | <WILD_STRING> ) ( array_element_load_bounds__decl | array_element_store_bounds__decl )* "end" |
| array_element_load_bounds__decl | ::= | ( "array_element_load_bounds" ( "*" | argType ) ( ( "min:" <UINT> ( "max:" <UINT> )? ) | ( "max:" <UINT> ( "min:" <UINT> )? ) ) ) |
| array_element_store_bounds__decl | ::= | ( "array_element_store_bounds" ( "*" | argType ) ( ( "min:" <UINT> ( "max:" <UINT> )? ) | ( "max:" <UINT> ( "min:" <UINT> )? ) ) ) |
| observablesSection | ::= | "begin" "Observables" ( <STRING_LITERAL> | <WILD_STRING> ) preambleSection ( observableEvent )* "end" |
| preambleSection | ::= | "begin" "Preamble" preambleDeclarations "end" |
| preambleDeclarations | ::= | ( "System-classes:" ( <STRING_LITERAL> | <WILD_STRING> ) ) ( ( "Module-classes:" ( <STRING_LITERAL> | <WILD_STRING> ) ) | ( "No-module:" ( <TRUE> | <FALSE> ) ) )? ( "Database-tag:" ( <STRING_LITERAL> | <WILD_STRING> ) )? ( preambleTypedef )* |
| preambleTypedef | ::= | "Type-name:" javaIdentifier ( jniReferenceType | qualifiedName ) |
| observableEvent | ::= | ( "+" | "-" ) eventDecl |
| eventDecl | ::= | ( new_object__decl | construct_object__decl | construct_finish__decl | get_static__decl | put_static__decl | get_field__decl | put_field__decl | constructor_call__decl | static_call__decl | virtual_call__decl | interface_call__decl | virtual_method_enter__decl | virtual_method_exit__decl | static_method_enter__decl | static_method_exit__decl | monitor_contend__decl | monitor_acquire__decl | monitor_pre_release__decl | monitor_release__decl | throw__decl | catch__decl | static_init_enter__decl | array_element_load__decl | array_element_store__decl ) |
| new_object__decl | ::= | "new_object" ( "*" | ( qualifiedName ( ".*" )? ) ) locationBlock |
| construct_object__decl | ::= | "construct_object" ( "*" | ( qualifiedName argsExpr ) ) |
| construct_finish__decl | ::= | "construct_finish" ( "*" | ( qualifiedName argsExpr ) ) |
| get_static__decl | ::= | "get_static" qualifiedName ( ".*" )? locationBlock |
| put_static__decl | ::= | "put_static" qualifiedName ( ".*" )? locationBlock |
| get_field__decl | ::= | "get_field" qualifiedName ( ".*" )? locationBlock |
| put_field__decl | ::= | "put_field" qualifiedName ( ".*" )? locationBlock |
| constructor_call__decl | ::= | "constructor_call" ( "*" | ( qualifiedName argsExpr ) ) locationBlock |
| static_call__decl | ::= | "static_call" ( "#INT" )? ( "*" | ( qualifiedName ( ( ".*" ) | argsExpr ) ) ) locationBlock |
| virtual_call__decl | ::= | "virtual_call" ( "#INT" )? ( "*" | ( qualifiedName ( ( ".*" ) | argsExpr ) ) ) locationBlock |
| interface_call__decl | ::= | "interface_call" ( "#INT" )? ( "*" | ( qualifiedName ( ( ".*" ) | argsExpr ) ) ) locationBlock |
| virtual_method_enter__decl | ::= | "virtual_method_enter" ( "*" | ( qualifiedName ( ( ".*" ) | argsExpr ) ) ) |
| virtual_method_exit__decl | ::= | "virtual_method_exit" ( "*" | ( qualifiedName ( ( ".*" ) | argsExpr ) ) ) |
| static_method_enter__decl | ::= | "static_method_enter" ( "*" | ( qualifiedName ( ( ".*" ) | argsExpr ) ) ) |
| static_method_exit__decl | ::= | "static_method_exit" ( "*" | ( qualifiedName ( ( ".*" ) | argsExpr ) ) ) |
| monitor_contend__decl | ::= | "monitor_contend" ( "*" | ( qualifiedName ( ".*" )? ) ) locationBlock |
| monitor_acquire__decl | ::= | "monitor_acquire" ( "*" | ( qualifiedName ( ".*" )? ) ) locationBlock |
| monitor_pre_release__decl | ::= | "monitor_pre_release" ( "*" | ( qualifiedName ( ".*" )? ) ) locationBlock |
| monitor_release__decl | ::= | "monitor_release" ( "*" | ( qualifiedName ( ".*" )? ) ) locationBlock |
| throw__decl | ::= | "throw" ( "*" | ( qualifiedName ( "+s" )? ) ) locationBlock |
| catch__decl | ::= | "catch" ( "*" | ( qualifiedName ( "+s" )? ) ) locationBlock |
| static_init_enter__decl | ::= | "static_init_enter" ( "*" | ( qualifiedName ( ".*" )? ) ) |
| array_element_load__decl | ::= | "array_element_load" ( "*" | argType ) ( "min:" <UINT> )? ( "max:" <UINT> )? locationBlock |
| array_element_store__decl | ::= | "array_element_store" ( "*" | argType ) ( "min:" <UINT> )? ( "max:" <UINT> )? locationBlock |
| locationBlock | ::= | "{" ( ( "in" | "not" ) ( "*" | ( qualifiedName ( ( ".*" ) | argsExpr ) ) ) )* "}" |
| argsExpr | ::= | ( "*" | voidArg | ( argType ( "," argType )* ) | jniMethodSignature ) |
| voidArg | ::= | ( "void" | "V" ) |
| argType | ::= | ( basicTypeName | jniPrimitiveType | ( jniObjectType | jniArrayType | qualifiedName ) ) |
| basicTypeName | ::= | ( "byte" | "char" | "double" | "float" | "int" | "long" | "boolean" | "short" | "string" ) |
| jniPrimitiveType | ::= | ( "B" | "C" | "D" | "F" | "I" | "J" | "Z" | "S" ) |
| jniReferenceType | ::= | ( jniArrayType | jniObjectType ) |
| jniArrayType | ::= | ( "[" )+ ( jniPrimitiveType | jniObjectType ) |
| jniObjectType | ::= | javaIdentifier ( "/" javaIdentifier )* ";" |
| jniMethodSignature | ::= | "(" ( javaIdentifier | "[" | "/" | ";" )* ")" ( javaIdentifier | "V" | "[" | "/" | ";" )+ |
| qualifiedName | ::= | ( javaIdentifier ( "." javaIdentifier )* ) |
| javaIdentifier | ::= | ( "string" | "B" | "C" | "D" | "F" | "I" | "J" | "Z" | "S" | <JAVA_ID> ) |