package net.sf.jabref.bst;
// $ANTLR 3.0b5 Bst.g 2006-11-23 23:20:24
import java.util.ArrayList;
import java.util.List;
import org.antlr.runtime.BitSet;
import org.antlr.runtime.EarlyExitException;
import org.antlr.runtime.NoViableAltException;
import org.antlr.runtime.Parser;
import org.antlr.runtime.ParserRuleReturnScope;
import org.antlr.runtime.RecognitionException;
import org.antlr.runtime.Token;
import org.antlr.runtime.TokenStream;
import org.antlr.runtime.tree.CommonTreeAdaptor;
import org.antlr.runtime.tree.TreeAdaptor;
@SuppressWarnings({"unused", "unchecked"})
public class BstParser extends Parser {
public static final String[] tokenNames = new String[] {
"<invalid>", "<EOR>", "<DOWN>", "<UP>", "IDLIST", "STACK", "ENTRY", "COMMANDS", "STRINGS", "INTEGERS", "FUNCTION", "MACRO", "STRING", "READ", "EXECUTE", "ITERATE", "REVERSE", "SORT", "IDENTIFIER", "INTEGER", "QUOTED", "LETTER", "NUMERAL", "WS", "LINE_COMMENT", "'{'", "'}'", "'<'", "'>'", "'='", "'+'", "'-'", "':='", "'*'"
};
public static final int LETTER=21;
public static final int ENTRY=6;
public static final int INTEGERS=9;
public static final int WS=23;
public static final int COMMANDS=7;
public static final int STRING=12;
public static final int EXECUTE=14;
public static final int LINE_COMMENT=24;
public static final int SORT=17;
public static final int STACK=5;
public static final int REVERSE=16;
public static final int QUOTED=20;
public static final int INTEGER=19;
public static final int ITERATE=15;
public static final int FUNCTION=10;
public static final int EOF=-1;
public static final int STRINGS=8;
public static final int IDENTIFIER=18;
public static final int MACRO=11;
public static final int IDLIST=4;
public static final int NUMERAL=22;
public static final int READ=13;
public BstParser(TokenStream input) {
super(input);
}
protected TreeAdaptor adaptor = new CommonTreeAdaptor();
public void setTreeAdaptor(TreeAdaptor adaptor) {
this.adaptor = adaptor;
}
public TreeAdaptor getTreeAdaptor() {
return adaptor;
}
public String[] getTokenNames() { return tokenNames; }
public String getGrammarFileName() { return "Bst.g"; }
public static class program_return extends ParserRuleReturnScope {
Object tree;
public Object getTree() { return tree; }
}
// $ANTLR start program
// Bst.g:14:1: program : ( commands )+ -> ^( COMMANDS ( commands )+ ) ;
public program_return program() throws RecognitionException {
program_return retval = new program_return();
retval.start = input.LT(1);
Object root_0 = null;
commands_return commands1 = null;
List list_commands=new ArrayList();
try {
// Bst.g:14:11: ( ( commands )+ -> ^( COMMANDS ( commands )+ ) )
// Bst.g:14:11: ( commands )+
{
// Bst.g:14:11: ( commands )+
int cnt1=0;
loop1:
do {
int alt1=2;
int LA1_0 = input.LA(1);
if ( (LA1_0==ENTRY||(LA1_0>=STRINGS && LA1_0<=MACRO)||(LA1_0>=READ && LA1_0<=SORT)) ) {
alt1=1;
}
switch (alt1) {
case 1 :
// Bst.g:14:11: commands
{
pushFollow(FOLLOW_commands_in_program45);
commands1=commands();
_fsp--;
list_commands.add(commands1.tree);
}
break;
default :
if ( cnt1 >= 1 ) break loop1;
EarlyExitException eee =
new EarlyExitException(1, input);
throw eee;
}
cnt1++;
} while (true);
// AST REWRITE
int i_0 = 0;
retval.tree = root_0;
root_0 = adaptor.nil();
// 14:21: -> ^( COMMANDS ( commands )+ )
{
// Bst.g:14:24: ^( COMMANDS ( commands )+ )
{
Object root_1 = adaptor.nil();
root_1 = adaptor.becomeRoot(adaptor.create(COMMANDS, "COMMANDS"), root_1);
// Bst.g:14:35: ( commands )+
{
int n_1 = list_commands == null ? 0 : list_commands.size();
if ( n_1==0 ) throw new RuntimeException("Must have more than one element for (...)+ loops");
for (int i_1=0; i_1<n_1; i_1++) {
adaptor.addChild(root_1, list_commands.get(i_1));
}
}
adaptor.addChild(root_0, root_1);
}
}
}
}
catch (RecognitionException re) {
reportError(re);
recover(input,re);
}
finally {
retval.stop = input.LT(-1);
retval.tree = adaptor.rulePostProcessing(root_0);
adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
}
return retval;
}
// $ANTLR end program
public static class commands_return extends ParserRuleReturnScope {
Object tree;
public Object getTree() { return tree; }
}
// $ANTLR start commands
// Bst.g:16:1: commands : ( STRINGS^^ idList | INTEGERS^^ idList | FUNCTION^^ id stack | MACRO^^ id '{'! STRING '}'! | READ^^ | EXECUTE^^ '{'! function '}'! | ITERATE^^ '{'! function '}'! | REVERSE^^ '{'! function '}'! | ENTRY^^ idList0 idList0 idList0 | SORT^^ );
public commands_return commands() throws RecognitionException {
commands_return retval = new commands_return();
retval.start = input.LT(1);
Object root_0 = null;
Token STRINGS2=null;
Token INTEGERS4=null;
Token FUNCTION6=null;
Token MACRO9=null;
Token char_literal11=null;
Token STRING12=null;
Token char_literal13=null;
Token READ14=null;
Token EXECUTE15=null;
Token char_literal16=null;
Token char_literal18=null;
Token ITERATE19=null;
Token char_literal20=null;
Token char_literal22=null;
Token REVERSE23=null;
Token char_literal24=null;
Token char_literal26=null;
Token ENTRY27=null;
Token SORT31=null;
idList_return idList3 = null;
idList_return idList5 = null;
id_return id7 = null;
stack_return stack8 = null;
id_return id10 = null;
function_return function17 = null;
function_return function21 = null;
function_return function25 = null;
idList0_return idList028 = null;
idList0_return idList029 = null;
idList0_return idList030 = null;
Object STRINGS2_tree=null;
Object INTEGERS4_tree=null;
Object FUNCTION6_tree=null;
Object MACRO9_tree=null;
Object char_literal11_tree=null;
Object STRING12_tree=null;
Object char_literal13_tree=null;
Object READ14_tree=null;
Object EXECUTE15_tree=null;
Object char_literal16_tree=null;
Object char_literal18_tree=null;
Object ITERATE19_tree=null;
Object char_literal20_tree=null;
Object char_literal22_tree=null;
Object REVERSE23_tree=null;
Object char_literal24_tree=null;
Object char_literal26_tree=null;
Object ENTRY27_tree=null;
Object SORT31_tree=null;
try {
// Bst.g:17:4: ( STRINGS^^ idList | INTEGERS^^ idList | FUNCTION^^ id stack | MACRO^^ id '{'! STRING '}'! | READ^^ | EXECUTE^^ '{'! function '}'! | ITERATE^^ '{'! function '}'! | REVERSE^^ '{'! function '}'! | ENTRY^^ idList0 idList0 idList0 | SORT^^ )
int alt2=10;
switch ( input.LA(1) ) {
case STRINGS:
alt2=1;
break;
case INTEGERS:
alt2=2;
break;
case FUNCTION:
alt2=3;
break;
case MACRO:
alt2=4;
break;
case READ:
alt2=5;
break;
case EXECUTE:
alt2=6;
break;
case ITERATE:
alt2=7;
break;
case REVERSE:
alt2=8;
break;
case ENTRY:
alt2=9;
break;
case SORT:
alt2=10;
break;
default:
NoViableAltException nvae =
new NoViableAltException("16:1: commands : ( STRINGS^^ idList | INTEGERS^^ idList | FUNCTION^^ id stack | MACRO^^ id '{'! STRING '}'! | READ^^ | EXECUTE^^ '{'! function '}'! | ITERATE^^ '{'! function '}'! | REVERSE^^ '{'! function '}'! | ENTRY^^ idList0 idList0 idList0 | SORT^^ );", 2, 0, input);
throw nvae;
}
switch (alt2) {
case 1 :
// Bst.g:17:4: STRINGS^^ idList
{
root_0 = adaptor.nil();
STRINGS2=input.LT(1);
match(input,STRINGS,FOLLOW_STRINGS_in_commands65);
STRINGS2_tree = adaptor.create(STRINGS2);
root_0 = adaptor.becomeRoot(STRINGS2_tree, root_0);
pushFollow(FOLLOW_idList_in_commands68);
idList3=idList();
_fsp--;
adaptor.addChild(root_0, idList3.tree);
}
break;
case 2 :
// Bst.g:18:4: INTEGERS^^ idList
{
root_0 = adaptor.nil();
INTEGERS4=input.LT(1);
match(input,INTEGERS,FOLLOW_INTEGERS_in_commands73);
INTEGERS4_tree = adaptor.create(INTEGERS4);
root_0 = adaptor.becomeRoot(INTEGERS4_tree, root_0);
pushFollow(FOLLOW_idList_in_commands76);
idList5=idList();
_fsp--;
adaptor.addChild(root_0, idList5.tree);
}
break;
case 3 :
// Bst.g:19:4: FUNCTION^^ id stack
{
root_0 = adaptor.nil();
FUNCTION6=input.LT(1);
match(input,FUNCTION,FOLLOW_FUNCTION_in_commands81);
FUNCTION6_tree = adaptor.create(FUNCTION6);
root_0 = adaptor.becomeRoot(FUNCTION6_tree, root_0);
pushFollow(FOLLOW_id_in_commands84);
id7=id();
_fsp--;
adaptor.addChild(root_0, id7.tree);
pushFollow(FOLLOW_stack_in_commands86);
stack8=stack();
_fsp--;
adaptor.addChild(root_0, stack8.tree);
}
break;
case 4 :
// Bst.g:20:4: MACRO^^ id '{'! STRING '}'!
{
root_0 = adaptor.nil();
MACRO9=input.LT(1);
match(input,MACRO,FOLLOW_MACRO_in_commands91);
MACRO9_tree = adaptor.create(MACRO9);
root_0 = adaptor.becomeRoot(MACRO9_tree, root_0);
pushFollow(FOLLOW_id_in_commands94);
id10=id();
_fsp--;
adaptor.addChild(root_0, id10.tree);
char_literal11=input.LT(1);
match(input,25,FOLLOW_25_in_commands96);
STRING12=input.LT(1);
match(input,STRING,FOLLOW_STRING_in_commands99);
STRING12_tree = adaptor.create(STRING12);
adaptor.addChild(root_0, STRING12_tree);
char_literal13=input.LT(1);
match(input,26,FOLLOW_26_in_commands101);
}
break;
case 5 :
// Bst.g:21:4: READ^^
{
root_0 = adaptor.nil();
READ14=input.LT(1);
match(input,READ,FOLLOW_READ_in_commands107);
READ14_tree = adaptor.create(READ14);
root_0 = adaptor.becomeRoot(READ14_tree, root_0);
}
break;
case 6 :
// Bst.g:22:4: EXECUTE^^ '{'! function '}'!
{
root_0 = adaptor.nil();
EXECUTE15=input.LT(1);
match(input,EXECUTE,FOLLOW_EXECUTE_in_commands113);
EXECUTE15_tree = adaptor.create(EXECUTE15);
root_0 = adaptor.becomeRoot(EXECUTE15_tree, root_0);
char_literal16=input.LT(1);
match(input,25,FOLLOW_25_in_commands116);
pushFollow(FOLLOW_function_in_commands119);
function17=function();
_fsp--;
adaptor.addChild(root_0, function17.tree);
char_literal18=input.LT(1);
match(input,26,FOLLOW_26_in_commands121);
}
break;
case 7 :
// Bst.g:23:4: ITERATE^^ '{'! function '}'!
{
root_0 = adaptor.nil();
ITERATE19=input.LT(1);
match(input,ITERATE,FOLLOW_ITERATE_in_commands127);
ITERATE19_tree = adaptor.create(ITERATE19);
root_0 = adaptor.becomeRoot(ITERATE19_tree, root_0);
char_literal20=input.LT(1);
match(input,25,FOLLOW_25_in_commands130);
pushFollow(FOLLOW_function_in_commands133);
function21=function();
_fsp--;
adaptor.addChild(root_0, function21.tree);
char_literal22=input.LT(1);
match(input,26,FOLLOW_26_in_commands135);
}
break;
case 8 :
// Bst.g:24:4: REVERSE^^ '{'! function '}'!
{
root_0 = adaptor.nil();
REVERSE23=input.LT(1);
match(input,REVERSE,FOLLOW_REVERSE_in_commands141);
REVERSE23_tree = adaptor.create(REVERSE23);
root_0 = adaptor.becomeRoot(REVERSE23_tree, root_0);
char_literal24=input.LT(1);
match(input,25,FOLLOW_25_in_commands144);
pushFollow(FOLLOW_function_in_commands147);
function25=function();
_fsp--;
adaptor.addChild(root_0, function25.tree);
char_literal26=input.LT(1);
match(input,26,FOLLOW_26_in_commands149);
}
break;
case 9 :
// Bst.g:25:4: ENTRY^^ idList0 idList0 idList0
{
root_0 = adaptor.nil();
ENTRY27=input.LT(1);
match(input,ENTRY,FOLLOW_ENTRY_in_commands155);
ENTRY27_tree = adaptor.create(ENTRY27);
root_0 = adaptor.becomeRoot(ENTRY27_tree, root_0);
pushFollow(FOLLOW_idList0_in_commands158);
idList028=idList0();
_fsp--;
adaptor.addChild(root_0, idList028.tree);
pushFollow(FOLLOW_idList0_in_commands160);
idList029=idList0();
_fsp--;
adaptor.addChild(root_0, idList029.tree);
pushFollow(FOLLOW_idList0_in_commands162);
idList030=idList0();
_fsp--;
adaptor.addChild(root_0, idList030.tree);
}
break;
case 10 :
// Bst.g:26:4: SORT^^
{
root_0 = adaptor.nil();
SORT31=input.LT(1);
match(input,SORT,FOLLOW_SORT_in_commands167);
SORT31_tree = adaptor.create(SORT31);
root_0 = adaptor.becomeRoot(SORT31_tree, root_0);
}
break;
}
}
catch (RecognitionException re) {
reportError(re);
recover(input,re);
}
finally {
retval.stop = input.LT(-1);
retval.tree = adaptor.rulePostProcessing(root_0);
adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
}
return retval;
}
// $ANTLR end commands
public static class identifier_return extends ParserRuleReturnScope {
Object tree;
public Object getTree() { return tree; }
}
// $ANTLR start identifier
// Bst.g:28:1: identifier : IDENTIFIER ;
public identifier_return identifier() throws RecognitionException {
identifier_return retval = new identifier_return();
retval.start = input.LT(1);
Object root_0 = null;
Token IDENTIFIER32=null;
Object IDENTIFIER32_tree=null;
try {
// Bst.g:29:4: ( IDENTIFIER )
// Bst.g:29:4: IDENTIFIER
{
root_0 = adaptor.nil();
IDENTIFIER32=input.LT(1);
match(input,IDENTIFIER,FOLLOW_IDENTIFIER_in_identifier178);
IDENTIFIER32_tree = adaptor.create(IDENTIFIER32);
adaptor.addChild(root_0, IDENTIFIER32_tree);
}
}
catch (RecognitionException re) {
reportError(re);
recover(input,re);
}
finally {
retval.stop = input.LT(-1);
retval.tree = adaptor.rulePostProcessing(root_0);
adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
}
return retval;
}
// $ANTLR end identifier
public static class id_return extends ParserRuleReturnScope {
Object tree;
public Object getTree() { return tree; }
}
// $ANTLR start id
// Bst.g:31:1: id : '{'! identifier '}'! ;
public id_return id() throws RecognitionException {
id_return retval = new id_return();
retval.start = input.LT(1);
Object root_0 = null;
Token char_literal33=null;
Token char_literal35=null;
identifier_return identifier34 = null;
Object char_literal33_tree=null;
Object char_literal35_tree=null;
try {
// Bst.g:32:4: ( '{'! identifier '}'! )
// Bst.g:32:4: '{'! identifier '}'!
{
root_0 = adaptor.nil();
char_literal33=input.LT(1);
match(input,25,FOLLOW_25_in_id188);
pushFollow(FOLLOW_identifier_in_id191);
identifier34=identifier();
_fsp--;
adaptor.addChild(root_0, identifier34.tree);
char_literal35=input.LT(1);
match(input,26,FOLLOW_26_in_id193);
}
}
catch (RecognitionException re) {
reportError(re);
recover(input,re);
}
finally {
retval.stop = input.LT(-1);
retval.tree = adaptor.rulePostProcessing(root_0);
adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
}
return retval;
}
// $ANTLR end id
public static class idList_return extends ParserRuleReturnScope {
Object tree;
public Object getTree() { return tree; }
}
// $ANTLR start idList
// Bst.g:34:1: idList : '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) ;
public idList_return idList() throws RecognitionException {
idList_return retval = new idList_return();
retval.start = input.LT(1);
Object root_0 = null;
Token char_literal36=null;
Token char_literal38=null;
identifier_return identifier37 = null;
List list_identifier=new ArrayList();
List list_26=new ArrayList();
List list_25=new ArrayList();
Object char_literal36_tree=null;
Object char_literal38_tree=null;
try {
// Bst.g:35:4: ( '{' ( identifier )+ '}' -> ^( IDLIST ( identifier )+ ) )
// Bst.g:35:4: '{' ( identifier )+ '}'
{
char_literal36=input.LT(1);
match(input,25,FOLLOW_25_in_idList205);
list_25.add(char_literal36);
// Bst.g:35:8: ( identifier )+
int cnt3=0;
loop3:
do {
int alt3=2;
int LA3_0 = input.LA(1);
if ( (LA3_0==IDENTIFIER) ) {
alt3=1;
}
switch (alt3) {
case 1 :
// Bst.g:35:8: identifier
{
pushFollow(FOLLOW_identifier_in_idList207);
identifier37=identifier();
_fsp--;
list_identifier.add(identifier37.tree);
}
break;
default :
if ( cnt3 >= 1 ) break loop3;
EarlyExitException eee =
new EarlyExitException(3, input);
throw eee;
}
cnt3++;
} while (true);
char_literal38=input.LT(1);
match(input,26,FOLLOW_26_in_idList210);
list_26.add(char_literal38);
// AST REWRITE
int i_0 = 0;
retval.tree = root_0;
root_0 = adaptor.nil();
// 35:24: -> ^( IDLIST ( identifier )+ )
{
// Bst.g:35:27: ^( IDLIST ( identifier )+ )
{
Object root_1 = adaptor.nil();
root_1 = adaptor.becomeRoot(adaptor.create(IDLIST, "IDLIST"), root_1);
// Bst.g:35:36: ( identifier )+
{
int n_1 = list_identifier == null ? 0 : list_identifier.size();
if ( n_1==0 ) throw new RuntimeException("Must have more than one element for (...)+ loops");
for (int i_1=0; i_1<n_1; i_1++) {
adaptor.addChild(root_1, list_identifier.get(i_1));
}
}
adaptor.addChild(root_0, root_1);
}
}
}
}
catch (RecognitionException re) {
reportError(re);
recover(input,re);
}
finally {
retval.stop = input.LT(-1);
retval.tree = adaptor.rulePostProcessing(root_0);
adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
}
return retval;
}
// $ANTLR end idList
public static class idList0_return extends ParserRuleReturnScope {
Object tree;
public Object getTree() { return tree; }
}
// $ANTLR start idList0
// Bst.g:37:1: idList0 : '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) ;
public idList0_return idList0() throws RecognitionException {
idList0_return retval = new idList0_return();
retval.start = input.LT(1);
Object root_0 = null;
Token char_literal39=null;
Token char_literal41=null;
identifier_return identifier40 = null;
List list_identifier=new ArrayList();
List list_26=new ArrayList();
List list_25=new ArrayList();
Object char_literal39_tree=null;
Object char_literal41_tree=null;
try {
// Bst.g:38:4: ( '{' ( identifier )* '}' -> ^( IDLIST ( identifier )* ) )
// Bst.g:38:4: '{' ( identifier )* '}'
{
char_literal39=input.LT(1);
match(input,25,FOLLOW_25_in_idList0230);
list_25.add(char_literal39);
// Bst.g:38:8: ( identifier )*
loop4:
do {
int alt4=2;
int LA4_0 = input.LA(1);
if ( (LA4_0==IDENTIFIER) ) {
alt4=1;
}
switch (alt4) {
case 1 :
// Bst.g:38:8: identifier
{
pushFollow(FOLLOW_identifier_in_idList0232);
identifier40=identifier();
_fsp--;
list_identifier.add(identifier40.tree);
}
break;
default :
break loop4;
}
} while (true);
char_literal41=input.LT(1);
match(input,26,FOLLOW_26_in_idList0235);
list_26.add(char_literal41);
// AST REWRITE
int i_0 = 0;
retval.tree = root_0;
root_0 = adaptor.nil();
// 38:24: -> ^( IDLIST ( identifier )* )
{
// Bst.g:38:27: ^( IDLIST ( identifier )* )
{
Object root_1 = adaptor.nil();
root_1 = adaptor.becomeRoot(adaptor.create(IDLIST, "IDLIST"), root_1);
// Bst.g:38:36: ( identifier )*
{
int n_1 = list_identifier == null ? 0 : list_identifier.size();
for (int i_1=0; i_1<n_1; i_1++) {
adaptor.addChild(root_1, list_identifier.get(i_1));
}
}
adaptor.addChild(root_0, root_1);
}
}
}
}
catch (RecognitionException re) {
reportError(re);
recover(input,re);
}
finally {
retval.stop = input.LT(-1);
retval.tree = adaptor.rulePostProcessing(root_0);
adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
}
return retval;
}
// $ANTLR end idList0
public static class function_return extends ParserRuleReturnScope {
Object tree;
public Object getTree() { return tree; }
}
// $ANTLR start function
// Bst.g:40:1: function : ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier );
public function_return function() throws RecognitionException {
function_return retval = new function_return();
retval.start = input.LT(1);
Object root_0 = null;
Token char_literal42=null;
Token char_literal43=null;
Token char_literal44=null;
Token char_literal45=null;
Token char_literal46=null;
Token string_literal47=null;
Token char_literal48=null;
identifier_return identifier49 = null;
Object char_literal42_tree=null;
Object char_literal43_tree=null;
Object char_literal44_tree=null;
Object char_literal45_tree=null;
Object char_literal46_tree=null;
Object string_literal47_tree=null;
Object char_literal48_tree=null;
try {
// Bst.g:41:4: ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier )
int alt5=8;
switch ( input.LA(1) ) {
case 27:
alt5=1;
break;
case 28:
alt5=2;
break;
case 29:
alt5=3;
break;
case 30:
alt5=4;
break;
case 31:
alt5=5;
break;
case 32:
alt5=6;
break;
case 33:
alt5=7;
break;
case IDENTIFIER:
alt5=8;
break;
default:
NoViableAltException nvae =
new NoViableAltException("40:1: function : ( '<' | '>' | '=' | '+' | '-' | ':=' | '*' | identifier );", 5, 0, input);
throw nvae;
}
switch (alt5) {
case 1 :
// Bst.g:41:4: '<'
{
root_0 = adaptor.nil();
char_literal42=input.LT(1);
match(input,27,FOLLOW_27_in_function254);
char_literal42_tree = adaptor.create(char_literal42);
adaptor.addChild(root_0, char_literal42_tree);
}
break;
case 2 :
// Bst.g:41:10: '>'
{
root_0 = adaptor.nil();
char_literal43=input.LT(1);
match(input,28,FOLLOW_28_in_function258);
char_literal43_tree = adaptor.create(char_literal43);
adaptor.addChild(root_0, char_literal43_tree);
}
break;
case 3 :
// Bst.g:41:16: '='
{
root_0 = adaptor.nil();
char_literal44=input.LT(1);
match(input,29,FOLLOW_29_in_function262);
char_literal44_tree = adaptor.create(char_literal44);
adaptor.addChild(root_0, char_literal44_tree);
}
break;
case 4 :
// Bst.g:41:22: '+'
{
root_0 = adaptor.nil();
char_literal45=input.LT(1);
match(input,30,FOLLOW_30_in_function266);
char_literal45_tree = adaptor.create(char_literal45);
adaptor.addChild(root_0, char_literal45_tree);
}
break;
case 5 :
// Bst.g:41:28: '-'
{
root_0 = adaptor.nil();
char_literal46=input.LT(1);
match(input,31,FOLLOW_31_in_function270);
char_literal46_tree = adaptor.create(char_literal46);
adaptor.addChild(root_0, char_literal46_tree);
}
break;
case 6 :
// Bst.g:41:34: ':='
{
root_0 = adaptor.nil();
string_literal47=input.LT(1);
match(input,32,FOLLOW_32_in_function274);
string_literal47_tree = adaptor.create(string_literal47);
adaptor.addChild(root_0, string_literal47_tree);
}
break;
case 7 :
// Bst.g:41:41: '*'
{
root_0 = adaptor.nil();
char_literal48=input.LT(1);
match(input,33,FOLLOW_33_in_function278);
char_literal48_tree = adaptor.create(char_literal48);
adaptor.addChild(root_0, char_literal48_tree);
}
break;
case 8 :
// Bst.g:41:47: identifier
{
root_0 = adaptor.nil();
pushFollow(FOLLOW_identifier_in_function282);
identifier49=identifier();
_fsp--;
adaptor.addChild(root_0, identifier49.tree);
}
break;
}
}
catch (RecognitionException re) {
reportError(re);
recover(input,re);
}
finally {
retval.stop = input.LT(-1);
retval.tree = adaptor.rulePostProcessing(root_0);
adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
}
return retval;
}
// $ANTLR end function
public static class stack_return extends ParserRuleReturnScope {
Object tree;
public Object getTree() { return tree; }
}
// $ANTLR start stack
// Bst.g:43:1: stack : '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) ;
public stack_return stack() throws RecognitionException {
stack_return retval = new stack_return();
retval.start = input.LT(1);
Object root_0 = null;
Token char_literal50=null;
Token char_literal52=null;
stackitem_return stackitem51 = null;
List list_stackitem=new ArrayList();
List list_26=new ArrayList();
List list_25=new ArrayList();
Object char_literal50_tree=null;
Object char_literal52_tree=null;
try {
// Bst.g:44:4: ( '{' ( stackitem )+ '}' -> ^( STACK ( stackitem )+ ) )
// Bst.g:44:4: '{' ( stackitem )+ '}'
{
char_literal50=input.LT(1);
match(input,25,FOLLOW_25_in_stack293);
list_25.add(char_literal50);
// Bst.g:44:8: ( stackitem )+
int cnt6=0;
loop6:
do {
int alt6=2;
int LA6_0 = input.LA(1);
if ( (LA6_0==STRING||(LA6_0>=IDENTIFIER && LA6_0<=QUOTED)||LA6_0==25||(LA6_0>=27 && LA6_0<=33)) ) {
alt6=1;
}
switch (alt6) {
case 1 :
// Bst.g:44:8: stackitem
{
pushFollow(FOLLOW_stackitem_in_stack295);
stackitem51=stackitem();
_fsp--;
list_stackitem.add(stackitem51.tree);
}
break;
default :
if ( cnt6 >= 1 ) break loop6;
EarlyExitException eee =
new EarlyExitException(6, input);
throw eee;
}
cnt6++;
} while (true);
char_literal52=input.LT(1);
match(input,26,FOLLOW_26_in_stack298);
list_26.add(char_literal52);
// AST REWRITE
int i_0 = 0;
retval.tree = root_0;
root_0 = adaptor.nil();
// 44:23: -> ^( STACK ( stackitem )+ )
{
// Bst.g:44:26: ^( STACK ( stackitem )+ )
{
Object root_1 = adaptor.nil();
root_1 = adaptor.becomeRoot(adaptor.create(STACK, "STACK"), root_1);
// Bst.g:44:34: ( stackitem )+
{
int n_1 = list_stackitem == null ? 0 : list_stackitem.size();
if ( n_1==0 ) throw new RuntimeException("Must have more than one element for (...)+ loops");
for (int i_1=0; i_1<n_1; i_1++) {
adaptor.addChild(root_1, list_stackitem.get(i_1));
}
}
adaptor.addChild(root_0, root_1);
}
}
}
}
catch (RecognitionException re) {
reportError(re);
recover(input,re);
}
finally {
retval.stop = input.LT(-1);
retval.tree = adaptor.rulePostProcessing(root_0);
adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
}
return retval;
}
// $ANTLR end stack
public static class stackitem_return extends ParserRuleReturnScope {
Object tree;
public Object getTree() { return tree; }
}
// $ANTLR start stackitem
// Bst.g:46:1: stackitem : ( function | STRING | INTEGER | QUOTED | stack );
public stackitem_return stackitem() throws RecognitionException {
stackitem_return retval = new stackitem_return();
retval.start = input.LT(1);
Object root_0 = null;
Token STRING54=null;
Token INTEGER55=null;
Token QUOTED56=null;
function_return function53 = null;
stack_return stack57 = null;
Object STRING54_tree=null;
Object INTEGER55_tree=null;
Object QUOTED56_tree=null;
try {
// Bst.g:47:4: ( function | STRING | INTEGER | QUOTED | stack )
int alt7=5;
switch ( input.LA(1) ) {
case IDENTIFIER:
case 27:
case 28:
case 29:
case 30:
case 31:
case 32:
case 33:
alt7=1;
break;
case STRING:
alt7=2;
break;
case INTEGER:
alt7=3;
break;
case QUOTED:
alt7=4;
break;
case 25:
alt7=5;
break;
default:
NoViableAltException nvae =
new NoViableAltException("46:1: stackitem : ( function | STRING | INTEGER | QUOTED | stack );", 7, 0, input);
throw nvae;
}
switch (alt7) {
case 1 :
// Bst.g:47:4: function
{
root_0 = adaptor.nil();
pushFollow(FOLLOW_function_in_stackitem317);
function53=function();
_fsp--;
adaptor.addChild(root_0, function53.tree);
}
break;
case 2 :
// Bst.g:48:4: STRING
{
root_0 = adaptor.nil();
STRING54=input.LT(1);
match(input,STRING,FOLLOW_STRING_in_stackitem322);
STRING54_tree = adaptor.create(STRING54);
adaptor.addChild(root_0, STRING54_tree);
}
break;
case 3 :
// Bst.g:49:4: INTEGER
{
root_0 = adaptor.nil();
INTEGER55=input.LT(1);
match(input,INTEGER,FOLLOW_INTEGER_in_stackitem328);
INTEGER55_tree = adaptor.create(INTEGER55);
adaptor.addChild(root_0, INTEGER55_tree);
}
break;
case 4 :
// Bst.g:50:4: QUOTED
{
root_0 = adaptor.nil();
QUOTED56=input.LT(1);
match(input,QUOTED,FOLLOW_QUOTED_in_stackitem334);
QUOTED56_tree = adaptor.create(QUOTED56);
adaptor.addChild(root_0, QUOTED56_tree);
}
break;
case 5 :
// Bst.g:51:4: stack
{
root_0 = adaptor.nil();
pushFollow(FOLLOW_stack_in_stackitem339);
stack57=stack();
_fsp--;
adaptor.addChild(root_0, stack57.tree);
}
break;
}
}
catch (RecognitionException re) {
reportError(re);
recover(input,re);
}
finally {
retval.stop = input.LT(-1);
retval.tree = adaptor.rulePostProcessing(root_0);
adaptor.setTokenBoundaries(retval.tree, retval.start, retval.stop);
}
return retval;
}
// $ANTLR end stackitem
public static final BitSet FOLLOW_commands_in_program45 = new BitSet(new long[]{0x000000000003EF42L});
public static final BitSet FOLLOW_STRINGS_in_commands65 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_idList_in_commands68 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_INTEGERS_in_commands73 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_idList_in_commands76 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_FUNCTION_in_commands81 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_id_in_commands84 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_stack_in_commands86 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_MACRO_in_commands91 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_id_in_commands94 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_25_in_commands96 = new BitSet(new long[]{0x0000000000001000L});
public static final BitSet FOLLOW_STRING_in_commands99 = new BitSet(new long[]{0x0000000004000000L});
public static final BitSet FOLLOW_26_in_commands101 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_READ_in_commands107 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_EXECUTE_in_commands113 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_25_in_commands116 = new BitSet(new long[]{0x00000003F8040000L});
public static final BitSet FOLLOW_function_in_commands119 = new BitSet(new long[]{0x0000000004000000L});
public static final BitSet FOLLOW_26_in_commands121 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_ITERATE_in_commands127 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_25_in_commands130 = new BitSet(new long[]{0x00000003F8040000L});
public static final BitSet FOLLOW_function_in_commands133 = new BitSet(new long[]{0x0000000004000000L});
public static final BitSet FOLLOW_26_in_commands135 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_REVERSE_in_commands141 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_25_in_commands144 = new BitSet(new long[]{0x00000003F8040000L});
public static final BitSet FOLLOW_function_in_commands147 = new BitSet(new long[]{0x0000000004000000L});
public static final BitSet FOLLOW_26_in_commands149 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_ENTRY_in_commands155 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_idList0_in_commands158 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_idList0_in_commands160 = new BitSet(new long[]{0x0000000002000000L});
public static final BitSet FOLLOW_idList0_in_commands162 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_SORT_in_commands167 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_IDENTIFIER_in_identifier178 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_25_in_id188 = new BitSet(new long[]{0x0000000000040000L});
public static final BitSet FOLLOW_identifier_in_id191 = new BitSet(new long[]{0x0000000004000000L});
public static final BitSet FOLLOW_26_in_id193 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_25_in_idList205 = new BitSet(new long[]{0x0000000000040000L});
public static final BitSet FOLLOW_identifier_in_idList207 = new BitSet(new long[]{0x0000000004040000L});
public static final BitSet FOLLOW_26_in_idList210 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_25_in_idList0230 = new BitSet(new long[]{0x0000000004040000L});
public static final BitSet FOLLOW_identifier_in_idList0232 = new BitSet(new long[]{0x0000000004040000L});
public static final BitSet FOLLOW_26_in_idList0235 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_27_in_function254 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_28_in_function258 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_29_in_function262 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_30_in_function266 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_31_in_function270 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_32_in_function274 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_33_in_function278 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_identifier_in_function282 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_25_in_stack293 = new BitSet(new long[]{0x00000003FA1C1000L});
public static final BitSet FOLLOW_stackitem_in_stack295 = new BitSet(new long[]{0x00000003FE1C1000L});
public static final BitSet FOLLOW_26_in_stack298 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_function_in_stackitem317 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_STRING_in_stackitem322 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_INTEGER_in_stackitem328 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_QUOTED_in_stackitem334 = new BitSet(new long[]{0x0000000000000002L});
public static final BitSet FOLLOW_stack_in_stackitem339 = new BitSet(new long[]{0x0000000000000002L});
}