The following are some of the aspects that still need investigation regarding the correct translation to XML according to the LRAUV execution semantics.
Operator precedence in expressions¶
Consider the 'While' condition expression in the following fragment from
Insert/Science.xml mission file:
<ReadData Strategy="MinError"> <While> <Arg Name="EnabledNeilBrown"/> <Or><Arg Name="EnabledSeabird"/></Or> <And><Arg Name="UpwardDerivativeOfTemperatureActive"/></And> </While> <Universal:upward_derivative_of_sea_water_temperature/> </ReadData>
Syntactically, this expression looks rather atypical:
each of the occurring
<And> elements only contains a single argument.
So, what are the actual operands in each case?
In pseudo-code, the expression above can be directly transliterated as:
EnabledNeilBrown or EnabledSeabird and UpwardDerivativeOfTemperatureActive
Does LRAUV follow the general programming language convention of and having higher precedence than or for evaluation purposes?
According to the following
it looks like LRAUV basically performs a left-to-right evaluation
without specific attention to operator precedence:
// Order of nodes is LHS [operator RHS0 [operator RHS1 [operator RHS2 ... // Deal with this as (((LHS operator RHS0) operator RHS1 ) operator RHS2 )
TethysL is currently capturing operator precedence in expressions, including support for any desired parenthesization. So, we need to verify and possibly adjust the conversion to XML so as to preserve the intended evaluation semantics.
Possible revision. In general, to accommodate for unambiguous evaluation order and operator arguments, the XML Schema (along with corresponding LRAUV execution logic) should have probably captured expressions in a more standard way. For example, the case above would be expressed as follows, which, in particular, gives a clear indication of the operands for each operator:↩
<While> <Or> <Arg Name="EnabledNeilBrown"/> <And> <Arg Name="EnabledSeabird"/> <Arg Name="UpwardDerivativeOfTemperatureActive"/> </And> </Or> </While>