anchor.diff:        }
       ;
   
  +conditionalBranch returns [Expression expression]
  +    : conditionalExpression
  +      { $expression = new Expression(null);
  +        $expression.setTerm($conditionalExpression.term); }
  +    | disjunctionExpression
  +      { $expression = new Expression(null);
  +        $expression.setTerm($disjunctionExpression.term); }
  +    ;
  +
   thenElseClauses returns [IfClause ifClause, ElseClause elseClause, ConditionList conditionList]
       : conditions
         { $conditionList = $conditions.conditionList; }
  -      (
  -        THEN_CLAUSE
  -        { $ifClause = new IfClause($THEN_CLAUSE); }
  -        de1=disjunctionExpression
  -        { Expression e = new Expression(null);
  -          e.setTerm($de1.term);
  -          $ifClause.setExpression(e); }
  -      )?
  -      (
  -        ELSE_CLAUSE
  -        { $elseClause = new ElseClause($ELSE_CLAUSE); }
  -        (
  -          de2=disjunctionExpression
  -          { Expression e = new Expression(null);
  -            e.setTerm($de2.term);
  -            $elseClause.setExpression(e); }
  -        | 
  -          ifExpression
  -          { Expression e = new Expression(null);
  -            e.setTerm($ifExpression.term);
  -            $elseClause.setExpression(e); }
  -        )
  -      )?
  +      THEN_CLAUSE
  +      { $ifClause = new IfClause($THEN_CLAUSE); }
  +      cb1=conditionalBranch
  +      { $ifClause.setExpression($cb1.expression); }
  +      ELSE_CLAUSE
  +      { $elseClause = new ElseClause($ELSE_CLAUSE); }
  +      cb2=conditionalBranch
  +      { $elseClause.setExpression($cb2.expression); }
       ;
   
   anonymousFunction returns [FunctionArgument function]
  
positive.code:       )?
        RPAREN
        { $letClause.setEndToken($RPAREN); }
        functionOrExpression
        { $letClause.setExpression($functionOrExpression.expression); 
          $letClause.setEndToken(null); }
      ;
  
  conditionalExpression returns [Term term]
      : ifExpression
        { $term = $ifExpression.term; }
      | switchExpression
        { $term = $switchExpression.term; }
      ;
  
  switchExpression returns [SwitchExpression term]
  
negative.code:       { $clause = new CaseClause($CASE_CLAUSE); }
        caseItemList
        { $clause.setCaseItem($caseItemList.item); }
        conditionalBranch
        { $clause.setExpression($conditionalBranch.expression); }
      ;
  
  defaultCaseExpression returns [ElseClause clause]
      : ELSE_CLAUSE 
        { $clause = new ElseClause($ELSE_CLAUSE); }
        conditionalBranch
        { $clause.setExpression($conditionalBranch.expression); }
      ;
  
  ifExpression returns [IfExpression term]
  