4.0 Procedure File Syntax
ProcedureFile := MethodProcedure | FunctionProcedure | SequenceProcedure
MethodProcedure := "method" Name MethodParameter* LocalUseAlter MethodBody
MethodParameter := EntryChange | ExitParameter
MethodBody := [PreAssert] ProcedureBody Return {IdiomMethod | CatchMethod}*
Return := "return"
EntryChange := EntryParameter | ("change" Variable [',' Variable ...])
EntryParameter := "entry" Variable [',' Variable ...]
ExitParameter := "exit" Variable | Pointer
LocalDeclaration := "local" Variable [',' Variable ...]
UseAlter := {"use" | "alter"} (Class '/' Name*) [',' ...]
PreAssert := [Condition] [AssertContext] [Comment]
AssertContext := {{"error" | "fault"} OutArgument} | ("catch" Name)}
OutArgument |= UntypedExpression ['|' FormatForm]
IdiomMethod := "idiom" Name ... ProcedureBody "return"
CatchMethod := "catch" ["fault" | Name] End "return" ["raise"]
-------------------------------------
FunctionProcedure := "function" Name EntryParameter* ExitParameter FunctionBody
FunctionBody := [PreFunction] ProcedureBody Return IdiomMethod*
PreFunction := Precondition FaultAssert* '.'
Precondition := "precondition" [Comment]
FaultAssert := [Condition] ["fault" OutArgument] [Comment]
-------------------------------------
SequenceProcedure := "sequence" Name EntryChange* ExitParameter SequenceBody
SequenceBody := [Precondition] ProcedureBody {IdiomMethod | Adjunct}*
Adjunct := ("Method" Name End AdjuntMethod)
| ("function" Name End AdjunctFunction)
AdjuntMethod := ...
AdjunctFunction := ...
Type Attribute and Cast Function
Procedure Preamble