Package antlr

Source Code of antlr.CodeGenerator

package antlr;

import antlr.collections.impl.BitSet;
import antlr.collections.impl.Vector;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;

public abstract class CodeGenerator
{
  protected Tool antlrTool;
  protected int tabs = 0;
  protected transient PrintWriter currentOutput;
  protected Grammar grammar = null;
  protected Vector bitsetsUsed;
  protected DefineGrammarSymbols behavior;
  protected LLkGrammarAnalyzer analyzer;
  protected CharFormatter charFormatter;
  protected boolean DEBUG_CODE_GENERATOR = false;
  protected static final int DEFAULT_MAKE_SWITCH_THRESHOLD = 2;
  protected static final int DEFAULT_BITSET_TEST_THRESHOLD = 4;
  protected static final int BITSET_OPTIMIZE_INIT_THRESHOLD = 8;
  protected int makeSwitchThreshold = 2;
  protected int bitsetTestThreshold = 4;
  private static boolean OLD_ACTION_TRANSLATOR = true;
  public static String TokenTypesFileSuffix = "TokenTypes";
  public static String TokenTypesFileExt = ".txt";

  protected void _print(String paramString)
  {
    if (paramString != null)
      this.currentOutput.print(paramString);
  }

  protected void _printAction(String paramString)
  {
    if (paramString == null)
      return;
    for (int i = 0; (i < paramString.length()) && (Character.isSpaceChar(paramString.charAt(i))); i++);
    for (int j = paramString.length() - 1; (j > i) && (Character.isSpaceChar(paramString.charAt(j))); j--);
    char c = '\000';
    int k = i;
    while (k <= j)
    {
      c = paramString.charAt(k);
      k++;
      int m = 0;
      switch (c)
      {
      case '\n':
        m = 1;
        break;
      case '\r':
        if ((k <= j) && (paramString.charAt(k) == '\n'))
          k++;
        m = 1;
        break;
      default:
        this.currentOutput.print(c);
      }
      if (m == 0)
        continue;
      this.currentOutput.println();
      printTabs();
      while ((k <= j) && (Character.isSpaceChar(paramString.charAt(k))))
        k++;
      m = 0;
    }
    this.currentOutput.println();
  }

  protected void _println(String paramString)
  {
    if (paramString != null)
      this.currentOutput.println(paramString);
  }

  public static boolean elementsAreRange(int[] paramArrayOfInt)
  {
    if (paramArrayOfInt.length == 0)
      return false;
    int i = paramArrayOfInt[0];
    int j = paramArrayOfInt[(paramArrayOfInt.length - 1)];
    if (paramArrayOfInt.length <= 2)
      return false;
    if (j - i + 1 > paramArrayOfInt.length)
      return false;
    int k = i + 1;
    for (int m = 1; m < paramArrayOfInt.length - 1; m++)
    {
      if (k != paramArrayOfInt[m])
        return false;
      k++;
    }
    return true;
  }

  protected String extractIdOfAction(Token paramToken)
  {
    return extractIdOfAction(paramToken.getText(), paramToken.getLine(), paramToken.getColumn());
  }

  protected String extractIdOfAction(String paramString, int paramInt1, int paramInt2)
  {
    paramString = removeAssignmentFromDeclaration(paramString);
    for (int i = paramString.length() - 2; i >= 0; i--)
      if ((!Character.isLetterOrDigit(paramString.charAt(i))) && (paramString.charAt(i) != '_'))
        return paramString.substring(i + 1);
    this.antlrTool.warning("Ill-formed action", this.grammar.getFilename(), paramInt1, paramInt2);
    return "";
  }

  protected String extractTypeOfAction(Token paramToken)
  {
    return extractTypeOfAction(paramToken.getText(), paramToken.getLine(), paramToken.getColumn());
  }

  protected String extractTypeOfAction(String paramString, int paramInt1, int paramInt2)
  {
    paramString = removeAssignmentFromDeclaration(paramString);
    for (int i = paramString.length() - 2; i >= 0; i--)
      if ((!Character.isLetterOrDigit(paramString.charAt(i))) && (paramString.charAt(i) != '_'))
        return paramString.substring(0, i + 1);
    this.antlrTool.warning("Ill-formed action", this.grammar.getFilename(), paramInt1, paramInt2);
    return "";
  }

  public abstract void gen();

  public abstract void gen(ActionElement paramActionElement);

  public abstract void gen(AlternativeBlock paramAlternativeBlock);

