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

commonMain.org.antlr.v4.kotlinruntime.Token.kt Maven / Gradle / Ivy

/*
 * 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.kotlinruntime

import org.antlr.v4.kotlinruntime.ast.Point

/** A token has properties: text, type, line, character position in the line
 * (so we can ignore tabs), token channel, index, and source from which
 * we obtained this token.
 */
interface Token {

    fun startPoint() = Point(line, charPositionInLine)

    fun endPoint() = if (text == null) null else Point(line, charPositionInLine).advance(text!!)

    /**
     * Get the text of the token.
     */
    val text: String?

    /** Get the token type of the token  */
    val type: Int

    /** The line number on which the 1st character of this token was matched,
     * line=1..n
     */
    val line: Int

    /** The index of the first character of this token relative to the
     * beginning of the line at which it occurs, 0..n-1
     */
    val charPositionInLine: Int

    /** Return the channel this token. Each token can arrive at the parser
     * on a different channel, but the parser only "tunes" to a single channel.
     * The parser ignores everything not on DEFAULT_CHANNEL.
     */
    val channel: Int

    /** An index from 0..n-1 of the token object in the input stream.
     * This must be valid in order to print token streams and
     * use TokenRewriteStream.
     *
     * Return -1 to indicate that this token was conjured up since
     * it doesn't have a valid index.
     */
    val tokenIndex: Int

    /** The starting character index of the token
     * This method is optional; return -1 if not implemented.
     */
    val startIndex: Int

    /** The last character index of the token.
     * This method is optional; return -1 if not implemented.
     */
    val stopIndex: Int

    /** Gets the [TokenSource] which created this token.
     */
    val tokenSource: TokenSource?

    /**
     * Gets the [CharStream] from which this token was derived.
     */
    val inputStream: CharStream?

    companion object {
        val INVALID_TYPE = 0

        /** During lookahead operations, this "token" signifies we hit rule end ATN state
         * and did not follow it despite needing to.
         */
        val EPSILON = -2

        val MIN_USER_TOKEN_TYPE = 1

        val EOF = IntStream.EOF

        /** All tokens go to the parser (unless skip() is called in that rule)
         * on a particular "channel".  The parser tunes to a particular channel
         * so that whitespace etc... can go to the parser on a "hidden" channel.
         */
        val DEFAULT_CHANNEL = 0

        /** Anything on different channel than DEFAULT_CHANNEL is not parsed
         * by parser.
         */
        val HIDDEN_CHANNEL = 1

        /**
         * This is the minimum constant value which can be assigned to a
         * user-defined token channel.
         *
         *
         *
         * The non-negative numbers less than [.MIN_USER_CHANNEL_VALUE] are
         * assigned to the predefined channels [.DEFAULT_CHANNEL] and
         * [.HIDDEN_CHANNEL].
         *
         * @see Token.getChannel
         */
        val MIN_USER_CHANNEL_VALUE = 2
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy