LNode LoopExpr()
{
TT la0;
#line 87 "StageOneParserGrammar.ecs"
LNode a;
#line default
// Line 88: ((TT.Greedy|TT.Nongreedy) AssignExpr | AssignExpr)
la0 = (TT) LA0;
if (la0 == TT.Greedy || la0 == TT.Nongreedy) {
var loopMod = MatchAny();
a = AssignExpr();
#line 89 "StageOneParserGrammar.ecs"
a = F.Call((Symbol) loopMod.Value, a, loopMod.StartIndex, a.Range.EndIndex);
#line default
} else
a = AssignExpr();
// Line 92: ( TT.Star | TT.Plus | TT.QMark )?
la0 = (TT) LA0;
if (la0 == TT.Star) {
var op = MatchAny();
#line 92 "StageOneParserGrammar.ecs"
a = F.Call(_SufStar, a, a.Range.StartIndex, op.EndIndex);
#line default
} else if (la0 == TT.Plus) {
var op = MatchAny();
#line 93 "StageOneParserGrammar.ecs"
a = F.Call(_SufPlus, a, a.Range.StartIndex, op.EndIndex);
#line default
} else if (la0 == TT.QMark) {
var op = MatchAny();
#line 94 "StageOneParserGrammar.ecs"
a = F.Call(_SufOpt, a, a.Range.StartIndex, op.EndIndex);
#line default
}
#line 96 "StageOneParserGrammar.ecs"
return a;
#line default
}
LNode AssignExpr()