org.antlr.codegen
Class CTarget
java.lang.Object
org.antlr.codegen.Target
org.antlr.codegen.CTarget
public class CTarget
- extends Target
Method Summary |
protected org.antlr.stringtemplate.StringTemplate |
chooseWhereCyclicDFAsGo(Tool tool,
CodeGenerator generator,
Grammar grammar,
org.antlr.stringtemplate.StringTemplate recognizerST,
org.antlr.stringtemplate.StringTemplate cyclicDFAST)
|
protected void |
genRecognizerFile(Tool tool,
CodeGenerator generator,
Grammar grammar,
org.antlr.stringtemplate.StringTemplate outputFileST)
|
protected void |
genRecognizerHeaderFile(Tool tool,
CodeGenerator generator,
Grammar grammar,
org.antlr.stringtemplate.StringTemplate headerFileST,
java.lang.String extName)
|
java.lang.String |
getTargetCharLiteralFromANTLRCharLiteral(CodeGenerator generator,
java.lang.String literal)
Convert from an ANTLR char literal found in a grammar file to
an equivalent char literal in the target language. |
java.lang.String |
getTargetStringLiteralFromANTLRStringLiteral(CodeGenerator generator,
java.lang.String literal)
Convert from an ANTLR string literal found in a grammar file to
an equivalent string literal in the C target. |
boolean |
isValidActionScope(int grammarType,
java.lang.String scope)
Is scope in @scope::name {action} valid for this kind of grammar?
Targets like C++ may want to allow new scopes like headerfile or
some such. |
protected void |
performGrammarAnalysis(CodeGenerator generator,
Grammar grammar)
Overrides the standard grammar analysis so we can prepare the analyser
a little differently from the other targets. |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
CTarget
public CTarget()
genRecognizerFile
protected void genRecognizerFile(Tool tool,
CodeGenerator generator,
Grammar grammar,
org.antlr.stringtemplate.StringTemplate outputFileST)
throws java.io.IOException
- Overrides:
genRecognizerFile
in class Target
- Throws:
java.io.IOException
genRecognizerHeaderFile
protected void genRecognizerHeaderFile(Tool tool,
CodeGenerator generator,
Grammar grammar,
org.antlr.stringtemplate.StringTemplate headerFileST,
java.lang.String extName)
throws java.io.IOException
- Overrides:
genRecognizerHeaderFile
in class Target
- Throws:
java.io.IOException
chooseWhereCyclicDFAsGo
protected org.antlr.stringtemplate.StringTemplate chooseWhereCyclicDFAsGo(Tool tool,
CodeGenerator generator,
Grammar grammar,
org.antlr.stringtemplate.StringTemplate recognizerST,
org.antlr.stringtemplate.StringTemplate cyclicDFAST)
isValidActionScope
public boolean isValidActionScope(int grammarType,
java.lang.String scope)
- Is scope in @scope::name {action} valid for this kind of grammar?
Targets like C++ may want to allow new scopes like headerfile or
some such. The action names themselves are not policed at the
moment so targets can add template actions w/o having to recompile
ANTLR.
- Overrides:
isValidActionScope
in class Target
getTargetCharLiteralFromANTLRCharLiteral
public java.lang.String getTargetCharLiteralFromANTLRCharLiteral(CodeGenerator generator,
java.lang.String literal)
- Description copied from class:
Target
- Convert from an ANTLR char literal found in a grammar file to
an equivalent char literal in the target language. For most
languages, this means leaving 'x' as 'x'. Actually, we need
to escape '
' so that it doesn't get converted to \n by
the compiler. Convert the literal to the char value and then
to an appropriate target char literal.
Expect single quotes around the incoming literal.
- Overrides:
getTargetCharLiteralFromANTLRCharLiteral
in class Target
getTargetStringLiteralFromANTLRStringLiteral
public java.lang.String getTargetStringLiteralFromANTLRStringLiteral(CodeGenerator generator,
java.lang.String literal)
- Convert from an ANTLR string literal found in a grammar file to
an equivalent string literal in the C target.
Because we must support Unicode character sets and have chosen
to have the lexer match UTF32 characters, then we must encode
string matches to use 32 bit character arrays. Here then we
must produce the C array and cater for the case where the
lexer has been encoded with a string such as 'xyz\n',
- Overrides:
getTargetStringLiteralFromANTLRStringLiteral
in class Target
performGrammarAnalysis
protected void performGrammarAnalysis(CodeGenerator generator,
Grammar grammar)
- Overrides the standard grammar analysis so we can prepare the analyser
a little differently from the other targets.
In particular we want to influence the way the code generator makes assumptions about
switchs vs ifs, vs table driven DFAs. In general, C code should be generated that
has the minimum use of tables, and tha meximum use of large switch statements. This
allows the optimizers to generate very efficient code, it can reduce object code size
by about 30% and give about a 20% performance improvement over not doing this. Hence,
for the C target only, we change the defaults here, but only if they are still set to the
defaults.
- Overrides:
performGrammarAnalysis
in class Target
- Parameters:
generator
- An instance of the generic code generator class.grammar
- The grammar that we are currently analyzing
Copyright © 2011. All Rights Reserved.