public class CodeGenerator extends Object
Modifier and Type | Field and Description |
---|---|
ACyclicDFACodeGenerator |
acyclicDFAGenerator
I have factored out the generation of acyclic DFAs to separate class
|
protected org.antlr.stringtemplate.StringTemplateGroup |
baseTemplates
The basic output templates without AST or templates stuff; this will be
the templates loaded for the language such as Java.stg *and* the Dbg
stuff if turned on.
|
String |
classpathTemplateRootDirectoryName |
protected boolean |
debug
Generate debugging event method calls
|
static boolean |
EMIT_TEMPLATE_DELIMITERS |
boolean |
GENERATE_SWITCHES_WHEN_POSSIBLE |
Grammar |
grammar
Which grammar are we generating code for? Each generator
is attached to a specific grammar.
|
protected org.antlr.stringtemplate.StringTemplate |
headerFileST |
protected String |
language
What language are we generating?
|
protected int |
lineWidth |
static int |
MADSI_DEFAULT |
static int |
MAX_ACYCLIC_DFA_STATES_INLINE |
static int |
MAX_SWITCH_CASE_LABELS |
static int |
MIN_SWITCH_ALTS |
static int |
MSA_DEFAULT |
static int |
MSCL_DEFAULT
When generating SWITCH statements, some targets might need to limit
the size (based upon the number of case labels).
|
protected org.antlr.stringtemplate.StringTemplate |
outputFileST |
protected boolean |
profile
Track runtime parsing information about decisions etc...
|
protected org.antlr.stringtemplate.StringTemplate |
recognizerST |
Target |
target
The target specifies how to write out files and do other language
specific actions.
|
protected org.antlr.stringtemplate.StringTemplateGroup |
templates
Where are the templates this generator should use to generate code?
|
protected Tool |
tool
A reference to the ANTLR tool so we can learn about output directories
and such.
|
protected boolean |
trace
Create a Tracer object and make the recognizer invoke this.
|
protected int |
uniqueLabelNumber
Used to create unique labels
|
static String |
VOCAB_FILE_EXTENSION
I have factored out the generation of cyclic DFAs to separate class
|
protected static String |
vocabFilePattern |
Constructor and Description |
---|
CodeGenerator(Tool tool,
Grammar grammar,
String language) |
Modifier and Type | Method and Description |
---|---|
protected boolean |
canGenerateSwitch(DFAState s)
You can generate a switch rather than if-then-else for a DFA state
if there are no semantic predicates and the number of edge label
values is small enough; e.g., don't generate a switch for a state
containing an edge label such as 20..52330 (the resulting byte codes
would overflow the method 65k limit probably).
|
String |
createUniqueLabel(String name)
Create a label to track a token / rule reference's result.
|
void |
generateLocalFOLLOW(GrammarAST referencedElementNode,
String referencedElementName,
String enclosingRuleName,
int elementIndex)
Error recovery in ANTLR recognizers.
|
org.antlr.stringtemplate.StringTemplate |
generateSpecialState(DFAState s)
A special state is huge (too big for state tables) or has a predicated
edge.
|
protected org.antlr.stringtemplate.StringTemplate |
genLabelExpr(org.antlr.stringtemplate.StringTemplateGroup templates,
Transition edge,
int k)
Generate an expression for traversing an edge.
|
org.antlr.stringtemplate.StringTemplate |
genLookaheadDecision(org.antlr.stringtemplate.StringTemplate recognizerST,
DFA dfa)
Generate code that computes the predicted alt given a DFA.
|
org.antlr.stringtemplate.StringTemplate |
genRecognizer()
Given the grammar to which we are attached, walk the AST associated
with that grammar to create NFAs.
|
protected org.antlr.stringtemplate.StringTemplate |
genSemanticPredicateExpr(org.antlr.stringtemplate.StringTemplateGroup templates,
Transition edge) |
org.antlr.stringtemplate.StringTemplate |
genSetExpr(org.antlr.stringtemplate.StringTemplateGroup templates,
IntSet set,
int k,
boolean partOfDFA)
For intervals such as [3..3, 30..35], generate an expression that
tests the lookahead similar to LA(1)==3 || (LA(1)>=30&&LA(1)<=35)
|
protected void |
genTokenTypeConstants(org.antlr.stringtemplate.StringTemplate code)
Set attributes tokens and literals attributes in the incoming
code template.
|
protected void |
genTokenTypeNames(org.antlr.stringtemplate.StringTemplate code)
Generate a token names table that maps token type to a printable
name: either the label like INT or the literal like "begin".
|
protected org.antlr.stringtemplate.StringTemplate |
genTokenVocabOutput()
Generate a token vocab file with all the token names/types.
|
org.antlr.stringtemplate.StringTemplateGroup |
getBaseTemplates() |
static List<String> |
getListOfArgumentsFromAction(String actionText,
int separatorChar) |
static int |
getListOfArgumentsFromAction(String actionText,
int start,
int targetChar,
int separatorChar,
List<String> args)
Given an arg action like
[x, (*a).foo(21,33), 3.2+1, '\n',
"a,oo\nick", {bl, "fdkj"eck}, ["cat\n,", x, 43]]
convert to a list of arguments.
|
String |
getRecognizerFileName(String name,
int type)
Generate TParser.java and TLexer.java from T.g if combined, else
just use T.java as output regardless of type.
|
org.antlr.stringtemplate.StringTemplate |
getRecognizerST() |
org.antlr.stringtemplate.StringTemplateGroup |
getTemplates() |
String |
getTokenTypeAsTargetLabel(int ttype)
Get a meaningful name for a token type useful during code generation.
|
String |
getVocabFileName()
What is the name of the vocab file generated for this grammar?
Returns null if no .tokens file should be generated.
|
void |
issueInvalidAttributeError(String x,
Rule enclosingRule,
antlr.Token actionToken,
int outerAltNum) |
void |
issueInvalidAttributeError(String x,
String y,
Rule enclosingRule,
antlr.Token actionToken,
int outerAltNum) |
void |
issueInvalidScopeError(String x,
String y,
Rule enclosingRule,
antlr.Token actionToken,
int outerAltNum) |
protected void |
loadLanguageTarget(String language) |
void |
loadTemplates(String language)
load the main language.stg template group file
|
void |
setDebug(boolean debug) |
void |
setProfile(boolean profile) |
void |
setTrace(boolean trace) |
List |
translateAction(String ruleName,
GrammarAST actionTree) |
protected void |
translateActionAttributeReferences(Map actions)
Actions may reference $x::y attributes, call translateAction on
each action and replace that action in the Map.
|
void |
translateActionAttributeReferencesForSingleScope(Rule r,
Map scopeActions)
Use for translating rule @init{...} actions that have no scope
|
List<org.antlr.stringtemplate.StringTemplate> |
translateArgAction(String ruleName,
GrammarAST actionTree)
Translate an action like [3,"foo",a[3]] and return a List of the
translated actions.
|
org.antlr.stringtemplate.StringTemplate |
translateTemplateConstructor(String ruleName,
int outerAltNum,
antlr.Token actionToken,
String templateActionText)
Given a template constructor action like %foo(a={...}) in
an action, translate it to the appropriate template constructor
from the templateLib.
|
protected void |
verifyActionScopesOkForTarget(Map actions)
Some targets will have some extra scopes like C++ may have
'@headerfile:name {action}' or something.
|
void |
write(org.antlr.stringtemplate.StringTemplate code,
String fileName) |
public static final int MSCL_DEFAULT
public static int MAX_SWITCH_CASE_LABELS
public static final int MSA_DEFAULT
public static int MIN_SWITCH_ALTS
public boolean GENERATE_SWITCHES_WHEN_POSSIBLE
public static boolean EMIT_TEMPLATE_DELIMITERS
public static final int MADSI_DEFAULT
public static int MAX_ACYCLIC_DFA_STATES_INLINE
public String classpathTemplateRootDirectoryName
public Grammar grammar
protected String language
public Target target
protected org.antlr.stringtemplate.StringTemplateGroup templates
protected org.antlr.stringtemplate.StringTemplateGroup baseTemplates
protected org.antlr.stringtemplate.StringTemplate recognizerST
protected org.antlr.stringtemplate.StringTemplate outputFileST
protected org.antlr.stringtemplate.StringTemplate headerFileST
protected int uniqueLabelNumber
protected Tool tool
protected boolean debug
protected boolean trace
protected boolean profile
protected int lineWidth
public ACyclicDFACodeGenerator acyclicDFAGenerator
public static final String VOCAB_FILE_EXTENSION
protected static final String vocabFilePattern
protected void loadLanguageTarget(String language)
public void loadTemplates(String language)
public org.antlr.stringtemplate.StringTemplate genRecognizer()
protected void verifyActionScopesOkForTarget(Map actions)
protected void translateActionAttributeReferences(Map actions)
public void translateActionAttributeReferencesForSingleScope(Rule r, Map scopeActions)
public void generateLocalFOLLOW(GrammarAST referencedElementNode, String referencedElementName, String enclosingRuleName, int elementIndex)
public org.antlr.stringtemplate.StringTemplate genLookaheadDecision(org.antlr.stringtemplate.StringTemplate recognizerST, DFA dfa)
public org.antlr.stringtemplate.StringTemplate generateSpecialState(DFAState s)
protected org.antlr.stringtemplate.StringTemplate genLabelExpr(org.antlr.stringtemplate.StringTemplateGroup templates, Transition edge, int k)
protected org.antlr.stringtemplate.StringTemplate genSemanticPredicateExpr(org.antlr.stringtemplate.StringTemplateGroup templates, Transition edge)
public org.antlr.stringtemplate.StringTemplate genSetExpr(org.antlr.stringtemplate.StringTemplateGroup templates, IntSet set, int k, boolean partOfDFA)
protected void genTokenTypeConstants(org.antlr.stringtemplate.StringTemplate code)
protected void genTokenTypeNames(org.antlr.stringtemplate.StringTemplate code)
public String getTokenTypeAsTargetLabel(int ttype)
protected org.antlr.stringtemplate.StringTemplate genTokenVocabOutput()
public List translateAction(String ruleName, GrammarAST actionTree)
public List<org.antlr.stringtemplate.StringTemplate> translateArgAction(String ruleName, GrammarAST actionTree)
public static List<String> getListOfArgumentsFromAction(String actionText, int separatorChar)
public static int getListOfArgumentsFromAction(String actionText, int start, int targetChar, int separatorChar, List<String> args)
public org.antlr.stringtemplate.StringTemplate translateTemplateConstructor(String ruleName, int outerAltNum, antlr.Token actionToken, String templateActionText)
public void issueInvalidScopeError(String x, String y, Rule enclosingRule, antlr.Token actionToken, int outerAltNum)
public void issueInvalidAttributeError(String x, String y, Rule enclosingRule, antlr.Token actionToken, int outerAltNum)
public void issueInvalidAttributeError(String x, Rule enclosingRule, antlr.Token actionToken, int outerAltNum)
public org.antlr.stringtemplate.StringTemplateGroup getTemplates()
public org.antlr.stringtemplate.StringTemplateGroup getBaseTemplates()
public void setDebug(boolean debug)
public void setTrace(boolean trace)
public void setProfile(boolean profile)
public org.antlr.stringtemplate.StringTemplate getRecognizerST()
public String getRecognizerFileName(String name, int type)
public String getVocabFileName()
public void write(org.antlr.stringtemplate.StringTemplate code, String fileName) throws IOException
IOException
protected boolean canGenerateSwitch(DFAState s)
public String createUniqueLabel(String name)
Copyright © 2020. All rights reserved.