Top Fields Constructors Methods
org.antlr.v4.codegen

public abstract Class Target

extends Object
Class Inheritance
Known Direct Subclasses
org.antlr.v4.codegen.target.CppTarget, org.antlr.v4.codegen.target.CSharpTarget, org.antlr.v4.codegen.target.DartTarget, org.antlr.v4.codegen.target.GoTarget, org.antlr.v4.codegen.target.JavaScriptTarget, org.antlr.v4.codegen.target.JavaTarget, org.antlr.v4.codegen.target.PHPTarget, org.antlr.v4.codegen.target.Python3Target, org.antlr.v4.codegen.target.SwiftTarget, org.antlr.v4.codegen.target.TypeScriptTarget
Imports
org.antlr.v4.Tool, org.antlr.v4.codegen.model.RuleFunction, .SerializedATN, org.antlr.v4.misc.CharSupport, .Utils, org.antlr.v4.parse.ANTLRParser, org.antlr.v4.runtime.RuntimeMetaData, .Token, org.antlr.v4.tool.ErrorType, .Grammar, .Rule, org.antlr.v4.tool.ast.GrammarAST, org.stringtemplate.v4.*, org.stringtemplate.v4.misc.STMessage, java.util.HashMap, .Map, .Set

Field Summary

Modifier and TypeField and Description
protected static final Map<Character, String>
protected final CodeGenerator
private static final Map<String, STGroup>

Constructor Summary

AccessConstructor and Description
protected

Method Summary

Modifier and TypeMethod and Description
protected static void
protected static void
addEscapedChar(HashMap<Character, String> map, char key, char representation)

private void
appendUnicodeEscapedCodePoint(int codePoint, StringBuilder sb, boolean escape)

protected void
appendUnicodeEscapedCodePoint(int codePoint, StringBuilder sb)

Escape the Unicode code point appropriately for this language and append the escaped value to sb.

public String
encodeInt16AsCharEscape(int v)

Assume 16-bit char

protected String
escapeChar(int v)

public String
escapeIfNeeded(String identifier)

protected String
protected void
genFile(Grammar g, ST outputFileST, String fileName)

public String
public String
getBaseListenerFileName(boolean header)

A given grammar T, return a blank listener implementation such as TBaseListener.java, if we're using the Java target.

public String
getBaseVisitorFileName(boolean header)

A given grammar T, return a blank listener implementation such as TBaseListener.java, if we're using the Java target.

public CodeGenerator
public String
public String
public String
public String
public String
public int
getInlineTestSetWordSize()

How many bits should be used to do inline token type tests?

public String
public String
getListenerFileName(boolean header)

A given grammar T, return the listener name such as TListener.java, if we're using the Java target.

public String
public String
public String
public String
getRecognizerFileName(boolean header)

Generate TParser.java and TLexer.java from T.g4 if combined, else just use T.java as output regardless of type.

protected abstract Set<String>
public String
public String
getRuleFunctionContextStructName(RuleFunction function)

If we know which actual function, we can provide the actual ctx type.

public int

Returns:

the serialized ATN segment limit
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.

public Map<Character, String>
getTargetCharValueEscape()

For pure strings of Unicode char, how can we display it in the target language as a literal.

public String
getTargetStringLiteralFromANTLRStringLiteral(CodeGenerator generator, String literal, boolean addQuotes)

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.

public String
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.

public String
public synchronized STGroup
public String
getTokenTypeAsTargetLabel(Grammar g, int ttype)

Get a meaningful name for a token type useful during code generation.

public String[]
public String
getVersion()

ANTLR tool should check output templates / target are compatible with tool code generation.

public String
getVisitorFileName(boolean header)

A given grammar T, return the visitor name such as TVisitor.java, if we're using the Java target.

public boolean
public boolean
protected STGroup
private STGroup
loadTemplatesHelper(boolean reportErrorIfFail)

public boolean
protected boolean
public boolean
public boolean
protected boolean
public boolean
public boolean
Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

defaultCharValueEscapeback to summary
protected static final Map<Character, String> defaultCharValueEscape
genback to summary
protected final CodeGenerator gen
languageTemplatesback to summary
private static final Map<String, STGroup> languageTemplates

Constructor Detail

Targetback to summary
protected Target(CodeGenerator gen)

Method Detail

addEscapedCharback to summary
protected static void addEscapedChar(HashMap<Character, String> map, char key)
addEscapedCharback to summary
protected static void addEscapedChar(HashMap<Character, String> map, char key, char representation)
appendUnicodeEscapedCodePointback to summary
private void appendUnicodeEscapedCodePoint(int codePoint, StringBuilder sb, boolean escape)
appendUnicodeEscapedCodePointback to summary
protected void appendUnicodeEscapedCodePoint(int codePoint, StringBuilder sb)

