BoundarySpec bs = null;
CommonTree n=null;
RangeBoundarySpec rbs = new RangeBoundarySpec();
bs = rbs;
try {
// QSpecBuilder2.g:191:3: ( ^( PRECEDING UNBOUNDED ) | ^( FOLLOWING UNBOUNDED ) | CURRENT | ^( PRECEDING n= Number ) | ^( FOLLOWING n= Number ) )
int alt37=5;
switch ( input.LA(1) ) {
case PRECEDING:
{
int LA37_1 = input.LA(2);
if ( (LA37_1==DOWN) ) {
int LA37_4 = input.LA(3);
if ( (LA37_4==Number) ) {
alt37=4;
}
else if ( (LA37_4==UNBOUNDED) ) {
alt37=1;
}
else {
if (backtracking>0) {failed=true; return bs;}
NoViableAltException nvae =
new NoViableAltException("186:1: rowsboundary returns [BoundarySpec bs] : ( ^( PRECEDING UNBOUNDED ) | ^( FOLLOWING UNBOUNDED ) | CURRENT | ^( PRECEDING n= Number ) | ^( FOLLOWING n= Number ) );", 37, 4, input);
throw nvae;
}
}
else {
if (backtracking>0) {failed=true; return bs;}
NoViableAltException nvae =
new NoViableAltException("186:1: rowsboundary returns [BoundarySpec bs] : ( ^( PRECEDING UNBOUNDED ) | ^( FOLLOWING UNBOUNDED ) | CURRENT | ^( PRECEDING n= Number ) | ^( FOLLOWING n= Number ) );", 37, 1, input);
throw nvae;
}
}
break;
case FOLLOWING:
{
int LA37_2 = input.LA(2);
if ( (LA37_2==DOWN) ) {
int LA37_5 = input.LA(3);
if ( (LA37_5==Number) ) {
alt37=5;
}
else if ( (LA37_5==UNBOUNDED) ) {
alt37=2;
}
else {
if (backtracking>0) {failed=true; return bs;}
NoViableAltException nvae =
new NoViableAltException("186:1: rowsboundary returns [BoundarySpec bs] : ( ^( PRECEDING UNBOUNDED ) | ^( FOLLOWING UNBOUNDED ) | CURRENT | ^( PRECEDING n= Number ) | ^( FOLLOWING n= Number ) );", 37, 5, input);
throw nvae;
}
}
else {
if (backtracking>0) {failed=true; return bs;}
NoViableAltException nvae =
new NoViableAltException("186:1: rowsboundary returns [BoundarySpec bs] : ( ^( PRECEDING UNBOUNDED ) | ^( FOLLOWING UNBOUNDED ) | CURRENT | ^( PRECEDING n= Number ) | ^( FOLLOWING n= Number ) );", 37, 2, input);
throw nvae;
}
}
break;
case CURRENT:
{
alt37=3;
}
break;
default:
if (backtracking>0) {failed=true; return bs;}
NoViableAltException nvae =
new NoViableAltException("186:1: rowsboundary returns [BoundarySpec bs] : ( ^( PRECEDING UNBOUNDED ) | ^( FOLLOWING UNBOUNDED ) | CURRENT | ^( PRECEDING n= Number ) | ^( FOLLOWING n= Number ) );", 37, 0, input);
throw nvae;
}
switch (alt37) {
case 1 :
// QSpecBuilder2.g:192:3: ^( PRECEDING UNBOUNDED )
{
match(input,PRECEDING,FOLLOW_PRECEDING_in_rowsboundary870); if (failed) return bs;
match(input, Token.DOWN, null); if (failed) return bs;
match(input,UNBOUNDED,FOLLOW_UNBOUNDED_in_rowsboundary872); if (failed) return bs;
match(input, Token.UP, null); if (failed) return bs;
if ( backtracking==0 ) {
rbs.setDirection(Direction.PRECEDING); rbs.setAmt(BoundarySpec.UNBOUNDED_AMOUNT);
}
}
break;
case 2 :
// QSpecBuilder2.g:193:3: ^( FOLLOWING UNBOUNDED )
{
match(input,FOLLOWING,FOLLOW_FOLLOWING_in_rowsboundary883); if (failed) return bs;
match(input, Token.DOWN, null); if (failed) return bs;
match(input,UNBOUNDED,FOLLOW_UNBOUNDED_in_rowsboundary885); if (failed) return bs;
match(input, Token.UP, null); if (failed) return bs;
if ( backtracking==0 ) {
rbs.setDirection(Direction.FOLLOWING); rbs.setAmt(BoundarySpec.UNBOUNDED_AMOUNT);
}
}
break;
case 3 :
// QSpecBuilder2.g:194:3: CURRENT
{
match(input,CURRENT,FOLLOW_CURRENT_in_rowsboundary894); if (failed) return bs;
if ( backtracking==0 ) {
bs = new CurrentRowSpec();
}
}
break;
case 4 :
// QSpecBuilder2.g:195:3: ^( PRECEDING n= Number )
{
match(input,PRECEDING,FOLLOW_PRECEDING_in_rowsboundary903); if (failed) return bs;
match(input, Token.DOWN, null); if (failed) return bs;
n=(CommonTree)input.LT(1);
match(input,Number,FOLLOW_Number_in_rowsboundary907); if (failed) return bs;
match(input, Token.UP, null); if (failed) return bs;
if ( backtracking==0 ) {
rbs.setDirection(Direction.PRECEDING); rbs.setAmt(Integer.parseInt(n.getText()));
}
}
break;
case 5 :
// QSpecBuilder2.g:196:3: ^( FOLLOWING n= Number )
{
match(input,FOLLOWING,FOLLOW_FOLLOWING_in_rowsboundary917); if (failed) return bs;
match(input, Token.DOWN, null); if (failed) return bs;
n=(CommonTree)input.LT(1);
match(input,Number,FOLLOW_Number_in_rowsboundary921); if (failed) return bs;
match(input, Token.UP, null); if (failed) return bs;
if ( backtracking==0 ) {
rbs.setDirection(Direction.FOLLOWING); rbs.setAmt(Integer.parseInt(n.getText()));
}
}
break;