【发布时间】:2025-11-29 15:05:02
【问题描述】:
我正在 Kotlin / JVM 中创建一个标记化系统,它接收一个文件并将每个字符或字符序列作为标记返回。出于某种原因,每当我对字符串进行标记时,它都会在移动到下一个标记之前找到 s“字符串”标记的第二个实例,或者换句话说,标记不按顺序排列。我认为这可能与循环有关,但我无法弄清楚。我还在学习 Kotlin,所以如果有人也可以给我指点,那就太好了!非常感谢任何帮助。
令牌输出:
[["chello", string], ["tomo", string], [:, keyV], ["hunna", string], ["moobes", string], ["hunna", string]]
我的文件是这样的。
STORE "chello" : "tomo" as 1235312
SEND "hunna" in Hollo
GET "moobes"
GET "hunna"
fun tokenCreator (file: BufferedReader) {
var lexicon : String = file.readText()
val numRegex = Regex("^[1-9]\\d*(\\.\\d+)?\$")
val dataRegex = Regex("[(){}]")
val token = mutableListOf<List<Any>>()
for((index, char) in lexicon.withIndex()) {
println(char)
when {
char.isWhitespace() -> continue
char.toString() == ":" -> token.add(listOf(char.toString(), "keyV") )
char.toString().matches(Regex("[()]")) -> token.add(listOf(char, "group") )
char.toString().matches(dataRegex) -> token.add(listOf(char, "data_group" ) )
char == '>' -> token.add(listOf(char.toString(), "verbline") )
char == '"' -> {
var stringOf = ""
val firstQuote = lexicon.indexOf(char)
val secondQuote = lexicon.indexOf(char, firstQuote + 1)
if(firstQuote == -1 || secondQuote == -1) {
break
}
for(i in firstQuote..secondQuote) {
stringOf += lexicon[i]
}
lexicon = lexicon.substring(secondQuote + 1, lexicon.length)
token.add(listOf(stringOf, "string"))
}
}
}
println(token)
}
【问题讨论】:
标签: loops kotlin jvm token lexer