Escape the Unicode code point appropriately for this language and append the escaped value to sb. It exists for flexibility and backward compatibility with external targets The static method UnicodeEscapes#appendEscapedCodePoint(StringBuilder, int, String) can be used as well if default escaping method (Java) is used or language is officially supported

encodeInt16AsCharEscapeback to summary
public String encodeInt16AsCharEscape(int v)

Assume 16-bit char

escapeCharback to summary
protected String escapeChar(int v)
escapeIfNeededback to summary
public String escapeIfNeeded(String identifier)
escapeWordback to summary
protected String escapeWord(String word)
genFileback to summary
protected void genFile(Grammar g, ST outputFileST, String fileName)
getAltLabelContextStructNameback to summary
public String getAltLabelContextStructName(String label)
getBaseListenerFileNameback to summary
public String getBaseListenerFileName(boolean header)

A given grammar T, return a blank listener implementation such as TBaseListener.java, if we're using the Java target.

getBaseVisitorFileNameback to summary
public String getBaseVisitorFileName(boolean header)

A given grammar T, return a blank listener implementation such as TBaseListener.java, if we're using the Java target.

getCodeGeneratorback to summary
public CodeGenerator getCodeGenerator()
getElementListNameback to summary
public String getElementListName(String name)
getElementNameback to summary
public String getElementName(String name)
getImplicitRuleLabelback to summary
public String getImplicitRuleLabel(String ruleName)
getImplicitSetLabelback to summary
public String getImplicitSetLabel(String id)
getImplicitTokenLabelback to summary
public String getImplicitTokenLabel(String tokenName)
getInlineTestSetWordSizeback to summary
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
getLanguageback to summary
public String getLanguage()
getListenerFileNameback to summary
public String getListenerFileName(boolean header)

A given grammar T, return the listener name such as TListener.java, if we're using the Java target.

getListLabelback to summary
public String getListLabel(String label)
getLoopCounterback to summary
public String getLoopCounter(GrammarAST ast)
getLoopLabelback to summary
public String getLoopLabel(GrammarAST ast)
getRecognizerFileNameback to summary
public String getRecognizerFileName(boolean header)

Generate TParser.java and TLexer.java from T.g4 if combined, else just use T.java as output regardless of type.

getReservedWordsback to summary
protected abstract Set<String> getReservedWords()
getRuleFunctionContextStructNameback to summary
public String getRuleFunctionContextStructName(Rule r)
getRuleFunctionContextStructNameback to summary
public String getRuleFunctionContextStructName(RuleFunction function)

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...

getSerializedATNSegmentLimitback to summary
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:int

the serialized ATN segment limit

See Also
SerializedATN#getSegments
getTargetCharValueEscapeback to summary
public Map<Character, String> 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.

getTargetStringLiteralFromANTLRStringLiteralback to summary
public String getTargetStringLiteralFromANTLRStringLiteral(CodeGenerator generator, String literal, boolean addQuotes)
getTargetStringLiteralFromANTLRStringLiteralback to summary
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 cannot handle both \" and " without a lot of messing around.

getTargetStringLiteralFromStringback to summary
public String 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. 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.

getTargetStringLiteralFromStringback to summary
public String getTargetStringLiteralFromString(String s)
getTemplatesback to summary
public synchronized STGroup getTemplates()
getTokenTypeAsTargetLabelback to summary
public String getTokenTypeAsTargetLabel(Grammar g, int ttype)

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.

getTokenTypesAsTargetLabelsback to summary
public String[] getTokenTypesAsTargetLabels(Grammar g, int[] ttypes)
getVersionback to summary
public String 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
getVisitorFileNameback to summary
public String getVisitorFileName(boolean header)

A given grammar T, return the visitor name such as TVisitor.java, if we're using the Java target.

grammarSymbolCausesIssueInGeneratedCodeback to summary
public boolean grammarSymbolCausesIssueInGeneratedCode(GrammarAST idNode)
isATNSerializedAsIntsback to summary
public boolean isATNSerializedAsInts()
loadTemplatesback to summary
protected STGroup loadTemplates()
loadTemplatesHelperback to summary
private STGroup loadTemplatesHelper(boolean reportErrorIfFail)
needsHeaderback to summary
public boolean needsHeader()
Since
4.6
shouldUseUnicodeEscapeForCodePointInDoubleQuotedStringback to summary
protected boolean shouldUseUnicodeEscapeForCodePointInDoubleQuotedString(int codePoint)
supportsOverloadedMethodsback to summary
public boolean supportsOverloadedMethods()
Since
4.3
templatesExistback to summary
public boolean templatesExist()
visibleGrammarSymbolCausesIssueInGeneratedCodeback to summary
protected boolean visibleGrammarSymbolCausesIssueInGeneratedCode(GrammarAST idNode)

Deprecated

Annotations
@Deprecated
wantsBaseListenerback to summary
public boolean wantsBaseListener()
Since
4.3
wantsBaseVisitorback to summary
public boolean wantsBaseVisitor()
Since
4.3