Package antlr

Class DiagnosticCodeGenerator

java.lang.Object
antlr.CodeGenerator
antlr.DiagnosticCodeGenerator

public class DiagnosticCodeGenerator extends CodeGenerator
Generate MyParser.txt, MyLexer.txt and MyParserTokenTypes.txt
  • Field Details

    • syntacticPredLevel

      protected int syntacticPredLevel
      non-zero if inside syntactic predicate generation
    • doingLexRules

      protected boolean doingLexRules
      true during lexer generation, false during parser generation
  • Constructor Details

    • DiagnosticCodeGenerator

      public DiagnosticCodeGenerator()
      Create a Diagnostic code-generator using the given Grammar The caller must still call setTool, setBehavior, and setAnalyzer before generating code.
  • Method Details

    • gen

      public void gen()
      Generate the parser, lexer, and token types documentation
      Specified by:
      gen in class CodeGenerator
    • gen

      public void gen(ActionElement action)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      action - The {...} action to generate
      blk - The {...} action to generate
    • gen

      public void gen(AlternativeBlock blk)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      blk - The "x|y|z|..." block to generate
    • gen

      public void gen(BlockEndElement end)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      end - The block-end element to generate. Block-end elements are synthesized by the grammar parser to represent the end of a block.
      blk - The block-end element to generate. Block-end elements are synthesized by the grammar parser to represent the end of a block.
    • gen

      public void gen(CharLiteralElement atom)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      atom - The character literal reference to generate
      blk - The character literal reference to generate
    • gen

      public void gen(CharRangeElement r)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      r - The character-range reference to generate
      blk - The character-range reference to generate
    • gen

      public void gen(LexerGrammar g) throws IOException
      Generate the lexer TXT file
      Specified by:
      gen in class CodeGenerator
      Throws:
      IOException
    • gen

      public void gen(OneOrMoreBlock blk)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      blk - The (...)+ block to generate
    • gen

      public void gen(ParserGrammar g) throws IOException
      Generate the parser TXT file
      Specified by:
      gen in class CodeGenerator
      Throws:
      IOException
    • gen

      public void gen(RuleRefElement rr)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      rr - The rule-reference to generate
      blk - The rule-reference to generate
    • gen

      public void gen(StringLiteralElement atom)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      atom - The string-literal reference to generate
      blk - The string-literal reference to generate
    • gen

      public void gen(TokenRangeElement r)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      r - The token-range reference to generate
      blk - The token-range reference to generate
    • gen

      public void gen(TokenRefElement atom)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      atom - The token-reference to generate
      blk - The token-reference to generate
    • gen

      public void gen(TreeElement t)
      Description copied from class: CodeGenerator
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
    • gen

      public void gen(TreeWalkerGrammar g) throws IOException
      Generate the tree-walker TXT file
      Specified by:
      gen in class CodeGenerator
      Throws:
      IOException
    • gen

      public void gen(WildcardElement wc)
      Generate a wildcard element
      Specified by:
      gen in class CodeGenerator
      Parameters:
      wc - The wildcard element to generate
    • gen

      public void gen(ZeroOrMoreBlock blk)
      Generate code for the given grammar element.
      Specified by:
      gen in class CodeGenerator
      Parameters:
      blk - The (...)* block to generate
    • genAlt

      protected void genAlt(Alternative alt)
    • genBlockPreamble

      protected void genBlockPreamble(AlternativeBlock blk)
      Generate the header for a block, which may be a RuleBlock or a plain AlternativeBLock. This generates any variable declarations, init-actions, and syntactic-predicate-testing variables.
    • genCommonBlock

      public void genCommonBlock(AlternativeBlock blk)
      Generate common code for a block of alternatives; return a postscript that needs to be generated at the end of the block. Other routines may append else-clauses and such for error checking before the postfix is generated.
    • genFollowSetForRuleBlock

      public void genFollowSetForRuleBlock(RuleBlock blk)
      Generate a textual representation of the follow set for a block.
      Parameters:
      blk - The rule block of interest
    • genHeader

      protected void genHeader()
      Generate a header that is common to all TXT files
    • genLookaheadSetForAlt

      protected void genLookaheadSetForAlt(Alternative alt)
      Generate the lookahead set for an alternate.
    • genLookaheadSetForBlock

      public void genLookaheadSetForBlock(AlternativeBlock blk)
      Generate a textual representation of the lookahead set for a block.
      Parameters:
      blk - The block of interest
    • genNextToken

      public void genNextToken()
      Generate the nextToken rule. nextToken is a synthetic lexer rule that is the implicit OR of all user-defined lexer rules.
    • genRule

      public void genRule(RuleSymbol s)
      Generate code for a named rule block
      Parameters:
      s - The RuleSymbol describing the rule to generate
    • genSynPred

      protected void genSynPred(SynPredBlock blk)
      Generate the syntactic predicate. This basically generates the alternative block, buts tracks if we are inside a synPred
      Parameters:
      blk - The syntactic predicate block
    • genTokenTypes

      protected void genTokenTypes(TokenManager tm) throws IOException
      Generate the token types TXT file
      Throws:
      IOException
    • getASTCreateString

      public String getASTCreateString(Vector v)
      Get a string for an expression to generate creation of an AST subtree.
      Specified by:
      getASTCreateString in class CodeGenerator
      Parameters:
      v - A Vector of String, where each element is an expression in the target language yielding an AST node.
    • getASTCreateString

      public String getASTCreateString(GrammarAtom atom, String str)
      Get a string for an expression to generate creating of an AST node
      Specified by:
      getASTCreateString in class CodeGenerator
      Parameters:
      str - The arguments to the AST constructor
    • processActionForSpecialSymbols

      protected String processActionForSpecialSymbols(String actionStr, int line, RuleBlock currentRule, ActionTransInfo tInfo)
      Description copied from class: CodeGenerator
      Lexically process $ and # references within the action. This will replace #id and #(...) with the appropriate function calls and/or variables etc...
      Specified by:
      processActionForSpecialSymbols in class CodeGenerator
    • mapTreeId

      public String mapTreeId(String id, ActionTransInfo tInfo)
      Map an identifier to it's corresponding tree-node variable. This is context-sensitive, depending on the rule and alternative being generated
      Specified by:
      mapTreeId in class CodeGenerator
      Parameters:
      id - The identifier name to map
      forInput - true if the input tree node variable is to be returned, otherwise the output variable is returned.
      Returns:
      The mapped id (which may be the same as the input), or null if the mapping is invalid due to duplicates
    • printSet

      public void printSet(int depth, int k, Lookahead lookahead)
      Format a lookahead or follow set.
      Parameters:
      depth - The depth of the entire lookahead/follow
      k - The lookahead level to print
      lookahead - The lookahead/follow set to print