|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object | +--antlr.CodeGenerator
A generic ANTLR code generator. All code generators Derive from this class.
A CodeGenerator knows about a Grammar data structure and a grammar analyzer. The Grammar is walked to generate the appropriate code for both a parser and lexer (if present). This interface may change slightly so that the lexer is itself living inside of a Grammar object (in which case, this class generates only one recognizer). The main method to call is gen(), which initiates all code gen.
The interaction of the code generator with the analyzer is simple: each subrule block calls deterministic() before generating code for the block. Method deterministic() sets lookahead caches in each Alternative object. Technically, a code generator doesn't need the grammar analyzer if all lookahead analysis is done at runtime, but this would result in a slower parser.
This class provides a set of support utilities to handle argument list parsing and so on.
JavaCodeGenerator
,
DiagnosticCodeGenerator
,
LLkAnalyzer
,
Grammar
,
AlternativeElement
,
Lookahead
Field Summary | |
protected LLkGrammarAnalyzer |
analyzer
The LLk analyzer |
protected DefineGrammarSymbols |
behavior
The grammar behavior |
protected Vector |
bitsetsUsed
List of all bitsets that must be dumped. |
protected int |
bitsetTestThreshold
This is a hint for the language-specific code generator. |
protected CharFormatter |
charFormatter
Object used to format characters in the target language. |
protected java.io.PrintWriter |
currentOutput
Current output Stream |
protected boolean |
DEBUG_CODE_GENERATOR
Use option "codeGenDebug" to generate debugging output |
protected static int |
DEFAULT_BITSET_TEST_THRESHOLD
|
protected static int |
DEFAULT_MAKE_SWITCH_THRESHOLD
Default values for code-generation thresholds |
protected Grammar |
grammar
The grammar for which we generate code |
protected int |
makeSwitchThreshold
This is a hint for the language-specific code generator. |
private static boolean |
OLD_ACTION_TRANSLATOR
|
protected int |
tabs
Current tab indentation for code output |
static java.lang.String |
TokenTypesFileExt
|
static java.lang.String |
TokenTypesFileSuffix
|
protected Tool |
tool
The antlr Tool |
Constructor Summary | |
CodeGenerator()
Construct code generator base class |
Method Summary | |
protected void |
_print(java.lang.String s)
Output a String to the currentOutput stream. |
protected void |
_printAction(java.lang.String s)
Print an action without leading tabs, attempting to preserve the current indentation level for multi-line actions Ignored if string is null. |
protected void |
_println(java.lang.String s)
Output a String followed by newline, to the currentOutput stream. |
static boolean |
elementsAreRange(int[] elems)
Test if a set element array represents a contiguous range. |
protected java.lang.String |
extractIdOfAction(java.lang.String s,
int line)
Get the identifier portion of an argument-action. |
protected java.lang.String |
extractIdOfAction(Token t)
Get the identifier portion of an argument-action token. |
protected java.lang.String |
extractTypeOfAction(java.lang.String s,
int line)
Get the type portion of an argument-action. |
protected java.lang.String |
extractTypeOfAction(Token t)
Get the type string out of an argument-action token. |
abstract void |
gen()
Generate the code for all grammars |
abstract void |
gen(ActionElement action)
Generate code for the given grammar element. |
abstract void |
gen(AlternativeBlock blk)
Generate code for the given grammar element. |
abstract void |
gen(BlockEndElement end)
Generate code for the given grammar element. |
abstract void |
gen(CharLiteralElement atom)
Generate code for the given grammar element. |
abstract void |
gen(CharRangeElement r)
Generate code for the given grammar element. |
abstract void |
gen(LexerGrammar g)
Generate the code for a parser |
abstract void |
gen(OneOrMoreBlock blk)
Generate code for the given grammar element. |
abstract void |
gen(ParserGrammar g)
Generate the code for a parser |
abstract void |
gen(RuleRefElement rr)
Generate code for the given grammar element. |
abstract void |
gen(StringLiteralElement atom)
Generate code for the given grammar element. |
abstract void |
gen(TokenRangeElement r)
Generate code for the given grammar element. |
abstract void |
gen(TokenRefElement atom)
Generate code for the given grammar element. |
abstract void |
gen(TreeElement t)
Generate code for the given grammar element. |
abstract void |
gen(TreeWalkerGrammar g)
Generate the code for a parser |
abstract void |
gen(WildcardElement wc)
Generate code for the given grammar element. |
abstract void |
gen(ZeroOrMoreBlock blk)
Generate code for the given grammar element. |
protected void |
genTokenInterchange(TokenManager tm)
Generate the token types as a text file for persistence across shared lexer/parser |
abstract java.lang.String |
getASTCreateString(GrammarAtom atom,
java.lang.String str)
Get a string for an expression to generate creating of an AST node |
abstract java.lang.String |
getASTCreateString(Vector v)
Get a string for an expression to generate creation of an AST subtree. |
protected java.lang.String |
getBitsetName(int index)
Given the index of a bitset in the bitset list, generate a unique name. |
static java.lang.String |
lexerRuleName(java.lang.String id)
|
abstract java.lang.String |
mapTreeId(java.lang.String id,
ActionTransInfo tInfo)
Map an identifier to it's corresponding tree-node variable. |
protected int |
markBitsetForGen(BitSet p)
Add a bitset to the list of bitsets to be generated. |
protected void |
print(java.lang.String s)
Output tab indent followed by a String, to the currentOutput stream. |
protected void |
printAction(java.lang.String s)
Print an action with leading tabs, attempting to preserve the current indentation level for multi-line actions Ignored if string is null. |
protected void |
println(java.lang.String s)
Output tab indent followed by a String followed by newline, to the currentOutput stream. |
protected void |
printTabs()
Output the current tab indentation. |
protected java.lang.String |
processActionForTreeSpecifiers(java.lang.String actionStr,
int line,
RuleBlock currentRule,
ActionTransInfo tInfo)
Lexically process tree-specifiers in the action. |
java.lang.String |
processStringForASTConstructor(java.lang.String str)
Process a string for an simple expression for use in xx/action.g it is used to cast simple tokens/references to the right type for the generated language. |
protected java.lang.String |
removeAssignmentFromDeclaration(java.lang.String d)
Remove the assignment portion of a declaration, if any. |
private void |
reset()
Set all fields back like one just created |
static java.lang.String |
reverseLexerRuleName(java.lang.String id)
|
void |
setAnalyzer(LLkGrammarAnalyzer analyzer_)
|
void |
setBehavior(DefineGrammarSymbols behavior_)
|
protected void |
setGrammar(Grammar g)
Set a grammar for the code generator to use |
void |
setTool(Tool tool_)
|
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
protected int tabs
protected transient java.io.PrintWriter currentOutput
protected Grammar grammar
protected Vector bitsetsUsed
protected Tool tool
protected DefineGrammarSymbols behavior
protected LLkGrammarAnalyzer analyzer
protected CharFormatter charFormatter
protected boolean DEBUG_CODE_GENERATOR
protected static final int DEFAULT_MAKE_SWITCH_THRESHOLD
protected static final int DEFAULT_BITSET_TEST_THRESHOLD
protected int makeSwitchThreshold
protected int bitsetTestThreshold
private static boolean OLD_ACTION_TRANSLATOR
public static java.lang.String TokenTypesFileSuffix
public static java.lang.String TokenTypesFileExt
Constructor Detail |
public CodeGenerator()
Method Detail |
protected void _print(java.lang.String s)
s
- The string to outputprotected void _printAction(java.lang.String s)
s
- The action string to outputprotected void _println(java.lang.String s)
s
- The string to outputpublic static boolean elementsAreRange(int[] elems)
elems
- The array of elements representing the set, usually from BitSet.toArray().
protected java.lang.String extractIdOfAction(Token t)
t
- The action token
protected java.lang.String extractIdOfAction(java.lang.String s, int line)
s
- The action textline
- Line used for error reporting.
protected java.lang.String extractTypeOfAction(Token t)
t
- The action token
protected java.lang.String extractTypeOfAction(java.lang.String s, int line)
s
- The action textline
- Line used for error reporting.
public abstract void gen()
public abstract void gen(ActionElement action)
action
- The {...} action to generatepublic abstract void gen(AlternativeBlock blk)
blk
- The "x|y|z|..." block to generatepublic abstract void gen(BlockEndElement end)
end
- The block-end element to generate. Block-end
elements are synthesized by the grammar parser to represent
the end of a block.public abstract void gen(CharLiteralElement atom)
atom
- The character literal reference to generatepublic abstract void gen(CharRangeElement r)
r
- The character-range reference to generatepublic abstract void gen(LexerGrammar g) throws java.io.IOException
java.io.IOException
public abstract void gen(OneOrMoreBlock blk)
blk
- The (...)+ block to generatepublic abstract void gen(ParserGrammar g) throws java.io.IOException
java.io.IOException
public abstract void gen(RuleRefElement rr)
rr
- The rule-reference to generatepublic abstract void gen(StringLiteralElement atom)
atom
- The string-literal reference to generatepublic abstract void gen(TokenRangeElement r)
r
- The token-range reference to generatepublic abstract void gen(TokenRefElement atom)
atom
- The token-reference to generatepublic abstract void gen(TreeElement t)
public abstract void gen(TreeWalkerGrammar g) throws java.io.IOException
java.io.IOException
public abstract void gen(WildcardElement wc)
wc
- The wildcard element to generatepublic abstract void gen(ZeroOrMoreBlock blk)
blk
- The (...)* block to generateprotected void genTokenInterchange(TokenManager tm) throws java.io.IOException
java.io.IOException
public java.lang.String processStringForASTConstructor(java.lang.String str)
str
- A String.public abstract java.lang.String getASTCreateString(Vector v)
v
- A Vector of String, where each element is an expression in the target language yielding an AST node.public abstract java.lang.String getASTCreateString(GrammarAtom atom, java.lang.String str)
str
- The text of the arguments to the AST constructionprotected java.lang.String getBitsetName(int index)
index
- The index of the bitset in the bitset list.public static java.lang.String lexerRuleName(java.lang.String id)
public abstract java.lang.String mapTreeId(java.lang.String id, ActionTransInfo tInfo)
id
- The identifier name to map
protected int markBitsetForGen(BitSet p)
p
- Bit set to mark for code generation
protected void print(java.lang.String s)
s
- The string to output.protected void printAction(java.lang.String s)
s
- The action string to outputprotected void println(java.lang.String s)
s
- The string to outputprotected void printTabs()
protected java.lang.String processActionForTreeSpecifiers(java.lang.String actionStr, int line, RuleBlock currentRule, ActionTransInfo tInfo)
protected java.lang.String removeAssignmentFromDeclaration(java.lang.String d)
d
- the declaration
private void reset()
public static java.lang.String reverseLexerRuleName(java.lang.String id)
public void setAnalyzer(LLkGrammarAnalyzer analyzer_)
public void setBehavior(DefineGrammarSymbols behavior_)
protected void setGrammar(Grammar g)
public void setTool(Tool tool_)
|
|||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |