Package processing.app.preproc

Source Code of processing.app.preproc.StdCParser

// $ANTLR 2.7.2: "StdCParser.g" -> "StdCParser.java"$

package processing.app.preproc;
import java.io.*;

import antlr.CommonAST;
import antlr.DumpASTVisitor;

import antlr.TokenBuffer;
import antlr.TokenStreamException;
import antlr.TokenStreamIOException;
import antlr.ANTLRException;
import antlr.LLkParser;
import antlr.Token;
import antlr.TokenStream;
import antlr.RecognitionException;
import antlr.NoViableAltException;
import antlr.MismatchedTokenException;
import antlr.SemanticException;
import antlr.ParserSharedInputState;
import antlr.collections.impl.BitSet;
import antlr.collections.AST;
import java.util.Hashtable;
import antlr.ASTFactory;
import antlr.ASTPair;
import antlr.collections.impl.ASTArray;

public class StdCParser extends antlr.LLkParser       implements STDCTokenTypes
{

    // Suppport C++-style single-line comments?
    public static boolean CPPComments = true;

    // access to symbol table
    public CSymbolTable symbolTable = new CSymbolTable();

    // source for names to unnamed scopes
    protected int unnamedScopeCounter = 0;

    public boolean isTypedefName(String name) {
      boolean returnValue = false;
      TNode node = symbolTable.lookupNameInCurrentScope(name);
      for (; node != null; node = (TNode) node.getNextSibling() ) {
        if(node.getType() == LITERAL_typedef) {
            returnValue = true;
            break;
        }
      }
      return returnValue;
    }


    public String getAScopeName() {
      return "" + (unnamedScopeCounter++);
    }

    public void pushScope(String scopeName) {
      symbolTable.pushScope(scopeName);
    }

    public void popScope() {
      symbolTable.popScope();
    }

        int traceDepth = 0;
        public void reportError(RecognitionException ex) {
          try {
            System.err.println("ANTLR Parsing Error: "+ex + " token name:" + tokenNames[LA(1)]);
            ex.printStackTrace(System.err);
          }
    catch (TokenStreamException e) {
            System.err.println("ANTLR Parsing Error: "+ex);
            ex.printStackTrace(System.err);             
          }
        }
        public void reportError(String s) {
            System.err.println("ANTLR Parsing Error from String: " + s);
        }
        public void reportWarning(String s) {
            System.err.println("ANTLR Parsing Warning from String: " + s);
        }
        public void match(int t) throws MismatchedTokenException {
          boolean debugging = false;
         
          if ( debugging ) {
           for (int x=0; x<traceDepth; x++) System.out.print(" ");
           try {
            System.out.println("Match("+tokenNames[t]+") with LA(1)="+
                tokenNames[LA(1)] + ((inputState.guessing>0)?" [inputState.guessing "+ inputState.guessing + "]":""));
           }
           catch (TokenStreamException e) {
            System.out.println("Match("+tokenNames[t]+") " + ((inputState.guessing>0)?" [inputState.guessing "+ inputState.guessing + "]":""));

           }
   
          }
          try {
            if ( LA(1)!=t ) {
                if ( debugging ){
                    for (int x=0; x<traceDepth; x++) System.out.print(" ");
                    System.out.println("token mismatch: "+tokenNames[LA(1)]
                                + "!="+tokenNames[t]);
                }
          throw new MismatchedTokenException(tokenNames, LT(1), t, false, getFilename());

            } else {
                // mark token as consumed -- fetch next token deferred until LA/LT
                consume();
            }
          }
          catch (TokenStreamException e) {
          }
   
        }
        public void traceIn(String rname) {
          traceDepth += 1;
          for (int x=0; x<traceDepth; x++) System.out.print(" ");
          try {
            System.out.println("> "+rname+"; LA(1)==("+ tokenNames[LT(1).getType()]
                + ") " + LT(1).getText() + " [inputState.guessing "+ inputState.guessing + "]");
          }
          catch (TokenStreamException e) {
          }
        }
        public void traceOut(String rname) {
          for (int x=0; x<traceDepth; x++) System.out.print(" ");
          try {
            System.out.println("< "+rname+"; LA(1)==("+ tokenNames[LT(1).getType()]
                + ") "+LT(1).getText() + " [inputState.guessing "+ inputState.guessing + "]");
          }
          catch (TokenStreamException e) {
          }
          traceDepth -= 1;
        }
   

protected StdCParser(TokenBuffer tokenBuf, int k) {
  super(tokenBuf,k);
  tokenNames = _tokenNames;
  buildTokenTypeASTClassMap();
  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
}

public StdCParser(TokenBuffer tokenBuf) {
  this(tokenBuf,2);
}

protected StdCParser(TokenStream lexer, int k) {
  super(lexer,k);
  tokenNames = _tokenNames;
  buildTokenTypeASTClassMap();
  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
}

public StdCParser(TokenStream lexer) {
  this(lexer,2);
}

public StdCParser(ParserSharedInputState state) {
  super(state,2);
  tokenNames = _tokenNames;
  buildTokenTypeASTClassMap();
  astFactory = new ASTFactory(getTokenTypeToASTClassMap());
}

