Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 令牌化/词法转换程序(kotlin)中未排序的令牌_Loops_Kotlin_Jvm_Token_Lexer - Fatal编程技术网

Loops 令牌化/词法转换程序(kotlin)中未排序的令牌

Loops 令牌化/词法转换程序(kotlin)中未排序的令牌,loops,kotlin,jvm,token,lexer,Loops,Kotlin,Jvm,Token,Lexer,我正在Kotlin/JVM中创建一个令牌化系统,它接收一个文件并返回每个字符或字符序列作为令牌。出于某种原因,每当我标记一个字符串时,它都会在移动到下一个标记之前找到s“string”标记的第二个实例,或者换句话说,这些标记不符合顺序。我想这可能和循环有关,但我就是想不出来。我还在学习Kotlin,所以如果有人也能给我指点,那就太好了!非常感谢您的帮助 令牌的输出: [["chello", string], ["tomo", string], [:, ke

我正在Kotlin/JVM中创建一个令牌化系统,它接收一个文件并返回每个字符或字符序列作为令牌。出于某种原因,每当我标记一个字符串时,它都会在移动到下一个标记之前找到s“string”标记的第二个实例,或者换句话说,这些标记不符合顺序。我想这可能和循环有关,但我就是想不出来。我还在学习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(文件:BufferedReader){
var-lexicon:String=file.readText()
val numRegex=Regex(“^[1-9]\\d*(\\.\\d+?\$”)
val dataRegex=Regex(“[(){}]”)
val token=mutableListOf()
for lexicon.withIndex()中的((索引,字符){
println(char)
什么时候{
char.isWhitespace()->继续
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,“数据组”))
char=='>'->token.add(listOf(char.toString(),“verbline”))
char==''“->{
var stringOf=“”
val firstQuote=lexicon.indexOf(char)
val secondQuote=lexicon.indexOf(char,firstQuote+1)
如果(第一个引号==-1 | |第二个引号==-1){
打破
}
对于(我在第一个引号中..第二个引号中){
stringOf+=词汇[i]
}
lexicon=lexicon.substring(secondQuote+1,lexicon.length)
token.add(listOf(stringOf,“string”))
}
}
}
println(令牌)
}

在迭代时更改内容似乎会引起混乱

而且你似乎没有增加索引来跳过已消费的内容。我建议你改变循环的方式,允许你跳过已消费的内容

我还要删除这一行:

lexicon = lexicon.substring(secondQuote + 1, lexicon.length)
然后替换

  val firstQuote = lexicon.indexOf(char)

您还可以对stringOf使用子字符串而不是迭代

  val stringOf = lexicon.substring(

此外,使用toString检查“:”似乎效率低下

非常感谢您的帮助。
  val firstQuote = index
  val stringOf = lexicon.substring(