public ES3Parser.ifStatement_return ifStatement() // throws RecognitionException [1]
{
ES3Parser.ifStatement_return retval = new ES3Parser.ifStatement_return();
retval.Start = input.LT(1);
object root_0 = null;
IToken IF112 = null;
IToken LPAREN113 = null;
IToken RPAREN115 = null;
IToken ELSE116 = null;
ES3Parser.statement_return then = default(ES3Parser.statement_return);
ES3Parser.statement_return els = default(ES3Parser.statement_return);
ES3Parser.expression_return expression114 = default(ES3Parser.expression_return);
object IF112_tree=null;
object LPAREN113_tree=null;
object RPAREN115_tree=null;
object ELSE116_tree=null;
var st = new IfStatement();
retval.value = st;
try
{
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1515:2: ( IF LPAREN expression RPAREN then= statement ({...}? ELSE els= statement )? )
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1515:4: IF LPAREN expression RPAREN then= statement ({...}? ELSE els= statement )?
{
root_0 = (object)adaptor.GetNilNode();
IF112=(IToken)Match(input,IF,FOLLOW_IF_in_ifStatement5587);
IF112_tree = (object)adaptor.Create(IF112);
adaptor.AddChild(root_0, IF112_tree);
LPAREN113=(IToken)Match(input,LPAREN,FOLLOW_LPAREN_in_ifStatement5589);
LPAREN113_tree = (object)adaptor.Create(LPAREN113);
adaptor.AddChild(root_0, LPAREN113_tree);
PushFollow(FOLLOW_expression_in_ifStatement5591);
expression114 = expression();
state.followingStackPointer--;
adaptor.AddChild(root_0, expression114.Tree);
st.Expression = ((expression114 != null) ? expression114.value : default(Expression));
RPAREN115=(IToken)Match(input,RPAREN,FOLLOW_RPAREN_in_ifStatement5595);
RPAREN115_tree = (object)adaptor.Create(RPAREN115);
adaptor.AddChild(root_0, RPAREN115_tree);
PushFollow(FOLLOW_statement_in_ifStatement5599);
then = statement();
state.followingStackPointer--;
adaptor.AddChild(root_0, then.Tree);
st.Then = ((then != null) ? then.value : default(Statement));
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1515:113: ({...}? ELSE els= statement )?
int alt63 = 2;
int LA63_0 = input.LA(1);
if ( (LA63_0 == ELSE) )
{
int LA63_1 = input.LA(2);
if ( (( input.LA(1) == ELSE )) )
{
alt63 = 1;
}
}
switch (alt63)
{
case 1 :
// C:\\Users\\s.ros\\Projets\\Jint\\Jint\\ES3.g:1515:115: {...}? ELSE els= statement
{
if ( !(( input.LA(1) == ELSE )) )
{
throw new FailedPredicateException(input, "ifStatement", " input.LA(1) == ELSE ");
}
ELSE116=(IToken)Match(input,ELSE,FOLLOW_ELSE_in_ifStatement5607);
ELSE116_tree = (object)adaptor.Create(ELSE116);
adaptor.AddChild(root_0, ELSE116_tree);
PushFollow(FOLLOW_statement_in_ifStatement5611);
els = statement();
state.followingStackPointer--;
adaptor.AddChild(root_0, els.Tree);
st.Else = ((els != null) ? els.value : default(Statement));
}
break;
}
}
retval.Stop = input.LT(-1);
retval.Tree = (object)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 = (object)adaptor.ErrorNode(input, (IToken) retval.Start, input.LT(-1), re);
}
finally
{
}
return retval;
}
// $ANTLR end "ifStatement"