  public abstract void gen(BlockEndElement paramBlockEndElement);

  public abstract void gen(CharLiteralElement paramCharLiteralElement);

  public abstract void gen(CharRangeElement paramCharRangeElement);

  public abstract void gen(LexerGrammar paramLexerGrammar)
    throws IOException;

  public abstract void gen(OneOrMoreBlock paramOneOrMoreBlock);

  public abstract void gen(ParserGrammar paramParserGrammar)
    throws IOException;

  public abstract void gen(RuleRefElement paramRuleRefElement);

  public abstract void gen(StringLiteralElement paramStringLiteralElement);

  public abstract void gen(TokenRangeElement paramTokenRangeElement);

  public abstract void gen(TokenRefElement paramTokenRefElement);

  public abstract void gen(TreeElement paramTreeElement);

  public abstract void gen(TreeWalkerGrammar paramTreeWalkerGrammar)
    throws IOException;

  public abstract void gen(WildcardElement paramWildcardElement);

  public abstract void gen(ZeroOrMoreBlock paramZeroOrMoreBlock);

  protected void genTokenInterchange(TokenManager paramTokenManager)
    throws IOException
  {
    String str1 = paramTokenManager.getName() + TokenTypesFileSuffix + TokenTypesFileExt;
    this.currentOutput = this.antlrTool.openOutputFile(str1);
    println("// $ANTLR " + Tool.version + ": " + this.antlrTool.fileMinusPath(this.antlrTool.grammarFile) + " -> " + str1 + "$");
    this.tabs = 0;
    println(paramTokenManager.getName() + "    // output token vocab name");
    Vector localVector = paramTokenManager.getVocabulary();
    for (int i = 4; i < localVector.size(); i++)
    {
      String str2 = (String)localVector.elementAt(i);
      if (this.DEBUG_CODE_GENERATOR)
        System.out.println("gen persistence file entry for: " + str2);
      if ((str2 == null) || (str2.startsWith("<")))
        continue;
      Object localObject;
      if (str2.startsWith("\""))
      {
        localObject = (StringLiteralSymbol)paramTokenManager.getTokenSymbol(str2);
        if ((localObject != null) && (((StringLiteralSymbol)localObject).label != null))
          print(((StringLiteralSymbol)localObject).label + "=");
        println(str2 + "=" + i);
      }
      else
      {
        print(str2);
        localObject = paramTokenManager.getTokenSymbol(str2);
        if (localObject == null)
          this.antlrTool.warning("undefined token symbol: " + str2);
        else if (((TokenSymbol)localObject).getParaphrase() != null)
          print("(" + ((TokenSymbol)localObject).getParaphrase() + ")");
        println("=" + i);
      }
    }
    this.currentOutput.close();
    this.currentOutput = null;
  }

  public String processStringForASTConstructor(String paramString)
  {
    return paramString;
  }

  public abstract String getASTCreateString(Vector paramVector);

  public abstract String getASTCreateString(GrammarAtom paramGrammarAtom, String paramString);

  protected String getBitsetName(int paramInt)
  {
    return "_tokenSet_" + paramInt;
  }

  public static String encodeLexerRuleName(String paramString)
  {
    return "m" + paramString;
  }

  public static String decodeLexerRuleName(String paramString)
  {
    if (paramString == null)
      return null;
    return paramString.substring(1, paramString.length());
  }

  public abstract String mapTreeId(String paramString, ActionTransInfo paramActionTransInfo);

  protected int markBitsetForGen(BitSet paramBitSet)
  {
    for (int i = 0; i < this.bitsetsUsed.size(); i++)
    {
      BitSet localBitSet = (BitSet)this.bitsetsUsed.elementAt(i);
      if (paramBitSet.equals(localBitSet))
        return i;
    }
    this.bitsetsUsed.appendElement(paramBitSet.clone());
    return this.bitsetsUsed.size() - 1;
  }

  protected void print(String paramString)
  {
    if (paramString != null)
    {
      printTabs();
      this.currentOutput.print(paramString);
    }
  }

  protected void printAction(String paramString)
  {
    if (paramString != null)
    {
      printTabs();
      _printAction(paramString);
    }
  }

  protected void println(String paramString)
  {
    if (paramString != null)
    {
      printTabs();
      this.currentOutput.println(paramString);
    }
  }

  protected void printTabs()
  {
    for (int i = 1; i <= this.tabs; i++)
      this.currentOutput.print("\t");
  }

