All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.antlr.v4.runtime.tree.pattern.RuleTagToken Maven / Gradle / Ivy

There is a newer version: 2.12.15
Show newest version
/*
 * 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; } }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy