The following grammar defines an abstract syntax for the semantic operations of block evaluation that satisfies and instantiates the above concepts. It is emphasized that this is an abstract syntax for the purpose of defining a notation for discussing semantics and defining an abstract module processing model; the concrete syntax actually used in XML Protocol messages may differ.
[These expressions could be viewed graphically, analogous to the diagram showing handler processing in Figure 5.2.]
1. | M1(A) return M1(A) ? M1(A) ? return M1(A) |
application of module M1 to block A application, return value optional application of module M1 to block A optional application, return value |
2. | M1(M2(A)) return M1(M2(A)) |
composition composition, return composed value |
3. | seq { M1(A), M2(A) } seq { M1(A), M1(B) } seq { M1(A), M2(B) } seq { M1(B), M2(A) } seq { M1(A), ? M2(B) } |
sequence, 2 modules/same block sequence, 1 module/different blocks sequence, 2 modules/different blocks sequence, 2 modules/different blocks/reverse order sequence, M2(B) is optional |
4. | par { M1(A), M1(B) } par { M1(A), ? M2(B) } |
parallel parallel, M2(B) is optional |
5. | seq {M1(A), return M2(B) } seq {return M1(A), M2(B) } |
return value from a module application in a sequence |
6. | par {M1(A), return M2(B) } par {return M1(A), M2(B) } |
return value from a module application in a parallel execution |
7. | seq {return M1(A), return M2(B) } | multiple return values from a sequence |
8. | par {return M1(A), return M2(B) } | multiple return values from a parallel execution |