Package org.antlr.tool

Source Code of org.antlr.tool.ActionAnalysisLexer

// $ANTLR 3.0b7 ActionAnalysis.g 2007-04-03 12:25:48

package org.antlr.tool;
import org.antlr.runtime.*;
import org.antlr.tool.AttributeScope;
import org.antlr.tool.Grammar;
import org.antlr.tool.GrammarAST;
import org.antlr.tool.Rule;

import java.util.HashMap;
/** We need to set Rule.referencedPredefinedRuleAttributes before
*  code generation.  This filter looks at an action in context of
*  its rule and outer alternative number and figures out which
*  rules have predefined prefs referenced.  I need this so I can
*  remove unusued labels.
*/
public class ActionAnalysisLexer extends Lexer {
    public static final int X_Y=5;
    public static final int EOF=-1;
    public static final int Tokens=8;
    public static final int Y=7;
    public static final int ID=4;
    public static final int X=6;

    Rule enclosingRule;
    Grammar grammar;
    antlr.Token actionToken;
    int outerAltNum = 0;

      public ActionAnalysisLexer(Grammar grammar, String ruleName, GrammarAST actionAST)
      {
        this(new ANTLRStringStream(actionAST.token.getText()));
        this.grammar = grammar;
          this.enclosingRule = grammar.getRule(ruleName);
          this.actionToken = actionAST.token;
          this.outerAltNum = actionAST.outerAltNum;
      }

    public void analyze() {
      // System.out.println("###\naction="+actionToken);
      Token t;
      do {
        t = nextToken();
      } while ( t.getType()!= Token.EOF );
    }

    public ActionAnalysisLexer() {;}
    public ActionAnalysisLexer(CharStream input) {
        super(input);
        ruleMemo = new HashMap[7+1];
     }
    public String getGrammarFileName() { return "ActionAnalysis.g"; }

    public Token nextToken() {
        while (true) {
            if ( input.LA(1)==CharStream.EOF ) {
                return Token.EOF_TOKEN;
            }
            token = null;
      channel = Token.DEFAULT_CHANNEL;
            tokenStartCharIndex = input.index();
            tokenStartCharPositionInLine = input.getCharPositionInLine();
            tokenStartLine = input.getLine();
      text = null;
            try {
                int m = input.mark();
                backtracking=1;
                failed=false;
                mTokens();
                backtracking=0;

                if ( failed ) {
                    input.rewind(m);
                    input.consume();
                }
                else {
                    emit();
                    return token;
                }
            }
            catch (RecognitionException re) {
                // shouldn't happen in backtracking mode, but...
                reportError(re);
                recover(re);
            }
        }
    }

    public void memoize(IntStream input,
        int ruleIndex,
        int ruleStartIndex)
    {
    if ( backtracking>1 ) super.memoize(input, ruleIndex, ruleStartIndex);
    }