  public final void translationUnit() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode translationUnit_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case LITERAL_typedef:
      case LITERAL_asm:
      case LITERAL_volatile:
      case LITERAL_struct:
      case LITERAL_union:
      case LITERAL_enum:
      case LITERAL_auto:
      case LITERAL_register:
      case LITERAL_extern:
      case LITERAL_static:
      case LITERAL_const:
      case LITERAL_void:
      case LITERAL_char:
      case LITERAL_short:
      case LITERAL_int:
      case LITERAL_long:
      case LITERAL_float:
      case LITERAL_double:
      case LITERAL_signed:
      case LITERAL_unsigned:
      case ID:
      case STAR:
      case LPAREN:
      {
        externalList();
        astFactory.addASTChild(currentAST, returnAST);
        translationUnit_AST = (TNode)currentAST.root;
        break;
      }
      case EOF:
      {
        if ( inputState.guessing==0 ) {
         
          System.err.println ( "Empty source file!" );
         
        }
        translationUnit_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_0);
      } else {
        throw ex;
      }
    }
    returnAST = translationUnit_AST;
  }
 
  public final void externalList() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode externalList_AST = null;
   
    try {      // for error handling
      {
      int _cnt4=0;
      _loop4:
      do {
        if ((_tokenSet_1.member(LA(1)))) {
          externalDef();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          if ( _cnt4>=1 ) { break _loop4; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
       
        _cnt4++;
      } while (true);
      }
      externalList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_0);
      } else {
        throw ex;
      }
    }
    returnAST = externalList_AST;
  }
 
  public final void externalDef() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode externalDef_AST = null;
   
    try {      // for error handling
      boolean synPredMatched7 = false;
      if (((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2))))) {
        int _m7 = mark();
        synPredMatched7 = true;
        inputState.guessing++;
        try {
          {
          if ((LA(1)==LITERAL_typedef) && (true)) {
            match(LITERAL_typedef);
          }
          else if ((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2)))) {
            declaration();
          }
          else {
            throw new NoViableAltException(LT(1), getFilename());
          }
         
          }
        }
        catch (RecognitionException pe) {
          synPredMatched7 = false;
        }
        rewind(_m7);
        inputState.guessing--;
      }
      if ( synPredMatched7 ) {
        declaration();
        astFactory.addASTChild(currentAST, returnAST);
        externalDef_AST = (TNode)currentAST.root;
      }
      else if ((_tokenSet_4.member(LA(1))) && (_tokenSet_5.member(LA(2)))) {
        functionDef();
        astFactory.addASTChild(currentAST, returnAST);
        externalDef_AST = (TNode)currentAST.root;
      }
      else if ((LA(1)==LITERAL_asm)) {
        asm_expr();
        astFactory.addASTChild(currentAST, returnAST);
        externalDef_AST = (TNode)currentAST.root;
      }
      else {
        throw new NoViableAltException(LT(1), getFilename());
      }
     
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_6);
      } else {
        throw ex;
      }
    }
    returnAST = externalDef_AST;
  }
 
  public final void declaration() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode declaration_AST = null;
    TNode ds_AST = null;
    AST ds1 = null;
   
    try {      // for error handling
      declSpecifiers();
      ds_AST = (TNode)returnAST;
      astFactory.addASTChild(currentAST, returnAST);
      if ( inputState.guessing==0 ) {
        ds1 = astFactory.dupList(ds_AST);
      }
      {
      switch ( LA(1)) {
      case ID:
      case STAR:
      case LPAREN:
      {
        initDeclList(ds1);
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case SEMI:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      match(SEMI);
      if ( inputState.guessing==0 ) {
        declaration_AST = (TNode)currentAST.root;
        declaration_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NDeclaration)).add(declaration_AST));
        currentAST.root = declaration_AST;
        currentAST.child = declaration_AST!=null &&declaration_AST.getFirstChild()!=null ?
          declaration_AST.getFirstChild() : declaration_AST;
        currentAST.advanceChildToEnd();
      }
      declaration_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_7);
      } else {
        throw ex;
      }
    }
    returnAST = declaration_AST;
  }
 
  public final void functionDef() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode functionDef_AST = null;
    TNode ds_AST = null;
    TNode d_AST = null;
    String declName;
   
    try {      // for error handling
      {
      boolean synPredMatched94 = false;
      if (((_tokenSet_8.member(LA(1))) && (_tokenSet_9.member(LA(2))))) {
        int _m94 = mark();
        synPredMatched94 = true;
        inputState.guessing++;
        try {
          {
          functionDeclSpecifiers();
          }
        }
        catch (RecognitionException pe) {
          synPredMatched94 = false;
        }
        rewind(_m94);
        inputState.guessing--;
      }
      if ( synPredMatched94 ) {
        functionDeclSpecifiers();
        ds_AST = (TNode)returnAST;
        astFactory.addASTChild(currentAST, returnAST);
      }
      else if ((_tokenSet_10.member(LA(1))) && (_tokenSet_5.member(LA(2)))) {
      }
      else {
        throw new NoViableAltException(LT(1), getFilename());
      }
     
      }
      declName=declarator(true);
      d_AST = (TNode)returnAST;
      astFactory.addASTChild(currentAST, returnAST);
      if ( inputState.guessing==0 ) {
       
        AST d2, ds2;
        d2 = astFactory.dupList(d_AST);
        ds2 = astFactory.dupList(ds_AST);
        symbolTable.add(declName, (TNode)astFactory.make( (new ASTArray(3)).add(null).add(ds2).add(d2)));
        pushScope(declName);
       
      }
      {
      _loop96:
      do {
        if ((_tokenSet_2.member(LA(1)))) {
          declaration();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop96;
        }
       
      } while (true);
      }
      {
      switch ( LA(1)) {
      case VARARGS:
      {
        TNode tmp2_AST = null;
        tmp2_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp2_AST);
        match(VARARGS);
        break;
      }
      case LCURLY:
      case SEMI:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      {
      _loop99:
      do {
        if ((LA(1)==SEMI)) {
          match(SEMI);
        }
        else {
          break _loop99;
        }
       
      } while (true);
      }
      if ( inputState.guessing==0 ) {
        popScope();
      }
      compoundStatement(declName);
      astFactory.addASTChild(currentAST, returnAST);
      if ( inputState.guessing==0 ) {
        functionDef_AST = (TNode)currentAST.root;
        functionDef_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NFunctionDef)).add(functionDef_AST));
        currentAST.root = functionDef_AST;
        currentAST.child = functionDef_AST!=null &&functionDef_AST.getFirstChild()!=null ?
          functionDef_AST.getFirstChild() : functionDef_AST;
        currentAST.advanceChildToEnd();
      }
      functionDef_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_6);
      } else {
        throw ex;
      }
    }
    returnAST = functionDef_AST;
  }
 
  public final void asm_expr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode asm_expr_AST = null;
   
    try {      // for error handling
      TNode tmp4_AST = null;
      tmp4_AST = (TNode)astFactory.create(LT(1));
      astFactory.makeASTRoot(currentAST, tmp4_AST);
      match(LITERAL_asm);
      {
      switch ( LA(1)) {
      case LITERAL_volatile:
      {
        TNode tmp5_AST = null;
        tmp5_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp5_AST);
        match(LITERAL_volatile);
        break;
      }
      case LCURLY:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      match(LCURLY);
      expr();
      astFactory.addASTChild(currentAST, returnAST);
      match(RCURLY);
      match(SEMI);
      asm_expr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_6);
      } else {
        throw ex;
      }
    }
    returnAST = asm_expr_AST;
  }
 
  public final void expr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode expr_AST = null;
    Token  c = null;
    TNode c_AST = null;
   
    try {      // for error handling
      assignExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop129:
      do {
        if ((LA(1)==COMMA) && (_tokenSet_11.member(LA(2)))) {
          c = LT(1);
          c_AST = (TNode)astFactory.create(c);
          astFactory.makeASTRoot(currentAST, c_AST);
          match(COMMA);
          if ( inputState.guessing==0 ) {
            c_AST.setType(NCommaExpr);
          }
          assignExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop129;
        }
       
      } while (true);
      }
      expr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_12);
      } else {
        throw ex;
      }
    }
    returnAST = expr_AST;
  }
 
  public final void declSpecifiers() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode declSpecifiers_AST = null;
    TNode s_AST = null;
    int specCount=0;
   
    try {      // for error handling
      {
      int _cnt16=0;
      _loop16:
      do {
        switch ( LA(1)) {
        case LITERAL_typedef:
        case LITERAL_auto:
        case LITERAL_register:
        case LITERAL_extern:
        case LITERAL_static:
        {
          storageClassSpecifier();
          s_AST = (TNode)returnAST;
          astFactory.addASTChild(currentAST, returnAST);
          break;
        }
        case LITERAL_volatile:
        case LITERAL_const:
        {
          typeQualifier();
          astFactory.addASTChild(currentAST, returnAST);
          break;
        }
        default:
          boolean synPredMatched15 = false;
          if (((_tokenSet_13.member(LA(1))) && (_tokenSet_14.member(LA(2))))) {
            int _m15 = mark();
            synPredMatched15 = true;
            inputState.guessing++;
            try {
              {
              if ((LA(1)==LITERAL_struct) && (true)) {
                match(LITERAL_struct);
              }
              else if ((LA(1)==LITERAL_union) && (true)) {
                match(LITERAL_union);
              }
              else if ((LA(1)==LITERAL_enum) && (true)) {
                match(LITERAL_enum);
              }
              else if ((_tokenSet_13.member(LA(1))) && (true)) {
                typeSpecifier(specCount);
              }
              else {
                throw new NoViableAltException(LT(1), getFilename());
              }
             
              }
            }
            catch (RecognitionException pe) {
              synPredMatched15 = false;
            }
            rewind(_m15);
            inputState.guessing--;
          }
          if ( synPredMatched15 ) {
            specCount=typeSpecifier(specCount);
            astFactory.addASTChild(currentAST, returnAST);
          }
        else {
          if ( _cnt16>=1 ) { break _loop16; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
        }
        _cnt16++;
      } while (true);
      }
      declSpecifiers_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_15);
      } else {
        throw ex;
      }
    }
    returnAST = declSpecifiers_AST;
  }
 
  public final void initDeclList(
    AST declarationSpecifiers
  ) throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode initDeclList_AST = null;
   
    try {      // for error handling
      initDecl(declarationSpecifiers);
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop56:
      do {
        if ((LA(1)==COMMA)) {
          match(COMMA);
          initDecl(declarationSpecifiers);
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop56;
        }
       
      } while (true);
      }
      initDeclList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_16);
      } else {
        throw ex;
      }
    }
    returnAST = initDeclList_AST;
  }
 
  public final void storageClassSpecifier() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode storageClassSpecifier_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case LITERAL_auto:
      {
        TNode tmp10_AST = null;
        tmp10_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp10_AST);
        match(LITERAL_auto);
        storageClassSpecifier_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_register:
      {
        TNode tmp11_AST = null;
        tmp11_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp11_AST);
        match(LITERAL_register);
        storageClassSpecifier_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_typedef:
      {
        TNode tmp12_AST = null;
        tmp12_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp12_AST);
        match(LITERAL_typedef);
        storageClassSpecifier_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_extern:
      case LITERAL_static:
      {
        functionStorageClassSpecifier();
        astFactory.addASTChild(currentAST, returnAST);
        storageClassSpecifier_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_17);
      } else {
        throw ex;
      }
    }
    returnAST = storageClassSpecifier_AST;
  }
 
  public final void typeQualifier() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode typeQualifier_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case LITERAL_const:
      {
        TNode tmp13_AST = null;
        tmp13_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp13_AST);
        match(LITERAL_const);
        typeQualifier_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_volatile:
      {
        TNode tmp14_AST = null;
        tmp14_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp14_AST);
        match(LITERAL_volatile);
        typeQualifier_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_18);
      } else {
        throw ex;
      }
    }
    returnAST = typeQualifier_AST;
  }
 
  public final int  typeSpecifier(
    int specCount
  ) throws RecognitionException, TokenStreamException {
    int retSpecCount;
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode typeSpecifier_AST = null;
    retSpecCount = specCount + 1;
   
    try {      // for error handling
      {
      switch ( LA(1)) {
      case LITERAL_void:
      {
        TNode tmp15_AST = null;
        tmp15_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp15_AST);
        match(LITERAL_void);
        break;
      }
      case LITERAL_char:
      {
        TNode tmp16_AST = null;
        tmp16_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp16_AST);
        match(LITERAL_char);
        break;
      }
      case LITERAL_short:
      {
        TNode tmp17_AST = null;
        tmp17_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp17_AST);
        match(LITERAL_short);
        break;
      }
      case LITERAL_int:
      {
        TNode tmp18_AST = null;
        tmp18_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp18_AST);
        match(LITERAL_int);
        break;
      }
      case LITERAL_long:
      {
        TNode tmp19_AST = null;
        tmp19_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp19_AST);
        match(LITERAL_long);
        break;
      }
      case LITERAL_float:
      {
        TNode tmp20_AST = null;
        tmp20_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp20_AST);
        match(LITERAL_float);
        break;
      }
      case LITERAL_double:
      {
        TNode tmp21_AST = null;
        tmp21_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp21_AST);
        match(LITERAL_double);
        break;
      }
      case LITERAL_signed:
      {
        TNode tmp22_AST = null;
        tmp22_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp22_AST);
        match(LITERAL_signed);
        break;
      }
      case LITERAL_unsigned:
      {
        TNode tmp23_AST = null;
        tmp23_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp23_AST);
        match(LITERAL_unsigned);
        break;
      }
      case LITERAL_struct:
      case LITERAL_union:
      {
        structOrUnionSpecifier();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case LITERAL_enum:
      {
        enumSpecifier();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      default:
        if (((LA(1)==ID))&&( specCount == 0 )) {
          typedefName();
          astFactory.addASTChild(currentAST, returnAST);
        }
      else {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      typeSpecifier_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_18);
      } else {
        throw ex;
      }
    }
    returnAST = typeSpecifier_AST;
    return retSpecCount;
  }
 
  public final void functionStorageClassSpecifier() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode functionStorageClassSpecifier_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case LITERAL_extern:
      {
        TNode tmp24_AST = null;
        tmp24_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp24_AST);
        match(LITERAL_extern);
        functionStorageClassSpecifier_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_static:
      {
        TNode tmp25_AST = null;
        tmp25_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp25_AST);
        match(LITERAL_static);
        functionStorageClassSpecifier_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_17);
      } else {
        throw ex;
      }
    }
    returnAST = functionStorageClassSpecifier_AST;
  }
 
  public final void structOrUnionSpecifier() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode structOrUnionSpecifier_AST = null;
    TNode sou_AST = null;
    Token  i = null;
    TNode i_AST = null;
    Token  l = null;
    TNode l_AST = null;
    Token  l1 = null;
    TNode l1_AST = null;
    String scopeName;
   
    try {      // for error handling
      structOrUnion();
      sou_AST = (TNode)returnAST;
      {
      boolean synPredMatched26 = false;
      if (((LA(1)==ID) && (LA(2)==LCURLY))) {
        int _m26 = mark();
        synPredMatched26 = true;
        inputState.guessing++;
        try {
          {
          match(ID);
          match(LCURLY);
          }
        }
        catch (RecognitionException pe) {
          synPredMatched26 = false;
        }
        rewind(_m26);
        inputState.guessing--;
      }
      if ( synPredMatched26 ) {
        i = LT(1);
        i_AST = (TNode)astFactory.create(i);
        astFactory.addASTChild(currentAST, i_AST);
        match(ID);
        l = LT(1);
        l_AST = (TNode)astFactory.create(l);
        astFactory.addASTChild(currentAST, l_AST);
        match(LCURLY);
        if ( inputState.guessing==0 ) {
         
          scopeName = sou_AST.getText() + " " + i_AST.getText();
          l_AST.setText(scopeName);
          pushScope(scopeName);
         
        }
        structDeclarationList();
        astFactory.addASTChild(currentAST, returnAST);
        if ( inputState.guessing==0 ) {
          popScope();
        }
        match(RCURLY);
      }
      else if ((LA(1)==LCURLY)) {
        l1 = LT(1);
        l1_AST = (TNode)astFactory.create(l1);
        astFactory.addASTChild(currentAST, l1_AST);
        match(LCURLY);
        if ( inputState.guessing==0 ) {
         
          scopeName = getAScopeName();
          l1_AST.setText(scopeName);
          pushScope(scopeName);
         
        }
        structDeclarationList();
        astFactory.addASTChild(currentAST, returnAST);
        if ( inputState.guessing==0 ) {
          popScope();
        }
        match(RCURLY);
      }
      else if ((LA(1)==ID) && (_tokenSet_18.member(LA(2)))) {
        TNode tmp28_AST = null;
        tmp28_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp28_AST);
        match(ID);
      }
      else {
        throw new NoViableAltException(LT(1), getFilename());
      }
     
      }
      if ( inputState.guessing==0 ) {
        structOrUnionSpecifier_AST = (TNode)currentAST.root;
       
        structOrUnionSpecifier_AST = (TNode)astFactory.make( (new ASTArray(2)).add(sou_AST).add(structOrUnionSpecifier_AST));
       
        currentAST.root = structOrUnionSpecifier_AST;
        currentAST.child = structOrUnionSpecifier_AST!=null &&structOrUnionSpecifier_AST.getFirstChild()!=null ?
          structOrUnionSpecifier_AST.getFirstChild() : structOrUnionSpecifier_AST;
        currentAST.advanceChildToEnd();
      }
      structOrUnionSpecifier_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_18);
      } else {
        throw ex;
      }
    }
    returnAST = structOrUnionSpecifier_AST;
  }
 
  public final void enumSpecifier() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode enumSpecifier_AST = null;
    Token  i = null;
    TNode i_AST = null;
   
    try {      // for error handling
      TNode tmp29_AST = null;
      tmp29_AST = (TNode)astFactory.create(LT(1));
      astFactory.makeASTRoot(currentAST, tmp29_AST);
      match(LITERAL_enum);
      {
      boolean synPredMatched48 = false;
      if (((LA(1)==ID) && (LA(2)==LCURLY))) {
        int _m48 = mark();
        synPredMatched48 = true;
        inputState.guessing++;
        try {
          {
          match(ID);
          match(LCURLY);
          }
        }
        catch (RecognitionException pe) {
          synPredMatched48 = false;
        }
        rewind(_m48);
        inputState.guessing--;
      }
      if ( synPredMatched48 ) {
        i = LT(1);
        i_AST = (TNode)astFactory.create(i);
        astFactory.addASTChild(currentAST, i_AST);
        match(ID);
        TNode tmp30_AST = null;
        tmp30_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp30_AST);
        match(LCURLY);
        enumList(i.getText());
        astFactory.addASTChild(currentAST, returnAST);
        match(RCURLY);
      }
      else if ((LA(1)==LCURLY)) {
        TNode tmp32_AST = null;
        tmp32_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp32_AST);
        match(LCURLY);
        enumList("anonymous");
        astFactory.addASTChild(currentAST, returnAST);
        match(RCURLY);
      }
      else if ((LA(1)==ID) && (_tokenSet_18.member(LA(2)))) {
        TNode tmp34_AST = null;
        tmp34_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp34_AST);
        match(ID);
      }
      else {
        throw new NoViableAltException(LT(1), getFilename());
      }
     
      }
      enumSpecifier_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_18);
      } else {
        throw ex;
      }
    }
    returnAST = enumSpecifier_AST;
  }
 
  public final void typedefName() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode typedefName_AST = null;
    Token  i = null;
    TNode i_AST = null;
   
    try {      // for error handling
      if (!( isTypedefName ( LT(1).getText() ) ))
        throw new SemanticException(" isTypedefName ( LT(1).getText() ) ");
      i = LT(1);
      i_AST = (TNode)astFactory.create(i);
      astFactory.addASTChild(currentAST, i_AST);
      match(ID);
      if ( inputState.guessing==0 ) {
        typedefName_AST = (TNode)currentAST.root;
        typedefName_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NTypedefName)).add(i_AST));
        currentAST.root = typedefName_AST;
        currentAST.child = typedefName_AST!=null &&typedefName_AST.getFirstChild()!=null ?
          typedefName_AST.getFirstChild() : typedefName_AST;
        currentAST.advanceChildToEnd();
      }
      typedefName_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_18);
      } else {
        throw ex;
      }
    }
    returnAST = typedefName_AST;
  }
 
  public final void structOrUnion() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode structOrUnion_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case LITERAL_struct:
      {
        TNode tmp35_AST = null;
        tmp35_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp35_AST);
        match(LITERAL_struct);
        structOrUnion_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_union:
      {
        TNode tmp36_AST = null;
        tmp36_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp36_AST);
        match(LITERAL_union);
        structOrUnion_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_19);
      } else {
        throw ex;
      }
    }
    returnAST = structOrUnion_AST;
  }
 
  public final void structDeclarationList() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode structDeclarationList_AST = null;
   
    try {      // for error handling
      {
      int _cnt30=0;
      _loop30:
      do {
        if ((_tokenSet_20.member(LA(1)))) {
          structDeclaration();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          if ( _cnt30>=1 ) { break _loop30; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
       
        _cnt30++;
      } while (true);
      }
      structDeclarationList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_21);
      } else {
        throw ex;
      }
    }
    returnAST = structDeclarationList_AST;
  }
 
  public final void structDeclaration() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode structDeclaration_AST = null;
   
    try {      // for error handling
      specifierQualifierList();
      astFactory.addASTChild(currentAST, returnAST);
      structDeclaratorList();
      astFactory.addASTChild(currentAST, returnAST);
      {
      int _cnt33=0;
      _loop33:
      do {
        if ((LA(1)==SEMI)) {
          match(SEMI);
        }
        else {
          if ( _cnt33>=1 ) { break _loop33; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
       
        _cnt33++;
      } while (true);
      }
      structDeclaration_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_22);
      } else {
        throw ex;
      }
    }
    returnAST = structDeclaration_AST;
  }
 
  public final void specifierQualifierList() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode specifierQualifierList_AST = null;
    int specCount = 0;
   
    try {      // for error handling
      {
      int _cnt38=0;
      _loop38:
      do {
        boolean synPredMatched37 = false;
        if (((_tokenSet_13.member(LA(1))) && (_tokenSet_23.member(LA(2))))) {
          int _m37 = mark();
          synPredMatched37 = true;
          inputState.guessing++;
          try {
            {
            if ((LA(1)==LITERAL_struct) && (true)) {
              match(LITERAL_struct);
            }
            else if ((LA(1)==LITERAL_union) && (true)) {
              match(LITERAL_union);
            }
            else if ((LA(1)==LITERAL_enum) && (true)) {
              match(LITERAL_enum);
            }
            else if ((_tokenSet_13.member(LA(1))) && (true)) {
              typeSpecifier(specCount);
            }
            else {
              throw new NoViableAltException(LT(1), getFilename());
            }
           
            }
          }
          catch (RecognitionException pe) {
            synPredMatched37 = false;
          }
          rewind(_m37);
          inputState.guessing--;
        }
        if ( synPredMatched37 ) {
          specCount=typeSpecifier(specCount);
          astFactory.addASTChild(currentAST, returnAST);
        }
        else if ((LA(1)==LITERAL_volatile||LA(1)==LITERAL_const)) {
          typeQualifier();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          if ( _cnt38>=1 ) { break _loop38; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
       
        _cnt38++;
      } while (true);
      }
      specifierQualifierList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_24);
      } else {
        throw ex;
      }
    }
    returnAST = specifierQualifierList_AST;
  }
 
  public final void structDeclaratorList() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode structDeclaratorList_AST = null;
   
    try {      // for error handling
      structDeclarator();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop41:
      do {
        if ((LA(1)==COMMA)) {
          match(COMMA);
          structDeclarator();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop41;
        }
       
      } while (true);
      }
      structDeclaratorList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_16);
      } else {
        throw ex;
      }
    }
    returnAST = structDeclaratorList_AST;
  }
 
  public final void structDeclarator() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode structDeclarator_AST = null;
   
    try {      // for error handling
      {
      switch ( LA(1)) {
      case COLON:
      {
        TNode tmp39_AST = null;
        tmp39_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp39_AST);
        match(COLON);
        constExpr();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case ID:
      case STAR:
      case LPAREN:
      {
        declarator(false);
        astFactory.addASTChild(currentAST, returnAST);
        {
        switch ( LA(1)) {
        case COLON:
        {
          TNode tmp40_AST = null;
          tmp40_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp40_AST);
          match(COLON);
          constExpr();
          astFactory.addASTChild(currentAST, returnAST);
          break;
        }
        case SEMI:
        case COMMA:
        {
          break;
        }
        default:
        {
          throw new NoViableAltException(LT(1), getFilename());
        }
        }
        }
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      if ( inputState.guessing==0 ) {
        structDeclarator_AST = (TNode)currentAST.root;
        structDeclarator_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NStructDeclarator)).add(structDeclarator_AST));
        currentAST.root = structDeclarator_AST;
        currentAST.child = structDeclarator_AST!=null &&structDeclarator_AST.getFirstChild()!=null ?
          structDeclarator_AST.getFirstChild() : structDeclarator_AST;
        currentAST.advanceChildToEnd();
      }
      structDeclarator_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_25);
      } else {
        throw ex;
      }
    }
    returnAST = structDeclarator_AST;
  }
 
  public final void constExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode constExpr_AST = null;
   
    try {      // for error handling
      conditionalExpr();
      astFactory.addASTChild(currentAST, returnAST);
      constExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_26);
      } else {
        throw ex;
      }
    }
    returnAST = constExpr_AST;
  }
 
  public final String  declarator(
    boolean isFunctionDefinition
  ) throws RecognitionException, TokenStreamException {
    String declName;
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode declarator_AST = null;
    Token  id = null;
    TNode id_AST = null;
    TNode p_AST = null;
    TNode i_AST = null;
    declName = "";
   
    try {      // for error handling
      {
      switch ( LA(1)) {
      case STAR:
      {
        pointerGroup();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case ID:
      case LPAREN:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      {
      switch ( LA(1)) {
      case ID:
      {
        id = LT(1);
        id_AST = (TNode)astFactory.create(id);
        astFactory.addASTChild(currentAST, id_AST);
        match(ID);
        if ( inputState.guessing==0 ) {
          declName = id.getText();
        }
        break;
      }
      case LPAREN:
      {
        TNode tmp41_AST = null;
        tmp41_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp41_AST);
        match(LPAREN);
        declName=declarator(false);
        astFactory.addASTChild(currentAST, returnAST);
        TNode tmp42_AST = null;
        tmp42_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp42_AST);
        match(RPAREN);
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      {
      _loop82:
      do {
        switch ( LA(1)) {
        case LPAREN:
        {
          TNode tmp43_AST = null;
          tmp43_AST = (TNode)astFactory.create(LT(1));
          match(LPAREN);
          if ( inputState.guessing==0 ) {
           
            if (isFunctionDefinition) {
            pushScope(declName);
            }
            else {
            pushScope("!"+declName);
            }
           
          }
          {
          boolean synPredMatched79 = false;
          if (((_tokenSet_2.member(LA(1))) && (_tokenSet_27.member(LA(2))))) {
            int _m79 = mark();
            synPredMatched79 = true;
            inputState.guessing++;
            try {
              {
              declSpecifiers();
              }
            }
            catch (RecognitionException pe) {
              synPredMatched79 = false;
            }
            rewind(_m79);
            inputState.guessing--;
          }
          if ( synPredMatched79 ) {
            parameterTypeList();
            p_AST = (TNode)returnAST;
            if ( inputState.guessing==0 ) {
              declarator_AST = (TNode)currentAST.root;
             
              declarator_AST = (TNode)astFactory.make( (new ASTArray(3)).add(null).add(declarator_AST).add((TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NParameterTypeList)).add(p_AST))));
             
              currentAST.root = declarator_AST;
              currentAST.child = declarator_AST!=null &&declarator_AST.getFirstChild()!=null ?
                declarator_AST.getFirstChild() : declarator_AST;
              currentAST.advanceChildToEnd();
            }
          }
          else if ((LA(1)==ID||LA(1)==RPAREN) && (_tokenSet_28.member(LA(2)))) {
            {
            switch ( LA(1)) {
            case ID:
            {
              idList();
              i_AST = (TNode)returnAST;
              break;
            }
            case RPAREN:
            {
              break;
            }
            default:
            {
              throw new NoViableAltException(LT(1), getFilename());
            }
            }
            }
            if ( inputState.guessing==0 ) {
              declarator_AST = (TNode)currentAST.root;
             
              declarator_AST = (TNode)astFactory.make( (new ASTArray(3)).add(null).add(declarator_AST).add((TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NParameterTypeList)).add(i_AST))));
             
              currentAST.root = declarator_AST;
              currentAST.child = declarator_AST!=null &&declarator_AST.getFirstChild()!=null ?
                declarator_AST.getFirstChild() : declarator_AST;
              currentAST.advanceChildToEnd();
            }
          }
          else {
            throw new NoViableAltException(LT(1), getFilename());
          }
         
          }
          if ( inputState.guessing==0 ) {
           
            popScope();
           
          }
          TNode tmp44_AST = null;
          tmp44_AST = (TNode)astFactory.create(LT(1));
          match(RPAREN);
          break;
        }
        case LBRACKET:
        {
          TNode tmp45_AST = null;
          tmp45_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp45_AST);
          match(LBRACKET);
          {
          switch ( LA(1)) {
          case ID:
          case STAR:
          case LPAREN:
          case BAND:
          case PLUS:
          case MINUS:
          case INC:
          case DEC:
          case LITERAL_sizeof:
          case BNOT:
          case LNOT:
          case CharLiteral:
          case StringLiteral:
          case IntOctalConst:
          case LongOctalConst:
          case UnsignedOctalConst:
          case IntIntConst:
          case LongIntConst:
          case UnsignedIntConst:
          case IntHexConst:
          case LongHexConst:
          case UnsignedHexConst:
          case FloatDoubleConst:
          case DoubleDoubleConst:
          case LongDoubleConst:
          {
            constExpr();
            astFactory.addASTChild(currentAST, returnAST);
            break;
          }
          case RBRACKET:
          {
            break;
          }
          default:
          {
            throw new NoViableAltException(LT(1), getFilename());
          }
          }
          }
          TNode tmp46_AST = null;
          tmp46_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp46_AST);
          match(RBRACKET);
          break;
        }
        default:
        {
          break _loop82;
        }
        }
      } while (true);
      }
      if ( inputState.guessing==0 ) {
        declarator_AST = (TNode)currentAST.root;
        declarator_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NDeclarator)).add(declarator_AST));
        currentAST.root = declarator_AST;
        currentAST.child = declarator_AST!=null &&declarator_AST.getFirstChild()!=null ?
          declarator_AST.getFirstChild() : declarator_AST;
        currentAST.advanceChildToEnd();
      }
      declarator_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_29);
      } else {
        throw ex;
      }
    }
    returnAST = declarator_AST;
    return declName;
  }
 
  public final void enumList(
    String enumName
  ) throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode enumList_AST = null;
   
    try {      // for error handling
      enumerator(enumName);
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop51:
      do {
        if ((LA(1)==COMMA)) {
          match(COMMA);
          enumerator(enumName);
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop51;
        }
       
      } while (true);
      }
      enumList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_21);
      } else {
        throw ex;
      }
    }
    returnAST = enumList_AST;
  }
 
  public final void enumerator(
    String enumName
  ) throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode enumerator_AST = null;
    Token  i = null;
    TNode i_AST = null;
   
    try {      // for error handling
      i = LT(1);
      i_AST = (TNode)astFactory.create(i);
      astFactory.addASTChild(currentAST, i_AST);
      match(ID);
      if ( inputState.guessing==0 ) {
        symbolTable.addi.getText(),
        (TNode)astFactory.make( (new ASTArray(3)).add(null).add((TNode)astFactory.create(LITERAL_enum,"enum")).add((TNode)astFactory.create(ID,enumName)))
        );
       
      }
      {
      switch ( LA(1)) {
      case ASSIGN:
      {
        TNode tmp48_AST = null;
        tmp48_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp48_AST);
        match(ASSIGN);
        constExpr();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case RCURLY:
      case COMMA:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      enumerator_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_30);
      } else {
        throw ex;
      }
    }
    returnAST = enumerator_AST;
  }
 
  public final void initDecl(
    AST declarationSpecifiers
  ) throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode initDecl_AST = null;
    TNode d_AST = null;
    String declName = "";
   
    try {      // for error handling
      declName=declarator(false);
      d_AST = (TNode)returnAST;
      astFactory.addASTChild(currentAST, returnAST);
      if ( inputState.guessing==0 ) {
        AST ds1, d1;
        ds1 = astFactory.dupList(declarationSpecifiers);
        d1 = astFactory.dupList(d_AST);
        symbolTable.add(declName, (TNode)astFactory.make( (new ASTArray(3)).add(null).add(ds1).add(d1)) );
       
      }
      {
      switch ( LA(1)) {
      case ASSIGN:
      {
        TNode tmp49_AST = null;
        tmp49_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp49_AST);
        match(ASSIGN);
        initializer();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case COLON:
      {
        TNode tmp50_AST = null;
        tmp50_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp50_AST);
        match(COLON);
        expr();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case SEMI:
      case COMMA:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      if ( inputState.guessing==0 ) {
        initDecl_AST = (TNode)currentAST.root;
        initDecl_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NInitDecl)).add(initDecl_AST));
        currentAST.root = initDecl_AST;
        currentAST.child = initDecl_AST!=null &&initDecl_AST.getFirstChild()!=null ?
          initDecl_AST.getFirstChild() : initDecl_AST;
        currentAST.advanceChildToEnd();
      }
      initDecl_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_25);
      } else {
        throw ex;
      }
    }
    returnAST = initDecl_AST;
  }
 
  public final void initializer() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode initializer_AST = null;
   
    try {      // for error handling
      {
      switch ( LA(1)) {
      case ID:
      case STAR:
      case LPAREN:
      case BAND:
      case PLUS:
      case MINUS:
      case INC:
      case DEC:
      case LITERAL_sizeof:
      case BNOT:
      case LNOT:
      case CharLiteral:
      case StringLiteral:
      case IntOctalConst:
      case LongOctalConst:
      case UnsignedOctalConst:
      case IntIntConst:
      case LongIntConst:
      case UnsignedIntConst:
      case IntHexConst:
      case LongHexConst:
      case UnsignedHexConst:
      case FloatDoubleConst:
      case DoubleDoubleConst:
      case LongDoubleConst:
      {
        assignExpr();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case LCURLY:
      {
        TNode tmp51_AST = null;
        tmp51_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp51_AST);
        match(LCURLY);
        initializerList();
        astFactory.addASTChild(currentAST, returnAST);
        {
        switch ( LA(1)) {
        case COMMA:
        {
          match(COMMA);
          break;
        }
        case RCURLY:
        {
          break;
        }
        default:
        {
          throw new NoViableAltException(LT(1), getFilename());
        }
        }
        }
        match(RCURLY);
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      if ( inputState.guessing==0 ) {
        initializer_AST = (TNode)currentAST.root;
        initializer_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NInitializer)).add(initializer_AST));
        currentAST.root = initializer_AST;
        currentAST.child = initializer_AST!=null &&initializer_AST.getFirstChild()!=null ?
          initializer_AST.getFirstChild() : initializer_AST;
        currentAST.advanceChildToEnd();
      }
      initializer_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_31);
      } else {
        throw ex;
      }
    }
    returnAST = initializer_AST;
  }
 
  public final void pointerGroup() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode pointerGroup_AST = null;
   
    try {      // for error handling
      {
      int _cnt63=0;
      _loop63:
      do {
        if ((LA(1)==STAR)) {
          TNode tmp54_AST = null;
          tmp54_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp54_AST);
          match(STAR);
          {
          _loop62:
          do {
            if ((LA(1)==LITERAL_volatile||LA(1)==LITERAL_const)) {
              typeQualifier();
              astFactory.addASTChild(currentAST, returnAST);
            }
            else {
              break _loop62;
            }
           
          } while (true);
          }
        }
        else {
          if ( _cnt63>=1 ) { break _loop63; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
       
        _cnt63++;
      } while (true);
      }
      if ( inputState.guessing==0 ) {
        pointerGroup_AST = (TNode)currentAST.root;
        pointerGroup_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NPointerGroup)).add(pointerGroup_AST));
        currentAST.root = pointerGroup_AST;
        currentAST.child = pointerGroup_AST!=null &&pointerGroup_AST.getFirstChild()!=null ?
          pointerGroup_AST.getFirstChild() : pointerGroup_AST;
        currentAST.advanceChildToEnd();
      }
      pointerGroup_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_32);
      } else {
        throw ex;
      }
    }
    returnAST = pointerGroup_AST;
  }
 
  public final void idList() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode idList_AST = null;
   
    try {      // for error handling
      TNode tmp55_AST = null;
      tmp55_AST = (TNode)astFactory.create(LT(1));
      astFactory.addASTChild(currentAST, tmp55_AST);
      match(ID);
      {
      _loop66:
      do {
        if ((LA(1)==COMMA)) {
          match(COMMA);
          TNode tmp57_AST = null;
          tmp57_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp57_AST);
          match(ID);
        }
        else {
          break _loop66;
        }
       
      } while (true);
      }
      idList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_33);
      } else {
        throw ex;
      }
    }
    returnAST = idList_AST;
  }
 
  public final void assignExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode assignExpr_AST = null;
    TNode a_AST = null;
   
    try {      // for error handling
      conditionalExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      switch ( LA(1)) {
      case ASSIGN:
      case DIV_ASSIGN:
      case PLUS_ASSIGN:
      case MINUS_ASSIGN:
      case STAR_ASSIGN:
      case MOD_ASSIGN:
      case RSHIFT_ASSIGN:
      case LSHIFT_ASSIGN:
      case BAND_ASSIGN:
      case BOR_ASSIGN:
      case BXOR_ASSIGN:
      {
        assignOperator();
        a_AST = (TNode)returnAST;
        assignExpr();
        astFactory.addASTChild(currentAST, returnAST);
        if ( inputState.guessing==0 ) {
          assignExpr_AST = (TNode)currentAST.root;
          assignExpr_AST = (TNode)astFactory.make( (new ASTArray(2)).add(a_AST).add(assignExpr_AST));
          currentAST.root = assignExpr_AST;
          currentAST.child = assignExpr_AST!=null &&assignExpr_AST.getFirstChild()!=null ?
            assignExpr_AST.getFirstChild() : assignExpr_AST;
          currentAST.advanceChildToEnd();
        }
        break;
      }
      case RCURLY:
      case SEMI:
      case COMMA:
      case COLON:
      case RPAREN:
      case RBRACKET:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      assignExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_12);
      } else {
        throw ex;
      }
    }
    returnAST = assignExpr_AST;
  }
 
  public final void initializerList() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode initializerList_AST = null;
   
    try {      // for error handling
      initializer();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop72:
      do {
        if ((LA(1)==COMMA) && (_tokenSet_34.member(LA(2)))) {
          match(COMMA);
          initializer();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop72;
        }
       
      } while (true);
      }
      initializerList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_30);
      } else {
        throw ex;
      }
    }
    returnAST = initializerList_AST;
  }
 
  public final void parameterTypeList() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode parameterTypeList_AST = null;
   
    try {      // for error handling
      parameterDeclaration();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop85:
      do {
        if ((LA(1)==COMMA) && (_tokenSet_2.member(LA(2)))) {
          match(COMMA);
          parameterDeclaration();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop85;
        }
       
      } while (true);
      }
      {
      switch ( LA(1)) {
      case COMMA:
      {
        match(COMMA);
        TNode tmp61_AST = null;
        tmp61_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp61_AST);
        match(VARARGS);
        break;
      }
      case RPAREN:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      parameterTypeList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_33);
      } else {
        throw ex;
      }
    }
    returnAST = parameterTypeList_AST;
  }
 
  public final void parameterDeclaration() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode parameterDeclaration_AST = null;
    TNode ds_AST = null;
    TNode d_AST = null;
    String declName;
   
    try {      // for error handling
      declSpecifiers();
      ds_AST = (TNode)returnAST;
      astFactory.addASTChild(currentAST, returnAST);
      {
      boolean synPredMatched90 = false;
      if (((_tokenSet_10.member(LA(1))) && (_tokenSet_35.member(LA(2))))) {
        int _m90 = mark();
        synPredMatched90 = true;
        inputState.guessing++;
        try {
          {
          declarator(false);
          }
        }
        catch (RecognitionException pe) {
          synPredMatched90 = false;
        }
        rewind(_m90);
        inputState.guessing--;
      }
      if ( synPredMatched90 ) {
        declName=declarator(false);
        d_AST = (TNode)returnAST;
        astFactory.addASTChild(currentAST, returnAST);
        if ( inputState.guessing==0 ) {
         
          AST d2, ds2;
          d2 = astFactory.dupList(d_AST);
          ds2 = astFactory.dupList(ds_AST);
          symbolTable.add(declName, (TNode)astFactory.make( (new ASTArray(3)).add(null).add(ds2).add(d2)));
         
        }
      }
      else if ((_tokenSet_36.member(LA(1))) && (_tokenSet_37.member(LA(2)))) {
        nonemptyAbstractDeclarator();
        astFactory.addASTChild(currentAST, returnAST);
      }
      else if ((LA(1)==COMMA||LA(1)==RPAREN)) {
      }
      else {
        throw new NoViableAltException(LT(1), getFilename());
      }
     
      }
      if ( inputState.guessing==0 ) {
        parameterDeclaration_AST = (TNode)currentAST.root;
       
        parameterDeclaration_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NParameterDeclaration)).add(parameterDeclaration_AST));
       
        currentAST.root = parameterDeclaration_AST;
        currentAST.child = parameterDeclaration_AST!=null &&parameterDeclaration_AST.getFirstChild()!=null ?
          parameterDeclaration_AST.getFirstChild() : parameterDeclaration_AST;
        currentAST.advanceChildToEnd();
      }
      parameterDeclaration_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_38);
      } else {
        throw ex;
      }
    }
    returnAST = parameterDeclaration_AST;
  }
 
  public final void nonemptyAbstractDeclarator() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode nonemptyAbstractDeclarator_AST = null;
   
    try {      // for error handling
      {
      switch ( LA(1)) {
      case STAR:
      {
        pointerGroup();
        astFactory.addASTChild(currentAST, returnAST);
        {
        _loop184:
        do {
          switch ( LA(1)) {
          case LPAREN:
          {
            {
            TNode tmp62_AST = null;
            tmp62_AST = (TNode)astFactory.create(LT(1));
            astFactory.addASTChild(currentAST, tmp62_AST);
            match(LPAREN);
            {
            switch ( LA(1)) {
            case STAR:
            case LPAREN:
            case LBRACKET:
            {
              nonemptyAbstractDeclarator();
              astFactory.addASTChild(currentAST, returnAST);
              break;
            }
            case LITERAL_typedef:
            case LITERAL_volatile:
            case LITERAL_struct:
            case LITERAL_union:
            case LITERAL_enum:
            case LITERAL_auto:
            case LITERAL_register:
            case LITERAL_extern:
            case LITERAL_static:
            case LITERAL_const:
            case LITERAL_void:
            case LITERAL_char:
            case LITERAL_short:
            case LITERAL_int:
            case LITERAL_long:
            case LITERAL_float:
            case LITERAL_double:
            case LITERAL_signed:
            case LITERAL_unsigned:
            case ID:
            {
              parameterTypeList();
              astFactory.addASTChild(currentAST, returnAST);
              break;
            }
            case RPAREN:
            {
              break;
            }
            default:
            {
              throw new NoViableAltException(LT(1), getFilename());
            }
            }
            }
            TNode tmp63_AST = null;
            tmp63_AST = (TNode)astFactory.create(LT(1));
            astFactory.addASTChild(currentAST, tmp63_AST);
            match(RPAREN);
            }
            break;
          }
          case LBRACKET:
          {
            {
            TNode tmp64_AST = null;
            tmp64_AST = (TNode)astFactory.create(LT(1));
            astFactory.addASTChild(currentAST, tmp64_AST);
            match(LBRACKET);
            {
            switch ( LA(1)) {
            case ID:
            case STAR:
            case LPAREN:
            case BAND:
            case PLUS:
            case MINUS:
            case INC:
            case DEC:
            case LITERAL_sizeof:
            case BNOT:
            case LNOT:
            case CharLiteral:
            case StringLiteral:
            case IntOctalConst:
            case LongOctalConst:
            case UnsignedOctalConst:
            case IntIntConst:
            case LongIntConst:
            case UnsignedIntConst:
            case IntHexConst:
            case LongHexConst:
            case UnsignedHexConst:
            case FloatDoubleConst:
            case DoubleDoubleConst:
            case LongDoubleConst:
            {
              expr();
              astFactory.addASTChild(currentAST, returnAST);
              break;
            }
            case RBRACKET:
            {
              break;
            }
            default:
            {
              throw new NoViableAltException(LT(1), getFilename());
            }
            }
            }
            TNode tmp65_AST = null;
            tmp65_AST = (TNode)astFactory.create(LT(1));
            astFactory.addASTChild(currentAST, tmp65_AST);
            match(RBRACKET);
            }
            break;
          }
          default:
          {
            break _loop184;
          }
          }
        } while (true);
        }
        break;
      }
      case LPAREN:
      case LBRACKET:
      {
        {
        int _cnt190=0;
        _loop190:
        do {
          switch ( LA(1)) {
          case LPAREN:
          {
            {
            TNode tmp66_AST = null;
            tmp66_AST = (TNode)astFactory.create(LT(1));
            astFactory.addASTChild(currentAST, tmp66_AST);
            match(LPAREN);
            {
            switch ( LA(1)) {
            case STAR:
            case LPAREN:
            case LBRACKET:
            {
              nonemptyAbstractDeclarator();
              astFactory.addASTChild(currentAST, returnAST);
              break;
            }
            case LITERAL_typedef:
            case LITERAL_volatile:
            case LITERAL_struct:
            case LITERAL_union:
            case LITERAL_enum:
            case LITERAL_auto:
            case LITERAL_register:
            case LITERAL_extern:
            case LITERAL_static:
            case LITERAL_const:
            case LITERAL_void:
            case LITERAL_char:
            case LITERAL_short:
            case LITERAL_int:
            case LITERAL_long:
            case LITERAL_float:
            case LITERAL_double:
            case LITERAL_signed:
            case LITERAL_unsigned:
            case ID:
            {
              parameterTypeList();
              astFactory.addASTChild(currentAST, returnAST);
              break;
            }
            case RPAREN:
            {
              break;
            }
            default:
            {
              throw new NoViableAltException(LT(1), getFilename());
            }
            }
            }
            TNode tmp67_AST = null;
            tmp67_AST = (TNode)astFactory.create(LT(1));
            astFactory.addASTChild(currentAST, tmp67_AST);
            match(RPAREN);
            }
            break;
          }
          case LBRACKET:
          {
            {
            TNode tmp68_AST = null;
            tmp68_AST = (TNode)astFactory.create(LT(1));
            astFactory.addASTChild(currentAST, tmp68_AST);
            match(LBRACKET);
            {
            switch ( LA(1)) {
            case ID:
            case STAR:
            case LPAREN:
            case BAND:
            case PLUS:
            case MINUS:
            case INC:
            case DEC:
            case LITERAL_sizeof:
            case BNOT:
            case LNOT:
            case CharLiteral:
            case StringLiteral:
            case IntOctalConst:
            case LongOctalConst:
            case UnsignedOctalConst:
            case IntIntConst:
            case LongIntConst:
            case UnsignedIntConst:
            case IntHexConst:
            case LongHexConst:
            case UnsignedHexConst:
            case FloatDoubleConst:
            case DoubleDoubleConst:
            case LongDoubleConst:
            {
              expr();
              astFactory.addASTChild(currentAST, returnAST);
              break;
            }
            case RBRACKET:
            {
              break;
            }
            default:
            {
              throw new NoViableAltException(LT(1), getFilename());
            }
            }
            }
            TNode tmp69_AST = null;
            tmp69_AST = (TNode)astFactory.create(LT(1));
            astFactory.addASTChild(currentAST, tmp69_AST);
            match(RBRACKET);
            }
            break;
          }
          default:
          {
            if ( _cnt190>=1 ) { break _loop190; } else {throw new NoViableAltException(LT(1), getFilename());}
          }
          }
          _cnt190++;
        } while (true);
        }
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      if ( inputState.guessing==0 ) {
        nonemptyAbstractDeclarator_AST = (TNode)currentAST.root;
        nonemptyAbstractDeclarator_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NNonemptyAbstractDeclarator)).add(nonemptyAbstractDeclarator_AST));
        currentAST.root = nonemptyAbstractDeclarator_AST;
        currentAST.child = nonemptyAbstractDeclarator_AST!=null &&nonemptyAbstractDeclarator_AST.getFirstChild()!=null ?
          nonemptyAbstractDeclarator_AST.getFirstChild() : nonemptyAbstractDeclarator_AST;
        currentAST.advanceChildToEnd();
      }
      nonemptyAbstractDeclarator_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_38);
      } else {
        throw ex;
      }
    }
    returnAST = nonemptyAbstractDeclarator_AST;
  }
 
  public final void functionDeclSpecifiers() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode functionDeclSpecifiers_AST = null;
    int specCount = 0;
   
    try {      // for error handling
      {
      int _cnt104=0;
      _loop104:
      do {
        switch ( LA(1)) {
        case LITERAL_extern:
        case LITERAL_static:
        {
          functionStorageClassSpecifier();
          astFactory.addASTChild(currentAST, returnAST);
          break;
        }
        case LITERAL_volatile:
        case LITERAL_const:
        {
          typeQualifier();
          astFactory.addASTChild(currentAST, returnAST);
          break;
        }
        default:
          boolean synPredMatched103 = false;
          if (((_tokenSet_13.member(LA(1))) && (_tokenSet_9.member(LA(2))))) {
            int _m103 = mark();
            synPredMatched103 = true;
            inputState.guessing++;
            try {
              {
              if ((LA(1)==LITERAL_struct) && (true)) {
                match(LITERAL_struct);
              }
              else if ((LA(1)==LITERAL_union) && (true)) {
                match(LITERAL_union);
              }
              else if ((LA(1)==LITERAL_enum) && (true)) {
                match(LITERAL_enum);
              }
              else if ((_tokenSet_13.member(LA(1))) && (true)) {
                typeSpecifier(specCount);
              }
              else {
                throw new NoViableAltException(LT(1), getFilename());
              }
             
              }
            }
            catch (RecognitionException pe) {
              synPredMatched103 = false;
            }
            rewind(_m103);
            inputState.guessing--;
          }
          if ( synPredMatched103 ) {
            specCount=typeSpecifier(specCount);
            astFactory.addASTChild(currentAST, returnAST);
          }
        else {
          if ( _cnt104>=1 ) { break _loop104; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
        }
        _cnt104++;
      } while (true);
      }
      functionDeclSpecifiers_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_10);
      } else {
        throw ex;
      }
    }
    returnAST = functionDeclSpecifiers_AST;
  }
 
  public final void compoundStatement(
    String scopeName
  ) throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode compoundStatement_AST = null;
   
    try {      // for error handling
      match(LCURLY);
      if ( inputState.guessing==0 ) {
       
        pushScope(scopeName);
       
      }
      {
      boolean synPredMatched115 = false;
      if (((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2))))) {
        int _m115 = mark();
        synPredMatched115 = true;
        inputState.guessing++;
        try {
          {
          declarationPredictor();
          }
        }
        catch (RecognitionException pe) {
          synPredMatched115 = false;
        }
        rewind(_m115);
        inputState.guessing--;
      }
      if ( synPredMatched115 ) {
        declarationList();
        astFactory.addASTChild(currentAST, returnAST);
      }
      else if ((_tokenSet_39.member(LA(1))) && (_tokenSet_40.member(LA(2)))) {
      }
      else {
        throw new NoViableAltException(LT(1), getFilename());
      }
     
      }
      {
      switch ( LA(1)) {
      case LCURLY:
      case SEMI:
      case ID:
      case STAR:
      case LPAREN:
      case LITERAL_while:
      case LITERAL_do:
      case LITERAL_for:
      case LITERAL_goto:
      case LITERAL_continue:
      case LITERAL_break:
      case LITERAL_return:
      case LITERAL_case:
      case LITERAL_default:
      case LITERAL_if:
      case LITERAL_switch:
      case BAND:
      case PLUS:
      case MINUS:
      case INC:
      case DEC:
      case LITERAL_sizeof:
      case BNOT:
      case LNOT:
      case CharLiteral:
      case StringLiteral:
      case IntOctalConst:
      case LongOctalConst:
      case UnsignedOctalConst:
      case IntIntConst:
      case LongIntConst:
      case UnsignedIntConst:
      case IntHexConst:
      case LongHexConst:
      case UnsignedHexConst:
      case FloatDoubleConst:
      case DoubleDoubleConst:
      case LongDoubleConst:
      {
        statementList();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case RCURLY:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      if ( inputState.guessing==0 ) {
        popScope();
      }
      match(RCURLY);
      if ( inputState.guessing==0 ) {
        compoundStatement_AST = (TNode)currentAST.root;
        compoundStatement_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NCompoundStatement,scopeName)).add(compoundStatement_AST));
        currentAST.root = compoundStatement_AST;
        currentAST.child = compoundStatement_AST!=null &&compoundStatement_AST.getFirstChild()!=null ?
          compoundStatement_AST.getFirstChild() : compoundStatement_AST;
        currentAST.advanceChildToEnd();
      }
      compoundStatement_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_41);
      } else {
        throw ex;
      }
    }
    returnAST = compoundStatement_AST;
  }
 
  public final void declarationList() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode declarationList_AST = null;
   
    try {      // for error handling
      {
      int _cnt109=0;
      _loop109:
      do {
        boolean synPredMatched108 = false;
        if (((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2))))) {
          int _m108 = mark();
          synPredMatched108 = true;
          inputState.guessing++;
          try {
            {
            declarationPredictor();
            }
          }
          catch (RecognitionException pe) {
            synPredMatched108 = false;
          }
          rewind(_m108);
          inputState.guessing--;
        }
        if ( synPredMatched108 ) {
          declaration();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          if ( _cnt109>=1 ) { break _loop109; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
       
        _cnt109++;
      } while (true);
      }
      declarationList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_39);
      } else {
        throw ex;
      }
    }
    returnAST = declarationList_AST;
  }
 
  public final void declarationPredictor() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode declarationPredictor_AST = null;
   
    try {      // for error handling
      {
      if ((LA(1)==LITERAL_typedef) && (LA(2)==EOF)) {
        TNode tmp72_AST = null;
        tmp72_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp72_AST);
        match(LITERAL_typedef);
      }
      else if ((_tokenSet_2.member(LA(1))) && (_tokenSet_3.member(LA(2)))) {
        declaration();
        astFactory.addASTChild(currentAST, returnAST);
      }
      else {
        throw new NoViableAltException(LT(1), getFilename());
      }
     
      }
      declarationPredictor_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_0);
      } else {
        throw ex;
      }
    }
    returnAST = declarationPredictor_AST;
  }
 
  public final void statementList() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode statementList_AST = null;
   
    try {      // for error handling
      {
      int _cnt119=0;
      _loop119:
      do {
        if ((_tokenSet_42.member(LA(1)))) {
          statement();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          if ( _cnt119>=1 ) { break _loop119; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
       
        _cnt119++;
      } while (true);
      }
      statementList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_21);
      } else {
        throw ex;
      }
    }
    returnAST = statementList_AST;
  }
 
  public final void statement() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode statement_AST = null;
    TNode e1_AST = null;
    TNode e2_AST = null;
    TNode e3_AST = null;
    TNode s_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case SEMI:
      {
        TNode tmp73_AST = null;
        tmp73_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp73_AST);
        match(SEMI);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LCURLY:
      {
        compoundStatement(getAScopeName());
        astFactory.addASTChild(currentAST, returnAST);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_while:
      {
        TNode tmp74_AST = null;
        tmp74_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp74_AST);
        match(LITERAL_while);
        match(LPAREN);
        expr();
        astFactory.addASTChild(currentAST, returnAST);
        match(RPAREN);
        statement();
        astFactory.addASTChild(currentAST, returnAST);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_do:
      {
        TNode tmp77_AST = null;
        tmp77_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp77_AST);
        match(LITERAL_do);
        statement();
        astFactory.addASTChild(currentAST, returnAST);
        match(LITERAL_while);
        match(LPAREN);
        expr();
        astFactory.addASTChild(currentAST, returnAST);
        match(RPAREN);
        match(SEMI);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_for:
      {
        match(LITERAL_for);
        TNode tmp83_AST = null;
        tmp83_AST = (TNode)astFactory.create(LT(1));
        match(LPAREN);
        {
        switch ( LA(1)) {
        case ID:
        case STAR:
        case LPAREN:
        case BAND:
        case PLUS:
        case MINUS:
        case INC:
        case DEC:
        case LITERAL_sizeof:
        case BNOT:
        case LNOT:
        case CharLiteral:
        case StringLiteral:
        case IntOctalConst:
        case LongOctalConst:
        case UnsignedOctalConst:
        case IntIntConst:
        case LongIntConst:
        case UnsignedIntConst:
        case IntHexConst:
        case LongHexConst:
        case UnsignedHexConst:
        case FloatDoubleConst:
        case DoubleDoubleConst:
        case LongDoubleConst:
        {
          expr();
          e1_AST = (TNode)returnAST;
          break;
        }
        case SEMI:
        {
          break;
        }
        default:
        {
          throw new NoViableAltException(LT(1), getFilename());
        }
        }
        }
        TNode tmp84_AST = null;
        tmp84_AST = (TNode)astFactory.create(LT(1));
        match(SEMI);
        {
        switch ( LA(1)) {
        case ID:
        case STAR:
        case LPAREN:
        case BAND:
        case PLUS:
        case MINUS:
        case INC:
        case DEC:
        case LITERAL_sizeof:
        case BNOT:
        case LNOT:
        case CharLiteral:
        case StringLiteral:
        case IntOctalConst:
        case LongOctalConst:
        case UnsignedOctalConst:
        case IntIntConst:
        case LongIntConst:
        case UnsignedIntConst:
        case IntHexConst:
        case LongHexConst:
        case UnsignedHexConst:
        case FloatDoubleConst:
        case DoubleDoubleConst:
        case LongDoubleConst:
        {
          expr();
          e2_AST = (TNode)returnAST;
          break;
        }
        case SEMI:
        {
          break;
        }
        default:
        {
          throw new NoViableAltException(LT(1), getFilename());
        }
        }
        }
        TNode tmp85_AST = null;
        tmp85_AST = (TNode)astFactory.create(LT(1));
        match(SEMI);
        {
        switch ( LA(1)) {
        case ID:
        case STAR:
        case LPAREN:
        case BAND:
        case PLUS:
        case MINUS:
        case INC:
        case DEC:
        case LITERAL_sizeof:
        case BNOT:
        case LNOT:
        case CharLiteral:
        case StringLiteral:
        case IntOctalConst:
        case LongOctalConst:
        case UnsignedOctalConst:
        case IntIntConst:
        case LongIntConst:
        case UnsignedIntConst:
        case IntHexConst:
        case LongHexConst:
        case UnsignedHexConst:
        case FloatDoubleConst:
        case DoubleDoubleConst:
        case LongDoubleConst:
        {
          expr();
          e3_AST = (TNode)returnAST;
          break;
        }
        case RPAREN:
        {
          break;
        }
        default:
        {
          throw new NoViableAltException(LT(1), getFilename());
        }
        }
        }
        TNode tmp86_AST = null;
        tmp86_AST = (TNode)astFactory.create(LT(1));
        match(RPAREN);
        statement();
        s_AST = (TNode)returnAST;
        if ( inputState.guessing==0 ) {
          statement_AST = (TNode)currentAST.root;
         
          if ( e1_AST == null) { e1_AST = (TNode)astFactory.create(NEmptyExpression); }
          if ( e2_AST == null) { e2_AST = (TNode)astFactory.create(NEmptyExpression); }
          if ( e3_AST == null) { e3_AST = (TNode)astFactory.create(NEmptyExpression); }
          statement_AST = (TNode)astFactory.make( (new ASTArray(5)).add((TNode)astFactory.create(LITERAL_for,"for")).add(e1_AST).add(e2_AST).add(e3_AST).add(s_AST));
         
          currentAST.root = statement_AST;
          currentAST.child = statement_AST!=null &&statement_AST.getFirstChild()!=null ?
            statement_AST.getFirstChild() : statement_AST;
          currentAST.advanceChildToEnd();
        }
        break;
      }
      case LITERAL_goto:
      {
        TNode tmp87_AST = null;
        tmp87_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp87_AST);
        match(LITERAL_goto);
        TNode tmp88_AST = null;
        tmp88_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp88_AST);
        match(ID);
        match(SEMI);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_continue:
      {
        TNode tmp90_AST = null;
        tmp90_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp90_AST);
        match(LITERAL_continue);
        match(SEMI);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_break:
      {
        TNode tmp92_AST = null;
        tmp92_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp92_AST);
        match(LITERAL_break);
        match(SEMI);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_return:
      {
        TNode tmp94_AST = null;
        tmp94_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp94_AST);
        match(LITERAL_return);
        {
        switch ( LA(1)) {
        case ID:
        case STAR:
        case LPAREN:
        case BAND:
        case PLUS:
        case MINUS:
        case INC:
        case DEC:
        case LITERAL_sizeof:
        case BNOT:
        case LNOT:
        case CharLiteral:
        case StringLiteral:
        case IntOctalConst:
        case LongOctalConst:
        case UnsignedOctalConst:
        case IntIntConst:
        case LongIntConst:
        case UnsignedIntConst:
        case IntHexConst:
        case LongHexConst:
        case UnsignedHexConst:
        case FloatDoubleConst:
        case DoubleDoubleConst:
        case LongDoubleConst:
        {
          expr();
          astFactory.addASTChild(currentAST, returnAST);
          break;
        }
        case SEMI:
        {
          break;
        }
        default:
        {
          throw new NoViableAltException(LT(1), getFilename());
        }
        }
        }
        match(SEMI);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_case:
      {
        TNode tmp96_AST = null;
        tmp96_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp96_AST);
        match(LITERAL_case);
        constExpr();
        astFactory.addASTChild(currentAST, returnAST);
        match(COLON);
        statement();
        astFactory.addASTChild(currentAST, returnAST);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_default:
      {
        TNode tmp98_AST = null;
        tmp98_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp98_AST);
        match(LITERAL_default);
        match(COLON);
        statement();
        astFactory.addASTChild(currentAST, returnAST);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_if:
      {
        TNode tmp100_AST = null;
        tmp100_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp100_AST);
        match(LITERAL_if);
        match(LPAREN);
        expr();
        astFactory.addASTChild(currentAST, returnAST);
        match(RPAREN);
        statement();
        astFactory.addASTChild(currentAST, returnAST);
        {
        if ((LA(1)==LITERAL_else) && (_tokenSet_42.member(LA(2)))) {
          TNode tmp103_AST = null;
          tmp103_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp103_AST);
          match(LITERAL_else);
          statement();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else if ((_tokenSet_43.member(LA(1))) && (_tokenSet_40.member(LA(2)))) {
        }
        else {
          throw new NoViableAltException(LT(1), getFilename());
        }
       
        }
        statement_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_switch:
      {
        TNode tmp104_AST = null;
        tmp104_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp104_AST);
        match(LITERAL_switch);
        match(LPAREN);
        expr();
        astFactory.addASTChild(currentAST, returnAST);
        match(RPAREN);
        statement();
        astFactory.addASTChild(currentAST, returnAST);
        statement_AST = (TNode)currentAST.root;
        break;
      }
      default:
        if ((_tokenSet_11.member(LA(1))) && (_tokenSet_44.member(LA(2)))) {
          expr();
          astFactory.addASTChild(currentAST, returnAST);
          match(SEMI);
          if ( inputState.guessing==0 ) {
            statement_AST = (TNode)currentAST.root;
            statement_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NStatementExpr)).add(statement_AST));
            currentAST.root = statement_AST;
            currentAST.child = statement_AST!=null &&statement_AST.getFirstChild()!=null ?
              statement_AST.getFirstChild() : statement_AST;
            currentAST.advanceChildToEnd();
          }
          statement_AST = (TNode)currentAST.root;
        }
        else if ((LA(1)==ID) && (LA(2)==COLON)) {
          TNode tmp108_AST = null;
          tmp108_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp108_AST);
          match(ID);
          match(COLON);
          {
          if ((_tokenSet_42.member(LA(1))) && (_tokenSet_45.member(LA(2)))) {
            statement();
            astFactory.addASTChild(currentAST, returnAST);
          }
          else if ((_tokenSet_43.member(LA(1))) && (_tokenSet_40.member(LA(2)))) {
          }
          else {
            throw new NoViableAltException(LT(1), getFilename());
          }
         
          }
          if ( inputState.guessing==0 ) {
            statement_AST = (TNode)currentAST.root;
            statement_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NLabel)).add(statement_AST));
            currentAST.root = statement_AST;
            currentAST.child = statement_AST!=null &&statement_AST.getFirstChild()!=null ?
              statement_AST.getFirstChild() : statement_AST;
            currentAST.advanceChildToEnd();
          }
          statement_AST = (TNode)currentAST.root;
        }
      else {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_43);
      } else {
        throw ex;
      }
    }
    returnAST = statement_AST;
  }
 
  public final void conditionalExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode conditionalExpr_AST = null;
   
    try {      // for error handling
      logicalOrExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      switch ( LA(1)) {
      case QUESTION:
      {
        TNode tmp110_AST = null;
        tmp110_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp110_AST);
        match(QUESTION);
        expr();
        astFactory.addASTChild(currentAST, returnAST);
        match(COLON);
        conditionalExpr();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case RCURLY:
      case SEMI:
      case COMMA:
      case COLON:
      case ASSIGN:
      case RPAREN:
      case RBRACKET:
      case DIV_ASSIGN:
      case PLUS_ASSIGN:
      case MINUS_ASSIGN:
      case STAR_ASSIGN:
      case MOD_ASSIGN:
      case RSHIFT_ASSIGN:
      case LSHIFT_ASSIGN:
      case BAND_ASSIGN:
      case BOR_ASSIGN:
      case BXOR_ASSIGN:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      conditionalExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_46);
      } else {
        throw ex;
      }
    }
    returnAST = conditionalExpr_AST;
  }
 
  public final void assignOperator() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode assignOperator_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case ASSIGN:
      {
        TNode tmp112_AST = null;
        tmp112_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp112_AST);
        match(ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      case DIV_ASSIGN:
      {
        TNode tmp113_AST = null;
        tmp113_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp113_AST);
        match(DIV_ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      case PLUS_ASSIGN:
      {
        TNode tmp114_AST = null;
        tmp114_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp114_AST);
        match(PLUS_ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      case MINUS_ASSIGN:
      {
        TNode tmp115_AST = null;
        tmp115_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp115_AST);
        match(MINUS_ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      case STAR_ASSIGN:
      {
        TNode tmp116_AST = null;
        tmp116_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp116_AST);
        match(STAR_ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      case MOD_ASSIGN:
      {
        TNode tmp117_AST = null;
        tmp117_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp117_AST);
        match(MOD_ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      case RSHIFT_ASSIGN:
      {
        TNode tmp118_AST = null;
        tmp118_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp118_AST);
        match(RSHIFT_ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      case LSHIFT_ASSIGN:
      {
        TNode tmp119_AST = null;
        tmp119_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp119_AST);
        match(LSHIFT_ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      case BAND_ASSIGN:
      {
        TNode tmp120_AST = null;
        tmp120_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp120_AST);
        match(BAND_ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      case BOR_ASSIGN:
      {
        TNode tmp121_AST = null;
        tmp121_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp121_AST);
        match(BOR_ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      case BXOR_ASSIGN:
      {
        TNode tmp122_AST = null;
        tmp122_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp122_AST);
        match(BXOR_ASSIGN);
        assignOperator_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_11);
      } else {
        throw ex;
      }
    }
    returnAST = assignOperator_AST;
  }
 
  public final void logicalOrExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode logicalOrExpr_AST = null;
   
    try {      // for error handling
      logicalAndExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop138:
      do {
        if ((LA(1)==LOR)) {
          TNode tmp123_AST = null;
          tmp123_AST = (TNode)astFactory.create(LT(1));
          astFactory.makeASTRoot(currentAST, tmp123_AST);
          match(LOR);
          logicalAndExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop138;
        }
       
      } while (true);
      }
      logicalOrExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_47);
      } else {
        throw ex;
      }
    }
    returnAST = logicalOrExpr_AST;
  }
 
  public final void logicalAndExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode logicalAndExpr_AST = null;
   
    try {      // for error handling
      inclusiveOrExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop141:
      do {
        if ((LA(1)==LAND)) {
          TNode tmp124_AST = null;
          tmp124_AST = (TNode)astFactory.create(LT(1));
          astFactory.makeASTRoot(currentAST, tmp124_AST);
          match(LAND);
          inclusiveOrExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop141;
        }
       
      } while (true);
      }
      logicalAndExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_48);
      } else {
        throw ex;
      }
    }
    returnAST = logicalAndExpr_AST;
  }
 
  public final void inclusiveOrExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode inclusiveOrExpr_AST = null;
   
    try {      // for error handling
      exclusiveOrExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop144:
      do {
        if ((LA(1)==BOR)) {
          TNode tmp125_AST = null;
          tmp125_AST = (TNode)astFactory.create(LT(1));
          astFactory.makeASTRoot(currentAST, tmp125_AST);
          match(BOR);
          exclusiveOrExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop144;
        }
       
      } while (true);
      }
      inclusiveOrExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_49);
      } else {
        throw ex;
      }
    }
    returnAST = inclusiveOrExpr_AST;
  }
 
  public final void exclusiveOrExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode exclusiveOrExpr_AST = null;
   
    try {      // for error handling
      bitAndExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop147:
      do {
        if ((LA(1)==BXOR)) {
          TNode tmp126_AST = null;
          tmp126_AST = (TNode)astFactory.create(LT(1));
          astFactory.makeASTRoot(currentAST, tmp126_AST);
          match(BXOR);
          bitAndExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop147;
        }
       
      } while (true);
      }
      exclusiveOrExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_50);
      } else {
        throw ex;
      }
    }
    returnAST = exclusiveOrExpr_AST;
  }
 
  public final void bitAndExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode bitAndExpr_AST = null;
   
    try {      // for error handling
      equalityExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop150:
      do {
        if ((LA(1)==BAND)) {
          TNode tmp127_AST = null;
          tmp127_AST = (TNode)astFactory.create(LT(1));
          astFactory.makeASTRoot(currentAST, tmp127_AST);
          match(BAND);
          equalityExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop150;
        }
       
      } while (true);
      }
      bitAndExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_51);
      } else {
        throw ex;
      }
    }
    returnAST = bitAndExpr_AST;
  }
 
  public final void equalityExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode equalityExpr_AST = null;
   
    try {      // for error handling
      relationalExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop154:
      do {
        if ((LA(1)==EQUAL||LA(1)==NOT_EQUAL)) {
          {
          switch ( LA(1)) {
          case EQUAL:
          {
            TNode tmp128_AST = null;
            tmp128_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp128_AST);
            match(EQUAL);
            break;
          }
          case NOT_EQUAL:
          {
            TNode tmp129_AST = null;
            tmp129_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp129_AST);
            match(NOT_EQUAL);
            break;
          }
          default:
          {
            throw new NoViableAltException(LT(1), getFilename());
          }
          }
          }
          relationalExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop154;
        }
       
      } while (true);
      }
      equalityExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_52);
      } else {
        throw ex;
      }
    }
    returnAST = equalityExpr_AST;
  }
 
  public final void relationalExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode relationalExpr_AST = null;
   
    try {      // for error handling
      shiftExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop158:
      do {
        if (((LA(1) >= LT && LA(1) <= GTE))) {
          {
          switch ( LA(1)) {
          case LT:
          {
            TNode tmp130_AST = null;
            tmp130_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp130_AST);
            match(LT);
            break;
          }
          case LTE:
          {
            TNode tmp131_AST = null;
            tmp131_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp131_AST);
            match(LTE);
            break;
          }
          case GT:
          {
            TNode tmp132_AST = null;
            tmp132_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp132_AST);
            match(GT);
            break;
          }
          case GTE:
          {
            TNode tmp133_AST = null;
            tmp133_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp133_AST);
            match(GTE);
            break;
          }
          default:
          {
            throw new NoViableAltException(LT(1), getFilename());
          }
          }
          }
          shiftExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop158;
        }
       
      } while (true);
      }
      relationalExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_53);
      } else {
        throw ex;
      }
    }
    returnAST = relationalExpr_AST;
  }
 
  public final void shiftExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode shiftExpr_AST = null;
   
    try {      // for error handling
      additiveExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop162:
      do {
        if ((LA(1)==LSHIFT||LA(1)==RSHIFT)) {
          {
          switch ( LA(1)) {
          case LSHIFT:
          {
            TNode tmp134_AST = null;
            tmp134_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp134_AST);
            match(LSHIFT);
            break;
          }
          case RSHIFT:
          {
            TNode tmp135_AST = null;
            tmp135_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp135_AST);
            match(RSHIFT);
            break;
          }
          default:
          {
            throw new NoViableAltException(LT(1), getFilename());
          }
          }
          }
          additiveExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop162;
        }
       
      } while (true);
      }
      shiftExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_54);
      } else {
        throw ex;
      }
    }
    returnAST = shiftExpr_AST;
  }
 
  public final void additiveExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode additiveExpr_AST = null;
   
    try {      // for error handling
      multExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop166:
      do {
        if ((LA(1)==PLUS||LA(1)==MINUS)) {
          {
          switch ( LA(1)) {
          case PLUS:
          {
            TNode tmp136_AST = null;
            tmp136_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp136_AST);
            match(PLUS);
            break;
          }
          case MINUS:
          {
            TNode tmp137_AST = null;
            tmp137_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp137_AST);
            match(MINUS);
            break;
          }
          default:
          {
            throw new NoViableAltException(LT(1), getFilename());
          }
          }
          }
          multExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop166;
        }
       
      } while (true);
      }
      additiveExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_55);
      } else {
        throw ex;
      }
    }
    returnAST = additiveExpr_AST;
  }
 
  public final void multExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode multExpr_AST = null;
   
    try {      // for error handling
      castExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop170:
      do {
        if ((_tokenSet_56.member(LA(1)))) {
          {
          switch ( LA(1)) {
          case STAR:
          {
            TNode tmp138_AST = null;
            tmp138_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp138_AST);
            match(STAR);
            break;
          }
          case DIV:
          {
            TNode tmp139_AST = null;
            tmp139_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp139_AST);
            match(DIV);
            break;
          }
          case MOD:
          {
            TNode tmp140_AST = null;
            tmp140_AST = (TNode)astFactory.create(LT(1));
            astFactory.makeASTRoot(currentAST, tmp140_AST);
            match(MOD);
            break;
          }
          default:
          {
            throw new NoViableAltException(LT(1), getFilename());
          }
          }
          }
          castExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop170;
        }
       
      } while (true);
      }
      multExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_57);
      } else {
        throw ex;
      }
    }
    returnAST = multExpr_AST;
  }
 
  public final void castExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode castExpr_AST = null;
   
    try {      // for error handling
      boolean synPredMatched173 = false;
      if (((LA(1)==LPAREN) && (_tokenSet_20.member(LA(2))))) {
        int _m173 = mark();
        synPredMatched173 = true;
        inputState.guessing++;
        try {
          {
          match(LPAREN);
          typeName();
          match(RPAREN);
          }
        }
        catch (RecognitionException pe) {
          synPredMatched173 = false;
        }
        rewind(_m173);
        inputState.guessing--;
      }
      if ( synPredMatched173 ) {
        match(LPAREN);
        typeName();
        astFactory.addASTChild(currentAST, returnAST);
        match(RPAREN);
        {
        castExpr();
        astFactory.addASTChild(currentAST, returnAST);
        }
        if ( inputState.guessing==0 ) {
          castExpr_AST = (TNode)currentAST.root;
          castExpr_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NCast,"(")).add(castExpr_AST));
          currentAST.root = castExpr_AST;
          currentAST.child = castExpr_AST!=null &&castExpr_AST.getFirstChild()!=null ?
            castExpr_AST.getFirstChild() : castExpr_AST;
          currentAST.advanceChildToEnd();
        }
        castExpr_AST = (TNode)currentAST.root;
      }
      else if ((_tokenSet_11.member(LA(1))) && (_tokenSet_58.member(LA(2)))) {
        unaryExpr();
        astFactory.addASTChild(currentAST, returnAST);
        castExpr_AST = (TNode)currentAST.root;
      }
      else {
        throw new NoViableAltException(LT(1), getFilename());
      }
     
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_59);
      } else {
        throw ex;
      }
    }
    returnAST = castExpr_AST;
  }
 
  public final void typeName() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode typeName_AST = null;
   
    try {      // for error handling
      specifierQualifierList();
      astFactory.addASTChild(currentAST, returnAST);
      {
      switch ( LA(1)) {
      case STAR:
      case LPAREN:
      case LBRACKET:
      {
        nonemptyAbstractDeclarator();
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case RPAREN:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      typeName_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_33);
      } else {
        throw ex;
      }
    }
    returnAST = typeName_AST;
  }
 
  public final void unaryExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode unaryExpr_AST = null;
    TNode u_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case ID:
      case LPAREN:
      case CharLiteral:
      case StringLiteral:
      case IntOctalConst:
      case LongOctalConst:
      case UnsignedOctalConst:
      case IntIntConst:
      case LongIntConst:
      case UnsignedIntConst:
      case IntHexConst:
      case LongHexConst:
      case UnsignedHexConst:
      case FloatDoubleConst:
      case DoubleDoubleConst:
      case LongDoubleConst:
      {
        postfixExpr();
        astFactory.addASTChild(currentAST, returnAST);
        unaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      case INC:
      {
        TNode tmp143_AST = null;
        tmp143_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp143_AST);
        match(INC);
        unaryExpr();
        astFactory.addASTChild(currentAST, returnAST);
        unaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      case DEC:
      {
        TNode tmp144_AST = null;
        tmp144_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp144_AST);
        match(DEC);
        unaryExpr();
        astFactory.addASTChild(currentAST, returnAST);
        unaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      case STAR:
      case BAND:
      case PLUS:
      case MINUS:
      case BNOT:
      case LNOT:
      {
        unaryOperator();
        u_AST = (TNode)returnAST;
        astFactory.addASTChild(currentAST, returnAST);
        castExpr();
        astFactory.addASTChild(currentAST, returnAST);
        if ( inputState.guessing==0 ) {
          unaryExpr_AST = (TNode)currentAST.root;
          unaryExpr_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NUnaryExpr)).add(unaryExpr_AST));
          currentAST.root = unaryExpr_AST;
          currentAST.child = unaryExpr_AST!=null &&unaryExpr_AST.getFirstChild()!=null ?
            unaryExpr_AST.getFirstChild() : unaryExpr_AST;
          currentAST.advanceChildToEnd();
        }
        unaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      case LITERAL_sizeof:
      {
        TNode tmp145_AST = null;
        tmp145_AST = (TNode)astFactory.create(LT(1));
        astFactory.makeASTRoot(currentAST, tmp145_AST);
        match(LITERAL_sizeof);
        {
        boolean synPredMatched194 = false;
        if (((LA(1)==LPAREN) && (_tokenSet_20.member(LA(2))))) {
          int _m194 = mark();
          synPredMatched194 = true;
          inputState.guessing++;
          try {
            {
            match(LPAREN);
            typeName();
            }
          }
          catch (RecognitionException pe) {
            synPredMatched194 = false;
          }
          rewind(_m194);
          inputState.guessing--;
        }
        if ( synPredMatched194 ) {
          TNode tmp146_AST = null;
          tmp146_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp146_AST);
          match(LPAREN);
          typeName();
          astFactory.addASTChild(currentAST, returnAST);
          TNode tmp147_AST = null;
          tmp147_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp147_AST);
          match(RPAREN);
        }
        else if ((_tokenSet_11.member(LA(1))) && (_tokenSet_58.member(LA(2)))) {
          unaryExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          throw new NoViableAltException(LT(1), getFilename());
        }
       
        }
        unaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_59);
      } else {
        throw ex;
      }
    }
    returnAST = unaryExpr_AST;
  }
 
  public final void postfixExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode postfixExpr_AST = null;
   
    try {      // for error handling
      primaryExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      switch ( LA(1)) {
      case LPAREN:
      case LBRACKET:
      case INC:
      case DEC:
      case PTR:
      case DOT:
      {
        postfixSuffix();
        astFactory.addASTChild(currentAST, returnAST);
        if ( inputState.guessing==0 ) {
          postfixExpr_AST = (TNode)currentAST.root;
          postfixExpr_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NPostfixExpr)).add(postfixExpr_AST));
          currentAST.root = postfixExpr_AST;
          currentAST.child = postfixExpr_AST!=null &&postfixExpr_AST.getFirstChild()!=null ?
            postfixExpr_AST.getFirstChild() : postfixExpr_AST;
          currentAST.advanceChildToEnd();
        }
        break;
      }
      case RCURLY:
      case SEMI:
      case COMMA:
      case COLON:
      case ASSIGN:
      case STAR:
      case RPAREN:
      case RBRACKET:
      case DIV_ASSIGN:
      case PLUS_ASSIGN:
      case MINUS_ASSIGN:
      case STAR_ASSIGN:
      case MOD_ASSIGN:
      case RSHIFT_ASSIGN:
      case LSHIFT_ASSIGN:
      case BAND_ASSIGN:
      case BOR_ASSIGN:
      case BXOR_ASSIGN:
      case QUESTION:
      case LOR:
      case LAND:
      case BOR:
      case BXOR:
      case BAND:
      case EQUAL:
      case NOT_EQUAL:
      case LT:
      case LTE:
      case GT:
      case GTE:
      case LSHIFT:
      case RSHIFT:
      case PLUS:
      case MINUS:
      case DIV:
      case MOD:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      postfixExpr_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_59);
      } else {
        throw ex;
      }
    }
    returnAST = postfixExpr_AST;
  }
 
  public final void unaryOperator() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode unaryOperator_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case BAND:
      {
        TNode tmp148_AST = null;
        tmp148_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp148_AST);
        match(BAND);
        unaryOperator_AST = (TNode)currentAST.root;
        break;
      }
      case STAR:
      {
        TNode tmp149_AST = null;
        tmp149_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp149_AST);
        match(STAR);
        unaryOperator_AST = (TNode)currentAST.root;
        break;
      }
      case PLUS:
      {
        TNode tmp150_AST = null;
        tmp150_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp150_AST);
        match(PLUS);
        unaryOperator_AST = (TNode)currentAST.root;
        break;
      }
      case MINUS:
      {
        TNode tmp151_AST = null;
        tmp151_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp151_AST);
        match(MINUS);
        unaryOperator_AST = (TNode)currentAST.root;
        break;
      }
      case BNOT:
      {
        TNode tmp152_AST = null;
        tmp152_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp152_AST);
        match(BNOT);
        unaryOperator_AST = (TNode)currentAST.root;
        break;
      }
      case LNOT:
      {
        TNode tmp153_AST = null;
        tmp153_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp153_AST);
        match(LNOT);
        unaryOperator_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_11);
      } else {
        throw ex;
      }
    }
    returnAST = unaryOperator_AST;
  }
 
  public final void primaryExpr() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode primaryExpr_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case ID:
      {
        TNode tmp154_AST = null;
        tmp154_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp154_AST);
        match(ID);
        primaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      case CharLiteral:
      {
        charConst();
        astFactory.addASTChild(currentAST, returnAST);
        primaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      case IntOctalConst:
      case LongOctalConst:
      case UnsignedOctalConst:
      case IntIntConst:
      case LongIntConst:
      case UnsignedIntConst:
      case IntHexConst:
      case LongHexConst:
      case UnsignedHexConst:
      {
        intConst();
        astFactory.addASTChild(currentAST, returnAST);
        primaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      case FloatDoubleConst:
      case DoubleDoubleConst:
      case LongDoubleConst:
      {
        floatConst();
        astFactory.addASTChild(currentAST, returnAST);
        primaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      case StringLiteral:
      {
        stringConst();
        astFactory.addASTChild(currentAST, returnAST);
        primaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      case LPAREN:
      {
        match(LPAREN);
        expr();
        astFactory.addASTChild(currentAST, returnAST);
        match(RPAREN);
        if ( inputState.guessing==0 ) {
          primaryExpr_AST = (TNode)currentAST.root;
          primaryExpr_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NExpressionGroup,"(")).add(primaryExpr_AST));
          currentAST.root = primaryExpr_AST;
          currentAST.child = primaryExpr_AST!=null &&primaryExpr_AST.getFirstChild()!=null ?
            primaryExpr_AST.getFirstChild() : primaryExpr_AST;
          currentAST.advanceChildToEnd();
        }
        primaryExpr_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_60);
      } else {
        throw ex;
      }
    }
    returnAST = primaryExpr_AST;
  }
 
  public final void postfixSuffix() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode postfixSuffix_AST = null;
   
    try {      // for error handling
      {
      int _cnt200=0;
      _loop200:
      do {
        switch ( LA(1)) {
        case PTR:
        {
          TNode tmp157_AST = null;
          tmp157_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp157_AST);
          match(PTR);
          TNode tmp158_AST = null;
          tmp158_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp158_AST);
          match(ID);
          break;
        }
        case DOT:
        {
          TNode tmp159_AST = null;
          tmp159_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp159_AST);
          match(DOT);
          TNode tmp160_AST = null;
          tmp160_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp160_AST);
          match(ID);
          break;
        }
        case LPAREN:
        {
          functionCall();
          astFactory.addASTChild(currentAST, returnAST);
          break;
        }
        case LBRACKET:
        {
          TNode tmp161_AST = null;
          tmp161_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp161_AST);
          match(LBRACKET);
          expr();
          astFactory.addASTChild(currentAST, returnAST);
          TNode tmp162_AST = null;
          tmp162_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp162_AST);
          match(RBRACKET);
          break;
        }
        case INC:
        {
          TNode tmp163_AST = null;
          tmp163_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp163_AST);
          match(INC);
          break;
        }
        case DEC:
        {
          TNode tmp164_AST = null;
          tmp164_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp164_AST);
          match(DEC);
          break;
        }
        default:
        {
          if ( _cnt200>=1 ) { break _loop200; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
        }
        _cnt200++;
      } while (true);
      }
      postfixSuffix_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_59);
      } else {
        throw ex;
      }
    }
    returnAST = postfixSuffix_AST;
  }
 
  public final void functionCall() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode functionCall_AST = null;
    TNode a_AST = null;
   
    try {      // for error handling
      TNode tmp165_AST = null;
      tmp165_AST = (TNode)astFactory.create(LT(1));
      astFactory.makeASTRoot(currentAST, tmp165_AST);
      match(LPAREN);
      {
      switch ( LA(1)) {
      case ID:
      case STAR:
      case LPAREN:
      case BAND:
      case PLUS:
      case MINUS:
      case INC:
      case DEC:
      case LITERAL_sizeof:
      case BNOT:
      case LNOT:
      case CharLiteral:
      case StringLiteral:
      case IntOctalConst:
      case LongOctalConst:
      case UnsignedOctalConst:
      case IntIntConst:
      case LongIntConst:
      case UnsignedIntConst:
      case IntHexConst:
      case LongHexConst:
      case UnsignedHexConst:
      case FloatDoubleConst:
      case DoubleDoubleConst:
      case LongDoubleConst:
      {
        argExprList();
        a_AST = (TNode)returnAST;
        astFactory.addASTChild(currentAST, returnAST);
        break;
      }
      case RPAREN:
      {
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
      }
      TNode tmp166_AST = null;
      tmp166_AST = (TNode)astFactory.create(LT(1));
      astFactory.addASTChild(currentAST, tmp166_AST);
      match(RPAREN);
      if ( inputState.guessing==0 ) {
        functionCall_AST = (TNode)currentAST.root;
       
        functionCall_AST.setType( NFunctionCallArgs );
       
      }
      functionCall_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_60);
      } else {
        throw ex;
      }
    }
    returnAST = functionCall_AST;
  }
 
  public final void argExprList() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode argExprList_AST = null;
   
    try {      // for error handling
      assignExpr();
      astFactory.addASTChild(currentAST, returnAST);
      {
      _loop206:
      do {
        if ((LA(1)==COMMA)) {
          match(COMMA);
          assignExpr();
          astFactory.addASTChild(currentAST, returnAST);
        }
        else {
          break _loop206;
        }
       
      } while (true);
      }
      argExprList_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_33);
      } else {
        throw ex;
      }
    }
    returnAST = argExprList_AST;
  }
 
  protected final void charConst() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode charConst_AST = null;
   
    try {      // for error handling
      TNode tmp168_AST = null;
      tmp168_AST = (TNode)astFactory.create(LT(1));
      astFactory.addASTChild(currentAST, tmp168_AST);
      match(CharLiteral);
      charConst_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_60);
      } else {
        throw ex;
      }
    }
    returnAST = charConst_AST;
  }
 
  protected final void intConst() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode intConst_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case IntOctalConst:
      {
        TNode tmp169_AST = null;
        tmp169_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp169_AST);
        match(IntOctalConst);
        intConst_AST = (TNode)currentAST.root;
        break;
      }
      case LongOctalConst:
      {
        TNode tmp170_AST = null;
        tmp170_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp170_AST);
        match(LongOctalConst);
        intConst_AST = (TNode)currentAST.root;
        break;
      }
      case UnsignedOctalConst:
      {
        TNode tmp171_AST = null;
        tmp171_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp171_AST);
        match(UnsignedOctalConst);
        intConst_AST = (TNode)currentAST.root;
        break;
      }
      case IntIntConst:
      {
        TNode tmp172_AST = null;
        tmp172_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp172_AST);
        match(IntIntConst);
        intConst_AST = (TNode)currentAST.root;
        break;
      }
      case LongIntConst:
      {
        TNode tmp173_AST = null;
        tmp173_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp173_AST);
        match(LongIntConst);
        intConst_AST = (TNode)currentAST.root;
        break;
      }
      case UnsignedIntConst:
      {
        TNode tmp174_AST = null;
        tmp174_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp174_AST);
        match(UnsignedIntConst);
        intConst_AST = (TNode)currentAST.root;
        break;
      }
      case IntHexConst:
      {
        TNode tmp175_AST = null;
        tmp175_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp175_AST);
        match(IntHexConst);
        intConst_AST = (TNode)currentAST.root;
        break;
      }
      case LongHexConst:
      {
        TNode tmp176_AST = null;
        tmp176_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp176_AST);
        match(LongHexConst);
        intConst_AST = (TNode)currentAST.root;
        break;
      }
      case UnsignedHexConst:
      {
        TNode tmp177_AST = null;
        tmp177_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp177_AST);
        match(UnsignedHexConst);
        intConst_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_60);
      } else {
        throw ex;
      }
    }
    returnAST = intConst_AST;
  }
 
  protected final void floatConst() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode floatConst_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case FloatDoubleConst:
      {
        TNode tmp178_AST = null;
        tmp178_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp178_AST);
        match(FloatDoubleConst);
        floatConst_AST = (TNode)currentAST.root;
        break;
      }
      case DoubleDoubleConst:
      {
        TNode tmp179_AST = null;
        tmp179_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp179_AST);
        match(DoubleDoubleConst);
        floatConst_AST = (TNode)currentAST.root;
        break;
      }
      case LongDoubleConst:
      {
        TNode tmp180_AST = null;
        tmp180_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp180_AST);
        match(LongDoubleConst);
        floatConst_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_60);
      } else {
        throw ex;
      }
    }
    returnAST = floatConst_AST;
  }
 
  protected final void stringConst() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode stringConst_AST = null;
   
    try {      // for error handling
      {
      int _cnt210=0;
      _loop210:
      do {
        if ((LA(1)==StringLiteral)) {
          TNode tmp181_AST = null;
          tmp181_AST = (TNode)astFactory.create(LT(1));
          astFactory.addASTChild(currentAST, tmp181_AST);
          match(StringLiteral);
        }
        else {
          if ( _cnt210>=1 ) { break _loop210; } else {throw new NoViableAltException(LT(1), getFilename());}
        }
       
        _cnt210++;
      } while (true);
      }
      if ( inputState.guessing==0 ) {
        stringConst_AST = (TNode)currentAST.root;
        stringConst_AST = (TNode)astFactory.make( (new ASTArray(2)).add((TNode)astFactory.create(NStringSeq)).add(stringConst_AST));
        currentAST.root = stringConst_AST;
        currentAST.child = stringConst_AST!=null &&stringConst_AST.getFirstChild()!=null ?
          stringConst_AST.getFirstChild() : stringConst_AST;
        currentAST.advanceChildToEnd();
      }
      stringConst_AST = (TNode)currentAST.root;
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_60);
      } else {
        throw ex;
      }
    }
    returnAST = stringConst_AST;
  }
 
  public final void dummy() throws RecognitionException, TokenStreamException {
   
    returnAST = null;
    ASTPair currentAST = new ASTPair();
    TNode dummy_AST = null;
   
    try {      // for error handling
      switch ( LA(1)) {
      case NTypedefName:
      {
        TNode tmp182_AST = null;
        tmp182_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp182_AST);
        match(NTypedefName);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NInitDecl:
      {
        TNode tmp183_AST = null;
        tmp183_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp183_AST);
        match(NInitDecl);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NDeclarator:
      {
        TNode tmp184_AST = null;
        tmp184_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp184_AST);
        match(NDeclarator);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NStructDeclarator:
      {
        TNode tmp185_AST = null;
        tmp185_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp185_AST);
        match(NStructDeclarator);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NDeclaration:
      {
        TNode tmp186_AST = null;
        tmp186_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp186_AST);
        match(NDeclaration);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NCast:
      {
        TNode tmp187_AST = null;
        tmp187_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp187_AST);
        match(NCast);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NPointerGroup:
      {
        TNode tmp188_AST = null;
        tmp188_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp188_AST);
        match(NPointerGroup);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NExpressionGroup:
      {
        TNode tmp189_AST = null;
        tmp189_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp189_AST);
        match(NExpressionGroup);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NFunctionCallArgs:
      {
        TNode tmp190_AST = null;
        tmp190_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp190_AST);
        match(NFunctionCallArgs);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NNonemptyAbstractDeclarator:
      {
        TNode tmp191_AST = null;
        tmp191_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp191_AST);
        match(NNonemptyAbstractDeclarator);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NInitializer:
      {
        TNode tmp192_AST = null;
        tmp192_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp192_AST);
        match(NInitializer);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NStatementExpr:
      {
        TNode tmp193_AST = null;
        tmp193_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp193_AST);
        match(NStatementExpr);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NEmptyExpression:
      {
        TNode tmp194_AST = null;
        tmp194_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp194_AST);
        match(NEmptyExpression);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NParameterTypeList:
      {
        TNode tmp195_AST = null;
        tmp195_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp195_AST);
        match(NParameterTypeList);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NFunctionDef:
      {
        TNode tmp196_AST = null;
        tmp196_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp196_AST);
        match(NFunctionDef);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NCompoundStatement:
      {
        TNode tmp197_AST = null;
        tmp197_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp197_AST);
        match(NCompoundStatement);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NParameterDeclaration:
      {
        TNode tmp198_AST = null;
        tmp198_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp198_AST);
        match(NParameterDeclaration);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NCommaExpr:
      {
        TNode tmp199_AST = null;
        tmp199_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp199_AST);
        match(NCommaExpr);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NUnaryExpr:
      {
        TNode tmp200_AST = null;
        tmp200_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp200_AST);
        match(NUnaryExpr);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NLabel:
      {
        TNode tmp201_AST = null;
        tmp201_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp201_AST);
        match(NLabel);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NPostfixExpr:
      {
        TNode tmp202_AST = null;
        tmp202_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp202_AST);
        match(NPostfixExpr);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NRangeExpr:
      {
        TNode tmp203_AST = null;
        tmp203_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp203_AST);
        match(NRangeExpr);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NStringSeq:
      {
        TNode tmp204_AST = null;
        tmp204_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp204_AST);
        match(NStringSeq);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NInitializerElementLabel:
      {
        TNode tmp205_AST = null;
        tmp205_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp205_AST);
        match(NInitializerElementLabel);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NLcurlyInitializer:
      {
        TNode tmp206_AST = null;
        tmp206_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp206_AST);
        match(NLcurlyInitializer);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NAsmAttribute:
      {
        TNode tmp207_AST = null;
        tmp207_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp207_AST);
        match(NAsmAttribute);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NGnuAsmExpr:
      {
        TNode tmp208_AST = null;
        tmp208_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp208_AST);
        match(NGnuAsmExpr);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      case NTypeMissing:
      {
        TNode tmp209_AST = null;
        tmp209_AST = (TNode)astFactory.create(LT(1));
        astFactory.addASTChild(currentAST, tmp209_AST);
        match(NTypeMissing);
        dummy_AST = (TNode)currentAST.root;
        break;
      }
      default:
      {
        throw new NoViableAltException(LT(1), getFilename());
      }
      }
    }
    catch (RecognitionException ex) {
      if (inputState.guessing==0) {
        reportError(ex);
        consume();
        consumeUntil(_tokenSet_0);
      } else {
        throw ex;
      }
    }
    returnAST = dummy_AST;
  }
 
 
  public static final String[] _tokenNames = {
    "<0>",
    "EOF",
    "<2>",
    "NULL_TREE_LOOKAHEAD",
    "\"typedef\"",
    "\"asm\"",
    "\"volatile\"",
    "LCURLY",
    "RCURLY",
    "SEMI",
    "\"struct\"",
    "\"union\"",
    "\"enum\"",
    "\"auto\"",
    "\"register\"",
    "\"extern\"",
    "\"static\"",
    "\"const\"",
    "\"void\"",
    "\"char\"",
    "\"short\"",
    "\"int\"",
    "\"long\"",
    "\"float\"",
    "\"double\"",
    "\"signed\"",
    "\"unsigned\"",
    "ID",
    "COMMA",
    "COLON",
    "ASSIGN",
    "STAR",
    "LPAREN",
    "RPAREN",
    "LBRACKET",
    "RBRACKET",
    "VARARGS",
    "\"while\"",
    "\"do\"",
    "\"for\"",
    "\"goto\"",
    "\"continue\"",
    "\"break\"",
    "\"return\"",
    "\"case\"",
    "\"default\"",
    "\"if\"",
    "\"else\"",
    "\"switch\"",
    "DIV_ASSIGN",
    "PLUS_ASSIGN",
    "MINUS_ASSIGN",
    "STAR_ASSIGN",
    "MOD_ASSIGN",
    "RSHIFT_ASSIGN",
    "LSHIFT_ASSIGN",
    "BAND_ASSIGN",
    "BOR_ASSIGN",
    "BXOR_ASSIGN",
    "QUESTION",
    "LOR",
    "LAND",
    "BOR",
    "BXOR",
    "BAND",
    "EQUAL",
    "NOT_EQUAL",
    "LT",
    "LTE",
    "GT",
    "GTE",
    "LSHIFT",
    "RSHIFT",
    "PLUS",
    "MINUS",
    "DIV",
    "MOD",
    "INC",
    "DEC",
    "\"sizeof\"",
    "BNOT",
    "LNOT",
    "PTR",
    "DOT",
    "CharLiteral",
    "StringLiteral",
    "IntOctalConst",
    "LongOctalConst",
    "UnsignedOctalConst",
    "IntIntConst",
    "LongIntConst",
    "UnsignedIntConst",
    "IntHexConst",
    "LongHexConst",
    "UnsignedHexConst",
    "FloatDoubleConst",
    "DoubleDoubleConst",
    "LongDoubleConst",
    "NTypedefName",
    "NInitDecl",
    "NDeclarator",
    "NStructDeclarator",
    "NDeclaration",
    "NCast",
    "NPointerGroup",
    "NExpressionGroup",
    "NFunctionCallArgs",
    "NNonemptyAbstractDeclarator",
    "NInitializer",
    "NStatementExpr",
    "NEmptyExpression",
    "NParameterTypeList",
    "NFunctionDef",
    "NCompoundStatement",
    "NParameterDeclaration",
    "NCommaExpr",
    "NUnaryExpr",
    "NLabel",
    "NPostfixExpr",
    "NRangeExpr",
    "NStringSeq",
    "NInitializerElementLabel",
    "NLcurlyInitializer",
    "NAsmAttribute",
    "NGnuAsmExpr",
    "NTypeMissing",
    "Vocabulary",
    "Whitespace",
    "Comment",
    "CPPComment",
    "a line directive",
    "Space",
    "LineDirective",
    "BadStringLiteral",
    "Escape",
    "Digit",
    "LongSuffix",
    "UnsignedSuffix",
    "FloatSuffix",
    "Exponent",
    "Number"
  };
 
  protected void buildTokenTypeASTClassMap() {
    tokenTypeToASTClassMap=null;
  };
 
  private static final long[] mk_tokenSet_0() {
    long[] data = { 2L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_0 = new BitSet(mk_tokenSet_0());
  private static final long[] mk_tokenSet_1() {
    long[] data = { 6710885488L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_1 = new BitSet(mk_tokenSet_1());
  private static final long[] mk_tokenSet_2() {
    long[] data = { 268434512L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_2 = new BitSet(mk_tokenSet_2());
  private static final long[] mk_tokenSet_3() {
    long[] data = { 6710886096L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_3 = new BitSet(mk_tokenSet_3());
  private static final long[] mk_tokenSet_4() {
    long[] data = { 6710860864L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_4 = new BitSet(mk_tokenSet_4());
  private static final long[] mk_tokenSet_5() {
    long[] data = { 92610232016L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_5 = new BitSet(mk_tokenSet_5());
  private static final long[] mk_tokenSet_6() {
    long[] data = { 6710885490L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_6 = new BitSet(mk_tokenSet_6());
  private static final long[] mk_tokenSet_7() {
    long[] data = { 422150456475634L, 17179076097L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_7 = new BitSet(mk_tokenSet_7());
  private static final long[] mk_tokenSet_8() {
    long[] data = { 268409920L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_8 = new BitSet(mk_tokenSet_8());
  private static final long[] mk_tokenSet_9() {
    long[] data = { 6710860992L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_9 = new BitSet(mk_tokenSet_9());
  private static final long[] mk_tokenSet_10() {
    long[] data = { 6576668672L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_10 = new BitSet(mk_tokenSet_10());
  private static final long[] mk_tokenSet_11() {
    long[] data = { 6576668672L, 17179076097L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_11 = new BitSet(mk_tokenSet_11());
  private static final long[] mk_tokenSet_12() {
    long[] data = { 43754980096L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_12 = new BitSet(mk_tokenSet_12());
  private static final long[] mk_tokenSet_13() {
    long[] data = { 268180480L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_13 = new BitSet(mk_tokenSet_13());
  private static final long[] mk_tokenSet_14() {
    long[] data = { 32749125328L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_14 = new BitSet(mk_tokenSet_14());
  private static final long[] mk_tokenSet_15() {
    long[] data = { 32614908416L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_15 = new BitSet(mk_tokenSet_15());
  private static final long[] mk_tokenSet_16() {
    long[] data = { 512L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_16 = new BitSet(mk_tokenSet_16());
  private static final long[] mk_tokenSet_17() {
    long[] data = { 32749125200L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_17 = new BitSet(mk_tokenSet_17());
  private static final long[] mk_tokenSet_18() {
    long[] data = { 33285996112L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_18 = new BitSet(mk_tokenSet_18());
  private static final long[] mk_tokenSet_19() {
    long[] data = { 134217856L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_19 = new BitSet(mk_tokenSet_19());
  private static final long[] mk_tokenSet_20() {
    long[] data = { 268311616L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_20 = new BitSet(mk_tokenSet_20());
  private static final long[] mk_tokenSet_21() {
    long[] data = { 256L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_21 = new BitSet(mk_tokenSet_21());
  private static final long[] mk_tokenSet_22() {
    long[] data = { 268311872L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_22 = new BitSet(mk_tokenSet_22());
  private static final long[] mk_tokenSet_23() {
    long[] data = { 33017437376L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_23 = new BitSet(mk_tokenSet_23());
  private static final long[] mk_tokenSet_24() {
    long[] data = { 32883343360L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_24 = new BitSet(mk_tokenSet_24());
  private static final long[] mk_tokenSet_25() {
    long[] data = { 268435968L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_25 = new BitSet(mk_tokenSet_25());
  private static final long[] mk_tokenSet_26() {
    long[] data = { 35165045504L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_26 = new BitSet(mk_tokenSet_26());
  private static final long[] mk_tokenSet_27() {
    long[] data = { 32749124816L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_27 = new BitSet(mk_tokenSet_27());
  private static final long[] mk_tokenSet_28() {
    long[] data = { 100931731152L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_28 = new BitSet(mk_tokenSet_28());
  private static final long[] mk_tokenSet_29() {
    long[] data = { 79456894672L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_29 = new BitSet(mk_tokenSet_29());
  private static final long[] mk_tokenSet_30() {
    long[] data = { 268435712L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_30 = new BitSet(mk_tokenSet_30());
  private static final long[] mk_tokenSet_31() {
    long[] data = { 268436224L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_31 = new BitSet(mk_tokenSet_31());
  private static final long[] mk_tokenSet_32() {
    long[] data = { 30467424256L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_32 = new BitSet(mk_tokenSet_32());
  private static final long[] mk_tokenSet_33() {
    long[] data = { 8589934592L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_33 = new BitSet(mk_tokenSet_33());
  private static final long[] mk_tokenSet_34() {
    long[] data = { 6576668800L, 17179076097L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_34 = new BitSet(mk_tokenSet_34());
  private static final long[] mk_tokenSet_35() {
    long[] data = { 32615039040L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_35 = new BitSet(mk_tokenSet_35());
  private static final long[] mk_tokenSet_36() {
    long[] data = { 23622320128L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_36 = new BitSet(mk_tokenSet_36());
  private static final long[] mk_tokenSet_37() {
    long[] data = { 67108863056L, 17179076097L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_37 = new BitSet(mk_tokenSet_37());
  private static final long[] mk_tokenSet_38() {
    long[] data = { 8858370048L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_38 = new BitSet(mk_tokenSet_38());
  private static final long[] mk_tokenSet_39() {
    long[] data = { 422081602782080L, 17179076097L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_39 = new BitSet(mk_tokenSet_39());
  private static final long[] mk_tokenSet_40() {
    long[] data = { -111669149710L, 17179869183L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_40 = new BitSet(mk_tokenSet_40());
  private static final long[] mk_tokenSet_41() {
    long[] data = { 562819225354226L, 17179076097L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_41 = new BitSet(mk_tokenSet_41());
  private static final long[] mk_tokenSet_42() {
    long[] data = { 422081602781824L, 17179076097L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_42 = new BitSet(mk_tokenSet_42());
  private static final long[] mk_tokenSet_43() {
    long[] data = { 562819091137408L, 17179076097L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_43 = new BitSet(mk_tokenSet_43());
  private static final long[] mk_tokenSet_44() {
    long[] data = { -562924720611776L, 17179869183L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_44 = new BitSet(mk_tokenSet_44());
  private static final long[] mk_tokenSet_45() {
    long[] data = { -111669149744L, 17179869183L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_45 = new BitSet(mk_tokenSet_45());
  private static final long[] mk_tokenSet_46() {
    long[] data = { 575897847178724096L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_46 = new BitSet(mk_tokenSet_46());
  private static final long[] mk_tokenSet_47() {
    long[] data = { 1152358599482147584L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_47 = new BitSet(mk_tokenSet_47());
  private static final long[] mk_tokenSet_48() {
    long[] data = { 2305280104088994560L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_48 = new BitSet(mk_tokenSet_48());
  private static final long[] mk_tokenSet_49() {
    long[] data = { 4611123113302688512L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_49 = new BitSet(mk_tokenSet_49());
  private static final long[] mk_tokenSet_50() {
    long[] data = { 9222809131730076416L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_50 = new BitSet(mk_tokenSet_50());
  private static final long[] mk_tokenSet_51() {
    long[] data = { -562905124699392L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_51 = new BitSet(mk_tokenSet_51());
  private static final long[] mk_tokenSet_52() {
    long[] data = { -562905124699392L, 1L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_52 = new BitSet(mk_tokenSet_52());
  private static final long[] mk_tokenSet_53() {
    long[] data = { -562905124699392L, 7L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_53 = new BitSet(mk_tokenSet_53());
  private static final long[] mk_tokenSet_54() {
    long[] data = { -562905124699392L, 127L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_54 = new BitSet(mk_tokenSet_54());
  private static final long[] mk_tokenSet_55() {
    long[] data = { -562905124699392L, 511L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_55 = new BitSet(mk_tokenSet_55());
  private static final long[] mk_tokenSet_56() {
    long[] data = { 2147483648L, 6144L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_56 = new BitSet(mk_tokenSet_56());
  private static final long[] mk_tokenSet_57() {
    long[] data = { -562905124699392L, 2047L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_57 = new BitSet(mk_tokenSet_57());
  private static final long[] mk_tokenSet_58() {
    long[] data = { -562881368161536L, 17179869183L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_58 = new BitSet(mk_tokenSet_58());
  private static final long[] mk_tokenSet_59() {
    long[] data = { -562902977215744L, 8191L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_59 = new BitSet(mk_tokenSet_59());
  private static final long[] mk_tokenSet_60() {
    long[] data = { -562881502379264L, 819199L, 0L, 0L};
    return data;
  }
  public static final BitSet _tokenSet_60 = new BitSet(mk_tokenSet_60());
 
  }
TOP

Related Classes of processing.app.preproc.StdCParser

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.