(*
* PBNF, the people's BNF, for beings capable of working at the apobetic level
*
* CHANGELOG:
* ==========
* 2002.02.21-15:30
* - allowed for "application/*/use" element
* - changed "call/@version" to @minIncludeVersion and @maxIncludeVersion
* - fixed problem with mixed content in "application/*"
* - changed "declare/@type" to "declare/@container"
* - added "declare/@type" to declare the linkage of the parameter.
*
* 2002.02.21-09:30
* - (re-) creation date
*
*)
definitions =
{ transformation | derivation }
;
transformation =
formal-parameter, transformation-body
;
derivation =
actual-parameter
;
formal-parameter =
{ declare } (* declare formal parameter
;
declare = (* declare a formal-parameter *)
(* TODO: only scalar defaults allowed? *)
;
transformation-body =
[ temporary ], (* local variables section *)
{ parameter-file }, (* any number of parameter files *)
( application, [ argument ] | (* simple transformation *)
call, { call } ), (* compound transformation *)
{ environment },
{ condor }
;
temporary =
declare, { declare } (* see above for definition *)
;
parameter-file =
{ chunk }
;
application =
[ pre-script ],
executable,
[ postscript ]
;
pre-script, post-script =
<(pre|post)-script
[ universe=UniverseType ] (* default: "scheduler" *)
>
( #PCDATA | (* either a physical filename *)
lfn | (* or a logical filename *)
use ) (* referral to parameter content *)
(pre|post)-script> ;
executable =
( #PCDATA | (* either a physical filename *)
lfn | (* or a logical filename *)
use ) (* referral to parameter content *)
;
argument =
{ chunk }
;
chunk =
{ #PCDATA | (* consider *)
lfn | (* referral to logical filename *)
use | (* referral to parameter content *)
br } (* visual markup option *)
;
call =
actual-parameter
;
environment, condor =
<(environment|condor) key=token> (* name of variable *)
{ #PCDATA | (* verbatim text *)
lfn | (* referral to LFN *)
use } (* referral to parameter content *)
(environment|condor)> ;
actual-parameter =
{ pass }
;
pass =
( scalar | (* encapsulate as-is and lfn *)
list | (* vector, or list *)
hash ) (* dictionary *)
scalar =
{ #PCDATA | (* verbatim value to pass *)
lfn | (* LFN to pass *)
use } (* NOT available in derivations *)
;
list =
{ i }
;
hash =
{ kv }
;
i =
{ #PCDATA | (* verbatim value to pass *)
lfn | (* LFN to pass *)
use } (* NOT available in derivations *)
;
kv =
{ #PCDATA | (* verbatim value to pass *)
lfn | (* LFN to pass *)
use } (* NOT available in derivations *)
;
lfn =
; (* empty element *)
use =
; (* empty element *)
ContainerType =
( scalar | list | hash ) ;
LinkageType =
( input | output | inout | none ) ;
UniverseType =
( standard | vanilla | scheduler | globus | mpi | pvm | java ) ;