首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Kotlin中使用loop语句实现词法分析器的问题(StringIndexOutOfBoundsException)

在Kotlin中使用loop语句实现词法分析器的问题(StringIndexOutOfBoundsException)
EN

Stack Overflow用户
提问于 2019-09-26 19:30:29
回答 1查看 114关注 0票数 1

我想用Kotlin实现一个简单的词法分析器。我编写了以下代码来获取一个整数作为令牌。

代码语言:javascript
复制
private var Code = "1+2*20-11%12*2"
private var CharIndex = 0
fun main(args:Array<String>)
{
    println("Input Code : ${Code}\n")
    lex().forEach{
        println("${it.TokenType} ${it.TokenText}")
    }
}
//Call ScanToken Method
fun lex():Array<Token>
{
    for(i in 0..Code.length - 1)
        ScanToken()
    Tokens.add(RilioToken("", RilioTokenType.EOF))
    return Tokens.toTypedArray()
}
private fun ScanToken()
{
    var ch = Code[CharIndex].toString()
    if(isNumeric(ch)){ //When it's a Integer
        var TempIntString = ch
        CharIndex++
        while(isNumeric(Code[CharIndex].toString())) //Keep receiving until receive non-numeric char.
        {
            TempIntString = TempIntString + Code[CharIndex].toString()
            CharIndex++
        }
        Tokens.add(Token(TempIntString, TokenType.Int)) //Return collected numbers
        println(TempIntString) //TEST Code
    }
    //other string
    else{Tokens.add(RilioToken(ch, TokenType.None))}
    CharIndex++
}

我认为代码会运行如下:

代码语言:javascript
复制
Input Code : 1+2*20-11%12*2
1
2
20
11
12
2

Int 1
Int 2
Int 20
Int 11
Int 12
Int 2

但是,我在代码中得到了以下错误。

代码语言:javascript
复制
Input Code : 1+2*20-11%12*2
1
2
20
11
12

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 14
    at java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47)
    at java.base/java.lang.String.charAt(String.java:702)
    at com.ril.Riliolang.RilioLexer.ScanToken(RilioLexer.kt:77)
    at com.ril.Riliolang.RilioLexer.lex(RilioLexer.kt:16)
    at com.ril.Riliolang.TestKt.main(test.kt:8)

如何防止CharIndex变量超过字符串中的索引?

EN

回答 1

Stack Overflow用户

发布于 2019-09-27 00:58:42

您可以在递增之前检查是否已到达末尾。

代码语言:javascript
复制
if (CharIndex < Code.length) {
    CharIndex++
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58115875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档