Alternative =
"\{" PathList "}" |
"{" PathList "}".
PathList = { Path ";" }.
The evaluation of a source \{Q1; Q2; ... Qn;} proceeds as follows. The paths Q1, Q2, ..., Qn are evaluated from left to right until the evaluation of a path succeeds.
More specifically, consider the result of evaluating the path Qj.
If the result is a ground expression Ge, then Ge is taken to be the result of the whole construct. If the result is $error(Ge), then $error(Ge) is the result of the whole construct. If the result is $fail(k+1), then $fail(k+1) is the result of the whole construct. And, finally, if the result is $fail(0), this failure is "caught", i.e. an attempt is made to evaluate the next path. If there exists no next path (i.e. j=n), the failure $fail(0) is the result of the whole construct.
An alternative {Q1; Q2; ... Qn;} is equivalent to the alternative \{Q1; Q2; ... Qn; $error(Fname "Unexpected fail");}, where Fname is the name of the function in which the construct appears.
{Q1; Q2; ... Qn;} =>=>
\{Q1; Q2; ... Qn;
$error(Fname "Unexpected fail");}
Fname is the name of the function in which
the construct appears.
Env,m,St |- \{} => $fail(0),St
Env,m,St |- Q1 => Ge,St'
----------------------------------------
Env,m,St |- \{Q1; Q2; ... Qn;} => Ge,St'
Env,m,St |- Q1 => $fail(0),St'
Env,m,St'|- \{Q2; ... Qn;} => X,St''
----------------------------------------
Env,m,St |- \{Q1; Q2; ... Qn;} => X,St''
Env,m,St |- Q1 => $fail(k+1),St'
------------------------------------------------
Env,m,St |- \{Q1; Q2; ... Qn;} => $fail(k+1),St'
Env,m,St |- Q1 => $error(Ge),St'
------------------------------------------------
Env,m,St |- \{Q1; Q2; ... Qn;} => $error(Ge),St'