gpt4 book ai didi

kotlin - 纠正嵌套函数的ANTLR语法错误

转载 作者:行者123 更新时间:2023-12-02 13:16:26 25 4
gpt4 key购买 nike

我在函数体内使用了自定义函数( assertFailsWith ),但是在“assertFailsWith(IllegalArgumentException::class){”行中出现ANTLR解析器错误:
输入'{'不匹配,期望{NL,'}',
我正在使用https://github.com/antlr/grammars-v4/tree/master/kotlin/kotlin的Kotlin语法
我是否需要在以下部分进行任何更改以消除错误:

functionBody
: block
| ASSIGNMENT NL* expression
;

block
: LCURL statements RCURL
;



@Test
fun `Create invalid test`() {
assertFailsWith(IllegalArgumentException::class) {
// Variables
val realVocabPath = "realVocabPath"
val realAlphabetPath = "realAlphabetPath"
val vocabFactory = VocabFactory(mockFileLoader, 0.6f)

// Execute
val vocab = vocabFactory.create(realVocabPath, realAlphabetPath, mockEngineSpec)

// Verify
assertEquals(mockWordPieceVocab, vocab)
}
}

最佳答案

这是词法分析器语法中的一个错误。因此,解析器跳闸,无法从意外的 token 流中恢复。该错误不是由于任何嵌套函数(或函数调用)引起的。
如果您将输入的.6f 0.6f 1.6f标记化,您将看到词法分析器生成以下标记:

RealLiteral               `.6f`
IntegerLiteral `0`
RealLiteral `.6f`
RealLiteral `1.6f`
如您所见,输入的 0.6f不被识别为 RealLiteral token 。您可以通过将 0.6f更改为 1.6f来验证这一点,并且解析器不会产生任何错误。
要解决此问题,请更改:
DoubleLiteral
: ( (DecDigitNoZero DecDigit*)? '.'
| (DecDigitNoZero (DecDigit | '_')* DecDigit)? '.')
( DecDigit+
| DecDigit (DecDigit | '_')+ DecDigit
| DecDigit+ [eE] ('+' | '-')? DecDigit+
| DecDigit+ [eE] ('+' | '-')? DecDigit (DecDigit | '_')+ DecDigit
| DecDigit (DecDigit | '_')+ DecDigit [eE] ('+' | '-')? DecDigit+
| DecDigit (DecDigit | '_')+ DecDigit [eE] ('+' | '-')? DecDigit (DecDigit | '_')+ DecDigit
)
;
变成:
DoubleLiteral
: ( (DecDigitNoZero DecDigit* | '0')? '.'
| (DecDigitNoZero (DecDigit | '_')* DecDigit)? '.')
( DecDigit+
| DecDigit (DecDigit | '_')+ DecDigit
| DecDigit+ [eE] ('+' | '-')? DecDigit+
| DecDigit+ [eE] ('+' | '-')? DecDigit (DecDigit | '_')+ DecDigit
| DecDigit (DecDigit | '_')+ DecDigit [eE] ('+' | '-')? DecDigit+
| DecDigit (DecDigit | '_')+ DecDigit [eE] ('+' | '-')? DecDigit (DecDigit | '_')+ DecDigit
)
;
您的解析器将能够正确解析您的输入。
在此提交了修复程序: https://github.com/antlr/grammars-v4/pull/1850

关于kotlin - 纠正嵌套函数的ANTLR语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63746942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com