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

com.skillw.asahi.api.member.lexer.AsahiLexer.kt Maven / Gradle / Ivy

There is a newer version: 1.6.7-beta-6
Show newest version
package com.skillw.asahi.api.member.lexer

import com.skillw.asahi.api.member.namespace.NamespaceHolder
import com.skillw.asahi.api.member.quest.LazyQuester
import com.skillw.asahi.api.member.quest.Quester
import com.skillw.asahi.api.quest
import com.skillw.asahi.api.questSafely
import com.skillw.asahi.api.questType
import com.skillw.asahi.api.quester
import com.skillw.asahi.api.script.AsahiCompiledScript
import com.skillw.asahi.internal.lexer.AsahiLexerImpl
import com.skillw.asahi.internal.util.Time

/**
 * AsahiLexer
 *
 * @constructor Create empty I asahi lexer
 */
interface AsahiLexer : NamespaceHolder {

    /**
     * 预期下一个token
     *
     * 若 下一个token 预期正确 则 跳过下一个token 并返回true
     *
     * 否则 不跳过下一个token 并返回false
     *
     * @param expects
     * @return 下一个token是否符合预期
     */
    fun expect(vararg expects: String): Boolean

    /** @return 是否有下一个Token */
    fun hasNext(): Boolean

    /** @return 是否读取结束 */
    fun isEnd(): Boolean = !hasNext()

    /**
     * 当前Token
     *
     * @return 当前Token
     */
    fun current(): String

    /**
     * 下一个Token
     *
     * @return 下一个Token
     */
    fun next(): String

    /**
     * 上一个Token 无上一个Token时为null
     *
     * @return 上一个Token
     */
    fun previous(): String?

    /**
     * 当前Token下标
     *
     * @return 当前Token下标
     */
    fun currentIndex(): Int

    /**
     * 查看下一个Token(忽略空字符)
     *
     * @return 下一个Token(忽略空字符)
     */
    fun peekNextIgnoreBlank(): String?

    /**
     * 查看下一个Token(不忽略空字符)
     *
     * @return 下一个Token(不忽略空字符)
     */
    fun peek(): String?

    /**
     * 跳过一些Token
     *
     * @param from 开头Token
     * @param till 结尾Token
     * @return 是否跳过成功
     */
    fun skipTill(from: String, till: String): Boolean

    /**
     * 将一些Token 分割出来
     *
     * @param from 开头Token
     * @param to 结尾Token
     * @return 中间的Tokens
     */
    fun splitTill(from: String, to: String): List

    /**
     * 将一些Token 分割出来
     *
     * @param to 结尾Token
     * @return to前的Tokens
     */
    fun splitBefore(vararg to: String): List

    /**
     * 将一些Token 分割出来 并以' '做分隔符结合为字符串
     *
     * @param to 结尾Token
     * @return to前的Tokens以' '做分隔符结合为的字符串
     */
    fun splitBeforeString(vararg to: String): String

    /** 重置Reader,下标归0 */
    fun reset()

    /**
     * 当前信息(包括脚本,下标)
     *
     * @return 当前信息(包括脚本,下标)
     */
    fun info(message: String = "", index: Int = currentIndex()): String

    /**
     * 寻求字符串
     *
     * @return Quester
     */
    fun questString() = quest()

    /** 寻求 int */
    fun questInt() = quest()

    /** 寻求 double */
    fun questDouble() = quest()

    /** 寻求 float */
    fun questFloat() = quest()

    /** 寻求 byte */
    fun questByte() = quest()

    /** 寻求 short */
    fun questShort() = quest()

    /** 寻求 boolean */
    fun questBoolean() = quest()

    /** 寻求 long */
    fun questLong() = quest()

    /** 寻求 list */
    fun questList() = quest>()

    /** 寻求 array */
    fun questArray() = quest>()

    /** 寻求 map */
    fun questMap() = quest>()

    /** 寻求 tokenizer */
    fun questObj() = questSafely()

    /** 寻求 tokenizer */
    fun questAny() = quest()

    /** 寻求 代码块 */
    fun questLazy() = quest>()

    /** 寻求 Time */
    fun questTime() = quest




© 2015 - 2024 Weber Informatics LLC | Privacy Policy