Package org.antlr.v4.codegen
Class Target
java.lang.Object
org.antlr.v4.codegen.Target
- Direct Known Subclasses:
CppTarget
,CSharpTarget
,DartTarget
,GoTarget
,JavaScriptTarget
,JavaTarget
,PHPTarget
,Python3Target
,SwiftTarget
,TypeScriptTarget
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected static void
addEscapedChar
(HashMap<Character, String> map, char key) protected static void
addEscapedChar
(HashMap<Character, String> map, char key, char representation) protected void
appendUnicodeEscapedCodePoint
(int codePoint, StringBuilder sb) Escape the Unicode code point appropriately for this language and append the escaped value tosb
.private void
appendUnicodeEscapedCodePoint
(int codePoint, StringBuilder sb, boolean escape) encodeInt16AsCharEscape
(int v) Assume 16-bit charprotected String
escapeChar
(int v) escapeIfNeeded
(String identifier) protected String
escapeWord
(String word) protected void
getBaseListenerFileName
(boolean header) A given grammar T, return a blank listener implementation such as TBaseListener.java, if we're using the Java target.getBaseVisitorFileName
(boolean header) A given grammar T, return a blank listener implementation such as TBaseListener.java, if we're using the Java target.getElementListName
(String name) getElementName
(String name) getImplicitRuleLabel
(String ruleName) getImplicitTokenLabel
(String tokenName) int
How many bits should be used to do inline token type tests? Java assumes a 64-bit word for bitsets.getListenerFileName
(boolean header) A given grammar T, return the listener name such as TListener.java, if we're using the Java target.getListLabel
(String label) getLoopCounter
(GrammarAST ast) getLoopLabel
(GrammarAST ast) getRecognizerFileName
(boolean header) Generate TParser.java and TLexer.java from T.g4 if combined, else just use T.java as output regardless of type.getRuleFunctionContextStructName
(RuleFunction function) If we know which actual function, we can provide the actual ctx type.int
Gets the maximum number of 16-bit unsigned integers that can be encoded in a single segment (a declaration in target language) of the serialized ATN.For pure strings of Unicode char, how can we display it in the target language as a literal.getTargetStringLiteralFromANTLRStringLiteral
(CodeGenerator generator, String literal, boolean addQuotes) getTargetStringLiteralFromANTLRStringLiteral
(CodeGenerator generator, String literal, boolean addQuotes, boolean escapeSpecial) Convert from an ANTLR string literal found in a grammar file to an equivalent string literal in the target language.getTargetStringLiteralFromString
(String s, boolean quoted) Given a random string of Java unicode chars, return a new string with optionally appropriate quote characters for target language and possibly with some escaped characters.org.stringtemplate.v4.STGroup
getTokenTypeAsTargetLabel
(Grammar g, int ttype) Get a meaningful name for a token type useful during code generation.String[]
getTokenTypesAsTargetLabels
(Grammar g, int[] ttypes) ANTLR tool should check output templates / target are compatible with tool code generation.getVisitorFileName
(boolean header) A given grammar T, return the visitor name such as TVisitor.java, if we're using the Java target.boolean
boolean
protected org.stringtemplate.v4.STGroup
private org.stringtemplate.v4.STGroup
loadTemplatesHelper
(boolean reportErrorIfFail) boolean
protected boolean
shouldUseUnicodeEscapeForCodePointInDoubleQuotedString
(int codePoint) boolean
boolean
protected boolean
Deprecated.boolean
boolean
-
Field Details
-
languageTemplates
-
gen
-
defaultCharValueEscape
-
-
Constructor Details
-
Target
-
-
Method Details
-
getTargetCharValueEscape
For pure strings of Unicode char, how can we display it in the target language as a literal. Useful for dumping predicates and such that may refer to chars that need to be escaped when represented as strings. Also, templates need to be escaped so that the target language can hold them as a string. Each target can have a different set in memory at same time. -
addEscapedChar
-
addEscapedChar
-
getLanguage
-
getCodeGenerator
-
getVersion
ANTLR tool should check output templates / target are compatible with tool code generation. For now, a simple string match used on x.y of x.y.z scheme. We use a method to avoid mismatches between a template called VERSION. This value is checked against Tool.VERSION during load of templates. This additional method forces all targets 4.3 and beyond to add this method.- Since:
- 4.3
-
getTemplates
public org.stringtemplate.v4.STGroup getTemplates() -
getReservedWords
-
escapeIfNeeded
-
escapeWord
-
genFile
-
getTokenTypeAsTargetLabel
Get a meaningful name for a token type useful during code generation. Literals without associated names are converted to the string equivalent of their integer values. Used to generate x==ID and x==34 type comparisons etc... Essentially we are looking for the most obvious way to refer to a token type in the generated code. -
getTokenTypesAsTargetLabels
-
getTargetStringLiteralFromString
Given a random string of Java unicode chars, return a new string with optionally appropriate quote characters for target language and possibly with some escaped characters. For example, if the incoming string has actual newline characters, the output of this method would convert them to the two char sequence \n for Java, C, C++, ... The new string has double-quotes around it as well. Example String in memory: a"[newlinechar]b'c[carriagereturnchar]d[tab]e\f would be converted to the valid Java s: "a\"\nb'c\rd\te\\f" or a\"\nb'c\rd\te\\f depending on the quoted arg. -
appendUnicodeEscapedCodePoint
-
appendUnicodeEscapedCodePoint
Escape the Unicode code point appropriately for this language and append the escaped value tosb
. It exists for flexibility and backward compatibility with external targets The static methodUnicodeEscapes.appendEscapedCodePoint(StringBuilder, int, String)
can be used as well if default escaping method (Java) is used or language is officially supported -
getTargetStringLiteralFromString
-
getTargetStringLiteralFromANTLRStringLiteral
public String getTargetStringLiteralFromANTLRStringLiteral(CodeGenerator generator, String literal, boolean addQuotes) -
getTargetStringLiteralFromANTLRStringLiteral
public String getTargetStringLiteralFromANTLRStringLiteral(CodeGenerator generator, String literal, boolean addQuotes, boolean escapeSpecial) Convert from an ANTLR string literal found in a grammar file to an equivalent string literal in the target language.
For Java, this is the translation
'a\n"'
→"a\n\""
. Expect single quotes around the incoming literal. Just flip the quotes and replace double quotes with\"
.Note that we have decided to allow people to use '\"' without penalty, so we must build the target string in a loop as
String.replace(char, char)
cannot handle both\"
and"
without a lot of messing around. -
shouldUseUnicodeEscapeForCodePointInDoubleQuotedString
protected boolean shouldUseUnicodeEscapeForCodePointInDoubleQuotedString(int codePoint) -
encodeInt16AsCharEscape
Assume 16-bit char -
escapeChar
-
getLoopLabel
-
getLoopCounter
-
getListLabel
-
getRuleFunctionContextStructName
-
getAltLabelContextStructName
-
getRuleFunctionContextStructName
If we know which actual function, we can provide the actual ctx type. This will contain implicit labels etc... From outside, though, we see only ParserRuleContext unless there are externally visible stuff like args, locals, explicit labels, etc... -
getImplicitTokenLabel
-
getImplicitSetLabel
-
getImplicitRuleLabel
-
getElementListName
-
getElementName
-
getRecognizerFileName
Generate TParser.java and TLexer.java from T.g4 if combined, else just use T.java as output regardless of type. -
getListenerFileName
A given grammar T, return the listener name such as TListener.java, if we're using the Java target. -
getVisitorFileName
A given grammar T, return the visitor name such as TVisitor.java, if we're using the Java target. -
getBaseListenerFileName
A given grammar T, return a blank listener implementation such as TBaseListener.java, if we're using the Java target. -
getBaseVisitorFileName
A given grammar T, return a blank listener implementation such as TBaseListener.java, if we're using the Java target. -
getSerializedATNSegmentLimit
public int getSerializedATNSegmentLimit()Gets the maximum number of 16-bit unsigned integers that can be encoded in a single segment (a declaration in target language) of the serialized ATN. E.g., in C++, a small segment length results in multiple decls like: static const int32_t serializedATNSegment1[] = { 0x7, 0x12, 0x2, 0x13, 0x7, 0x13, 0x2, 0x14, 0x7, 0x14, 0x2, 0x15, 0x7, 0x15, 0x2, 0x16, 0x7, 0x16, 0x2, 0x17, 0x7, 0x17, 0x2, 0x18, 0x7, 0x18, 0x2, 0x19, 0x7, 0x19, 0x2, 0x1a, 0x7, 0x1a, 0x2, 0x1b, 0x7, 0x1b, 0x2, 0x1c, 0x7, 0x1c, 0x2, 0x1d, 0x7, 0x1d, 0x2, 0x1e, 0x7, 0x1e, 0x2, 0x1f, 0x7, 0x1f, 0x2, 0x20, 0x7, 0x20, 0x2, 0x21, 0x7, 0x21, 0x2, 0x22, 0x7, 0x22, 0x2, 0x23, 0x7, 0x23, 0x2, 0x24, 0x7, 0x24, 0x2, 0x25, 0x7, 0x25, 0x2, 0x26, }; instead of one big one. Targets are free to ignore this like JavaScript does. This is primarily needed by Java target to limit size of any single ATN string to 65k length.- Returns:
- the serialized ATN segment limit
- See Also:
-
getInlineTestSetWordSize
public int getInlineTestSetWordSize()How many bits should be used to do inline token type tests? Java assumes a 64-bit word for bitsets. Must be a valid wordsize for your target like 8, 16, 32, 64, etc...- Since:
- 4.5
-
grammarSymbolCausesIssueInGeneratedCode
-
visibleGrammarSymbolCausesIssueInGeneratedCode
Deprecated. -
templatesExist
public boolean templatesExist() -
loadTemplates
protected org.stringtemplate.v4.STGroup loadTemplates() -
loadTemplatesHelper
private org.stringtemplate.v4.STGroup loadTemplatesHelper(boolean reportErrorIfFail) -
wantsBaseListener
public boolean wantsBaseListener()- Since:
- 4.3
-
wantsBaseVisitor
public boolean wantsBaseVisitor()- Since:
- 4.3
-
supportsOverloadedMethods
public boolean supportsOverloadedMethods()- Since:
- 4.3
-
isATNSerializedAsInts
public boolean isATNSerializedAsInts() -
needsHeader
public boolean needsHeader()- Since:
- 4.6
-