    public boolean alreadyParsedRule(IntStream input, int ruleIndex) {
    if ( backtracking>1 ) return super.alreadyParsedRule(input, ruleIndex);
    return false;
    }// $ANTLR start X_Y
    public final void mX_Y() throws RecognitionException {
        try {
            int _type = X_Y;
            // ActionAnalysis.g:73:7: ( '$' x= ID '.' y= ID {...}?)
            // ActionAnalysis.g:73:7: '$' x= ID '.' y= ID {...}?
            {
            match('$'); if (failed) return ;
            int xStart = getCharIndex();
            mID(); if (failed) return ;
            Token x = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, xStart, getCharIndex()-1);
            match('.'); if (failed) return ;
            int yStart = getCharIndex();
            mID(); if (failed) return ;
            Token y = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, yStart, getCharIndex()-1);
            if ( !(enclosingRule!=null) ) {
                if (backtracking>0) {failed=true; return ;}
                throw new FailedPredicateException(input, "X_Y", "enclosingRule!=null");
            }
            if ( backtracking==1 ) {

                  AttributeScope scope = null;
                  String refdRuleName = null;
                  if ( x.getText().equals(enclosingRule.name) ) {
                    // ref to enclosing rule.
                    refdRuleName = x.getText();
                    scope = enclosingRule.getLocalAttributeScope(y.getText());
                  }
                  else if ( enclosingRule.getRuleLabel(x.getText())!=null ) {
                    // ref to rule label
                    Grammar.LabelElementPair pair = enclosingRule.getRuleLabel(x.getText());
                    pair.actionReferencesLabel = true;
                    refdRuleName = pair.referencedRuleName;
                    Rule refdRule = grammar.getRule(refdRuleName);
                    scope = refdRule.getLocalAttributeScope(y.getText());
                  }
                  else if ( enclosingRule.getRuleRefsInAlt(x.getText(), outerAltNum)!=null ) {
                    // ref to rule referenced in this alt
                    refdRuleName = x.getText();
                    Rule refdRule = grammar.getRule(refdRuleName);
                    scope = refdRule.getLocalAttributeScope(y.getText());
                  }
                  if ( scope!=null &&
                     (scope.isPredefinedRuleScope||scope.isPredefinedLexerRuleScope) )
                  {
                    grammar.referenceRuleLabelPredefinedAttribute(refdRuleName);
                    //System.out.println("referenceRuleLabelPredefinedAttribute for "+refdRuleName);
                  }

            }

            }