  protected abstract String processActionForSpecialSymbols(String paramString, int paramInt, RuleBlock paramRuleBlock, ActionTransInfo paramActionTransInfo);

  public String getFOLLOWBitSet(String paramString, int paramInt)
  {
    GrammarSymbol localGrammarSymbol = this.grammar.getSymbol(paramString);
    if (!(localGrammarSymbol instanceof RuleSymbol))
      return null;
    RuleBlock localRuleBlock = ((RuleSymbol)localGrammarSymbol).getBlock();
    Lookahead localLookahead = this.grammar.theLLkAnalyzer.FOLLOW(paramInt, localRuleBlock.endNode);
    String str = getBitsetName(markBitsetForGen(localLookahead.fset));
    return str;
  }

  public String getFIRSTBitSet(String paramString, int paramInt)
  {
    GrammarSymbol localGrammarSymbol = this.grammar.getSymbol(paramString);
    if (!(localGrammarSymbol instanceof RuleSymbol))
      return null;
    RuleBlock localRuleBlock = ((RuleSymbol)localGrammarSymbol).getBlock();
    Lookahead localLookahead = this.grammar.theLLkAnalyzer.look(paramInt, localRuleBlock);
    String str = getBitsetName(markBitsetForGen(localLookahead.fset));
    return str;
  }

  protected String removeAssignmentFromDeclaration(String paramString)
  {
    if (paramString.indexOf('=') >= 0)
      paramString = paramString.substring(0, paramString.indexOf('=')).trim();
    return paramString;
  }

  private void reset()
  {
    this.tabs = 0;
    this.bitsetsUsed = new Vector();
    this.currentOutput = null;
    this.grammar = null;
    this.DEBUG_CODE_GENERATOR = false;
    this.makeSwitchThreshold = 2;
    this.bitsetTestThreshold = 4;
  }

  public static String reverseLexerRuleName(String paramString)
  {
    return paramString.substring(1, paramString.length());
  }

  public void setAnalyzer(LLkGrammarAnalyzer paramLLkGrammarAnalyzer)
  {
    this.analyzer = paramLLkGrammarAnalyzer;
  }

  public void setBehavior(DefineGrammarSymbols paramDefineGrammarSymbols)
  {
    this.behavior = paramDefineGrammarSymbols;
  }

  protected void setGrammar(Grammar paramGrammar)
  {
    reset();
    this.grammar = paramGrammar;
    Token localToken2;
    if (this.grammar.hasOption("codeGenMakeSwitchThreshold"))
      try
      {
        this.makeSwitchThreshold = this.grammar.getIntegerOption("codeGenMakeSwitchThreshold");
      }
      catch (NumberFormatException localNumberFormatException1)
      {
        localToken2 = this.grammar.getOption("codeGenMakeSwitchThreshold");
        this.antlrTool.error("option 'codeGenMakeSwitchThreshold' must be an integer", this.grammar.getClassName(), localToken2.getLine(), localToken2.getColumn());
      }
    if (this.grammar.hasOption("codeGenBitsetTestThreshold"))
      try
      {
        this.bitsetTestThreshold = this.grammar.getIntegerOption("codeGenBitsetTestThreshold");
      }
      catch (NumberFormatException localNumberFormatException2)
      {
        localToken2 = this.grammar.getOption("codeGenBitsetTestThreshold");
        this.antlrTool.error("option 'codeGenBitsetTestThreshold' must be an integer", this.grammar.getClassName(), localToken2.getLine(), localToken2.getColumn());
      }
    if (this.grammar.hasOption("codeGenDebug"))
    {
      Token localToken1 = this.grammar.getOption("codeGenDebug");
      if (localToken1.getText().equals("true"))
        this.DEBUG_CODE_GENERATOR = true;
      else if (localToken1.getText().equals("false"))
        this.DEBUG_CODE_GENERATOR = false;
      else
        this.antlrTool.error("option 'codeGenDebug' must be true or false", this.grammar.getClassName(), localToken1.getLine(), localToken1.getColumn());
    }
  }

  public void setTool(Tool paramTool)
  {
    this.antlrTool = paramTool;
  }
}

/* Location:           /home/mnovotny/projects/EMBEDDED_JBOSS_BETA3_COMMUNITY/embedded/output/lib/embedded-jboss/lib/thirdparty-all.jar
* Qualified Name:     antlr.CodeGenerator
* JD-Core Version:    0.6.0
*/
TOP

Related Classes of antlr.CodeGenerator

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.