org.antlr.v4.runtime.tree.pattern.RuleTagToken Maven / Gradle / Ivy
Show all versions of virtdata-lib-curves4 Show documentation
/*
* Copyright (c) 2012-2017 The ANTLR Project. All rights reserved.
* Use of this file is governed by the BSD 3-clause license that
* can be found in the LICENSE.txt file in the project root.
*/
package org.antlr.v4.runtime.tree.pattern;
import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.TokenSource;
/**
* A {@link Token} object representing an entire subtree matched by a parser
* rule; e.g., {@code }. These tokens are created for {@link TagChunk}
* chunks where the tag corresponds to a parser rule.
*/
public class RuleTagToken implements Token {
/**
* This is the backing field for {@link #getRuleName}.
*/
private final String ruleName;
/**
* The token type for the current token. This is the token type assigned to
* the bypass alternative for the rule during ATN deserialization.
*/
private final int bypassTokenType;
/**
* This is the backing field for {@link #getLabel}.
*/
private final String label;
/**
* Constructs a new instance of {@link RuleTagToken} with the specified rule
* name and bypass token type and no label.
*
* @param ruleName The name of the parser rule this rule tag matches.
* @param bypassTokenType The bypass token type assigned to the parser rule.
*
* @exception IllegalArgumentException if {@code ruleName} is {@code null}
* or empty.
*/
public RuleTagToken(String ruleName, int bypassTokenType) {
this(ruleName, bypassTokenType, null);
}
/**
* Constructs a new instance of {@link RuleTagToken} with the specified rule
* name, bypass token type, and label.
*
* @param ruleName The name of the parser rule this rule tag matches.
* @param bypassTokenType The bypass token type assigned to the parser rule.
* @param label The label associated with the rule tag, or {@code null} if
* the rule tag is unlabeled.
*
* @exception IllegalArgumentException if {@code ruleName} is {@code null}
* or empty.
*/
public RuleTagToken(String ruleName, int bypassTokenType, String label) {
if (ruleName == null || ruleName.isEmpty()) {
throw new IllegalArgumentException("ruleName cannot be null or empty.");
}
this.ruleName = ruleName;
this.bypassTokenType = bypassTokenType;
this.label = label;
}
/**
* Gets the name of the rule associated with this rule tag.
*
* @return The name of the parser rule associated with this rule tag.
*/
public final String getRuleName() {
return ruleName;
}
/**
* Gets the label associated with the rule tag.
*
* @return The name of the label associated with the rule tag, or
* {@code null} if this is an unlabeled rule tag.
*/
public final String getLabel() {
return label;
}
/**
* {@inheritDoc}
*
* Rule tag tokens are always placed on the {@link #DEFAULT_CHANNEL}.
*/
@Override
public int getChannel() {
return DEFAULT_CHANNEL;
}
/**
* {@inheritDoc}
*
* This method returns the rule tag formatted with {@code <} and {@code >}
* delimiters.
*/
@Override
public String getText() {
if (label != null) {
return "<" + label + ":" + ruleName + ">";
}
return "<" + ruleName + ">";
}
/**
* {@inheritDoc}
*
* Rule tag tokens have types assigned according to the rule bypass
* transitions created during ATN deserialization.
*/
@Override
public int getType() {
return bypassTokenType;
}
/**
* {@inheritDoc}
*
* The implementation for {@link RuleTagToken} always returns 0.
*/
@Override
public int getLine() {
return 0;
}
/**
* {@inheritDoc}
*
* The implementation for {@link RuleTagToken} always returns -1.
*/
@Override
public int getCharPositionInLine() {
return -1;
}
/**
* {@inheritDoc}
*
* The implementation for {@link RuleTagToken} always returns -1.
*/
@Override
public int getTokenIndex() {
return -1;
}
/**
* {@inheritDoc}
*
* The implementation for {@link RuleTagToken} always returns -1.
*/
@Override
public int getStartIndex() {
return -1;
}
/**
* {@inheritDoc}
*
* The implementation for {@link RuleTagToken} always returns -1.
*/
@Override
public int getStopIndex() {
return -1;
}
/**
* {@inheritDoc}
*
* The implementation for {@link RuleTagToken} always returns {@code null}.
*/
@Override
public TokenSource getTokenSource() {
return null;
}
/**
* {@inheritDoc}
*
* The implementation for {@link RuleTagToken} always returns {@code null}.
*/
@Override
public CharStream getInputStream() {
return null;
}
/**
* {@inheritDoc}
*
* The implementation for {@link RuleTagToken} returns a string of the form
* {@code ruleName:bypassTokenType}.
*/
@Override
public String toString() {
return ruleName + ":" + bypassTokenType;
}
}