            this.type = _type;
        }
        finally {
        }
    }
    // $ANTLR end X_Y

    // $ANTLR start X
    public final void mX() throws RecognitionException {
        try {
            int _type = X;
            // ActionAnalysis.g:106:5: ( '$' x= ID {...}?)
            // ActionAnalysis.g:106:5: '$' x= ID {...}?
            {
            match('$'); if (failed) return ;
            int xStart = getCharIndex();
            mID(); if (failed) return ;
            Token x = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, xStart, getCharIndex()-1);
            if ( !(enclosingRule!=null && enclosingRule.getRuleLabel(x.getText())!=null) ) {
                if (backtracking>0) {failed=true; return ;}
                throw new FailedPredicateException(input, "X", "enclosingRule!=null && enclosingRule.getRuleLabel($x.text)!=null");
            }
            if ( backtracking==1 ) {

                    Grammar.LabelElementPair pair = enclosingRule.getRuleLabel(x.getText());
                    pair.actionReferencesLabel = true;

            }

            }

            this.type = _type;
        }
        finally {
        }
    }
    // $ANTLR end X

    // $ANTLR start Y
    public final void mY() throws RecognitionException {
        try {
            int _type = Y;
            // ActionAnalysis.g:114:5: ( '$' ID {...}?)
            // ActionAnalysis.g:114:5: '$' ID {...}?
            {
            match('$'); if (failed) return ;
            int ID1Start = getCharIndex();
            mID(); if (failed) return ;
            Token ID1 = new CommonToken(input, Token.INVALID_TOKEN_TYPE, Token.DEFAULT_CHANNEL, ID1Start, getCharIndex()-1);
            if ( !(enclosingRule!=null && enclosingRule.getLocalAttributeScope(ID1.getText())!=null) ) {
                if (backtracking>0) {failed=true; return ;}
                throw new FailedPredicateException(input, "Y", "enclosingRule!=null && enclosingRule.getLocalAttributeScope($ID.text)!=null");
            }
            if ( backtracking==1 ) {

                    AttributeScope scope = enclosingRule.getLocalAttributeScope(ID1.getText());
                    if ( scope!=null &&
                       (scope.isPredefinedRuleScope||scope.isPredefinedLexerRuleScope) )
                    {
                      grammar.referenceRuleLabelPredefinedAttribute(enclosingRule.name);
                      //System.out.println("referenceRuleLabelPredefinedAttribute for "+ID1.getText());
                    }

            }

            }

            this.type = _type;
        }
        finally {
        }
    }
    // $ANTLR end Y

    // $ANTLR start ID
    public final void mID() throws RecognitionException {
        try {
            // ActionAnalysis.g:127:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
            // ActionAnalysis.g:127:9: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
            {
            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
                input.consume();
            failed=false;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                MismatchedSetException mse =
                    new MismatchedSetException(null,input);
                recover(mse);    throw mse;
            }

            // ActionAnalysis.g:127:33: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
            loop1:
            do {
                int alt1=2;
                int LA1_0 = input.LA(1);

                if ( ((LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||LA1_0=='_'||(LA1_0>='a' && LA1_0<='z')) ) {
                    alt1=1;
                }


                switch (alt1) {
              case 1 :
                  // ActionAnalysis.g:
                  {
                  if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
                      input.consume();
                  failed=false;
                  }
                  else {
                      if (backtracking>0) {failed=true; return ;}
                      MismatchedSetException mse =
                          new MismatchedSetException(null,input);
                      recover(mse);    throw mse;
                  }


                  }
                  break;

              default :
                  break loop1;
                }
            } while (true);


            }

        }
        finally {
        }
    }
    // $ANTLR end ID

    public void mTokens() throws RecognitionException {
        // ActionAnalysis.g:1:41: ( X_Y | X | Y )
        int alt2=3;
        int LA2_0 = input.LA(1);

        if ( (LA2_0=='$') ) {
            int LA2_1 = input.LA(2);

            if ( (synpred1()) ) {
                alt2=1;
            }
            else if ( (synpred2()) ) {
                alt2=2;
            }
            else if ( (true) ) {
                alt2=3;
            }
            else {
                if (backtracking>0) {failed=true; return ;}
                NoViableAltException nvae =
                    new NoViableAltException("1:1: Tokens options {k=1; backtrack=true; } : ( X_Y | X | Y );", 2, 1, input);

                throw nvae;
            }
        }
        else {
            if (backtracking>0) {failed=true; return ;}
            NoViableAltException nvae =
                new NoViableAltException("1:1: Tokens options {k=1; backtrack=true; } : ( X_Y | X | Y );", 2, 0, input);

            throw nvae;
        }
        switch (alt2) {
            case 1 :
                // ActionAnalysis.g:1:41: X_Y
                {
                mX_Y(); if (failed) return ;

                }
                break;
            case 2 :
                // ActionAnalysis.g:1:45: X
                {
                mX(); if (failed) return ;

                }
                break;
            case 3 :
                // ActionAnalysis.g:1:47: Y
                {
                mY(); if (failed) return ;

                }
                break;

        }

    }

    // $ANTLR start synpred1
    public final void synpred1_fragment() throws RecognitionException {
        // ActionAnalysis.g:1:41: ( X_Y )
        // ActionAnalysis.g:1:41: X_Y
        {
        mX_Y(); if (failed) return ;

        }
    }
    // $ANTLR end synpred1

    // $ANTLR start synpred2
    public final void synpred2_fragment() throws RecognitionException {
        // ActionAnalysis.g:1:45: ( X )
        // ActionAnalysis.g:1:45: X
        {
        mX(); if (failed) return ;

        }
    }
    // $ANTLR end synpred2

    public final boolean synpred2() {
        backtracking++;
        int start = input.mark();
        try {
            synpred2_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !failed;
        input.rewind(start);
        backtracking--;
        failed=false;
        return success;
    }
    public final boolean synpred1() {
        backtracking++;
        int start = input.mark();
        try {
            synpred1_fragment(); // can never throw exception
        } catch (RecognitionException re) {
            System.err.println("impossible: "+re);
        }
        boolean success = !failed;
        input.rewind(start);
        backtracking--;
        failed=false;
        return success;
    }



}
TOP

Related Classes of org.antlr.tool.ActionAnalysisLexer

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.