Package org.antlr.analysis
Class Label
java.lang.Object
org.antlr.analysis.Label
- All Implemented Interfaces:
Cloneable
,Comparable<Label>
- Direct Known Subclasses:
ActionLabel
,PredicateLabel
A state machine transition label. A label can be either a simple
label such as a token or character. A label can be a set of char or
tokens. It can be an epsilon transition. It can be a semantic predicate
(which assumes an epsilon transition) or a tree of predicates (in a DFA).
Special label types have to be < 0 to avoid conflict with char.
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final int
static final int
static final int
static final int
End of rule token type; imaginary token type used only for local, partial FOLLOW sets to indicate that the local FOLLOW hit the end of rule.static final int
End of Token is like EOF for lexer rules.static final int
static final String
static final int
protected int
The token type or character value; or, signifies special label.protected IntSet
A set of token types or character codes if label==SETstatic final int
static final int
Anything at this value or larger can be considered a simple atom int for easy comparison during analysis only; faux labels are not used during parse time for real token types or char values.static final int
static final int
tokens and char range overlap; tokens are MIN_TOKEN_TYPE..nstatic final int
We have labels like EPSILON that are below 0; it's hard to store them in an array with negative index so use this constant as an index shift when accessing arrays based upon token type.static final int
label is a semantic predicate; implies label is epsilon alsostatic final int
label is a set of tokens or charstatic final int
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
clone()
int
boolean
int
getAtom()
return the single atom label or INVALID if not a single atomgetSet()
int
hashCode()
static boolean
boolean
isAction()
boolean
isAtom()
boolean
boolean
boolean
isSet()
boolean
matches
(int atom) boolean
boolean
void
toString()
Predicates are lists of AST nodes from the NFA created from the grammar, but the same predicate could be cut/paste into multiple places in the grammar.
-
Field Details
-
INVALID
public static final int INVALID- See Also:
-
ACTION
public static final int ACTION- See Also:
-
EPSILON
public static final int EPSILON- See Also:
-
EPSILON_STR
- See Also:
-
SEMPRED
public static final int SEMPREDlabel is a semantic predicate; implies label is epsilon also- See Also:
-
SET
public static final int SETlabel is a set of tokens or char- See Also:
-
EOT
public static final int EOTEnd of Token is like EOF for lexer rules. It implies that no more characters are available and that NFA conversion should terminate for this path. For example A : 'a' 'b' | 'a' ; yields a DFA predictor: o-a->o-b->1 predict alt 1 | |-EOT->o predict alt 2 To generate code for EOT, treat it as the "default" path, which implies there is no way to mismatch a char for the state from which the EOT emanates.- See Also:
-
EOF
public static final int EOF- See Also:
-
NUM_FAUX_LABELS
public static final int NUM_FAUX_LABELSWe have labels like EPSILON that are below 0; it's hard to store them in an array with negative index so use this constant as an index shift when accessing arrays based upon token type. If real token type is i, then array index would be NUM_FAUX_LABELS + i.- See Also:
-
MIN_ATOM_VALUE
public static final int MIN_ATOM_VALUEAnything at this value or larger can be considered a simple atom int for easy comparison during analysis only; faux labels are not used during parse time for real token types or char values.- See Also:
-
MIN_CHAR_VALUE
public static final int MIN_CHAR_VALUE- See Also:
-
MAX_CHAR_VALUE
public static final int MAX_CHAR_VALUE- See Also:
-
EOR_TOKEN_TYPE
public static final int EOR_TOKEN_TYPEEnd of rule token type; imaginary token type used only for local, partial FOLLOW sets to indicate that the local FOLLOW hit the end of rule. During error recovery, the local FOLLOW of a token reference may go beyond the end of the rule and have to use FOLLOW(rule). I have to just shift the token types to 2..n rather than 1..n to accommodate this imaginary token in my bitsets. If I didn't use a bitset implementation for runtime sets, I wouldn't need this. EOF is another candidate for a run time token type for parsers. Follow sets are not computed for lexers so we do not have this issue.- See Also:
-
DOWN
public static final int DOWN- See Also:
-
UP
public static final int UP- See Also:
-
MIN_TOKEN_TYPE
public static final int MIN_TOKEN_TYPEtokens and char range overlap; tokens are MIN_TOKEN_TYPE..n- See Also:
-
label
protected int labelThe token type or character value; or, signifies special label. -
labelSet
A set of token types or character codes if label==SET
-
-
Constructor Details
-
Label
public Label(int label) -
Label
Make a set label
-
-
Method Details
-
clone
-
add
-
isAtom
public boolean isAtom() -
isEpsilon
public boolean isEpsilon() -
isSemanticPredicate
public boolean isSemanticPredicate() -
isAction
public boolean isAction() -
isSet
public boolean isSet() -
getAtom
public int getAtom()return the single atom label or INVALID if not a single atom -
getSet
-
setSet
-
getSemanticContext
-
matches
public boolean matches(int atom) -
matches
-
matches
-
hashCode
public int hashCode() -
equals
-
compareTo
- Specified by:
compareTo
in interfaceComparable<Label>
-
toString
Predicates are lists of AST nodes from the NFA created from the grammar, but the same predicate could be cut/paste into multiple places in the grammar. I must compare the text of all the predicates to truly answer whether {p1,p2} .equals {p1,p2}. Unfortunately, I cannot rely on the AST.equals() to work properly so I must do a brute force O(n^2) nested traversal of the Set doing a String compare. At this point, Labels are not compared for equals when they are predicates, but here's the code for future use. -
toString
-
intersect
-