public NCalcParser.logicalExpression_return logicalExpression()
{
NCalcParser.logicalExpression_return retval = new NCalcParser.logicalExpression_return();
retval.Start = input.LT(1);
CommonTree root_0 = null;
IToken char_literal3 = null;
IToken char_literal4 = null;
NCalcParser.conditionalExpression_return left = null;
NCalcParser.conditionalExpression_return middle = null;
NCalcParser.conditionalExpression_return right = null;
CommonTree char_literal3_tree=null;
CommonTree char_literal4_tree=null;
try
{
// C:\\Users\\s.ros\\Documents\\Développement\\NCalc\\Grammar\\NCalc.g:82:2: (left= conditionalExpression ( '?' middle= conditionalExpression ':' right= conditionalExpression )? )
// C:\\Users\\s.ros\\Documents\\Développement\\NCalc\\Grammar\\NCalc.g:82:4: left= conditionalExpression ( '?' middle= conditionalExpression ':' right= conditionalExpression )?
{
root_0 = (CommonTree)adaptor.GetNilNode();
PushFollow(FOLLOW_conditionalExpression_in_logicalExpression78);
left = conditionalExpression();
state.followingStackPointer--;
adaptor.AddChild(root_0, left.Tree);
retval.value = ((left != null) ? left.value : null);
// C:\\Users\\s.ros\\Documents\\Développement\\NCalc\\Grammar\\NCalc.g:82:57: ( '?' middle= conditionalExpression ':' right= conditionalExpression )?
int alt1 = 2;
int LA1_0 = input.LA(1);
if ( (LA1_0 == 19) )
{
alt1 = 1;
}
switch (alt1)
{
case 1 :
// C:\\Users\\s.ros\\Documents\\Développement\\NCalc\\Grammar\\NCalc.g:82:59: '?' middle= conditionalExpression ':' right= conditionalExpression
{
char_literal3=(IToken)Match(input,19,FOLLOW_19_in_logicalExpression84);
char_literal3_tree = (CommonTree)adaptor.Create(char_literal3);
adaptor.AddChild(root_0, char_literal3_tree);
PushFollow(FOLLOW_conditionalExpression_in_logicalExpression88);
middle = conditionalExpression();
state.followingStackPointer--;
adaptor.AddChild(root_0, middle.Tree);
char_literal4=(IToken)Match(input,20,FOLLOW_20_in_logicalExpression90);
char_literal4_tree = (CommonTree)adaptor.Create(char_literal4);
adaptor.AddChild(root_0, char_literal4_tree);
PushFollow(FOLLOW_conditionalExpression_in_logicalExpression94);
right = conditionalExpression();
state.followingStackPointer--;
adaptor.AddChild(root_0, right.Tree);
retval.value = new TernaryExpression(((left != null) ? left.value : null), ((middle != null) ? middle.value : null), ((right != null) ? right.value : null));
}
break;
}
}
retval.Stop = input.LT(-1);
retval.Tree = (CommonTree)adaptor.RulePostProcessing(root_0);
adaptor.SetTokenBoundaries(retval.Tree, (IToken) retval.Start, (IToken) retval.Stop);
}
catch (RecognitionException re)
{
ReportError(re);
Recover(input,re);
// Conversion of the second argument necessary, but harmless
retval.Tree = (CommonTree)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);
}
finally
{
}
return retval;
}