如何解决纠正嵌套函数的ANTLR语法错误
我在函数体内使用了自定义函数( assertFailsWith ),但是在“ assertFailsWith(IllegalArgumentException :: class){”行中出现了ANTLR解析器错误:“
输入'{'不匹配,期望{NL,'}',
我正在使用https://github.com/antlr/grammars-v4/tree/master/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)
}
}
解决方法
这是词法分析器语法中的错误。因此,解析器跳闸,无法从意外的令牌流中恢复。该错误不是由于任何嵌套函数(或函数调用)引起的。
如果让输入.6f 0.6f 1.6f
被标记化,您将看到词法分析器生成以下标记:
RealLiteral `.6f`
IntegerLiteral `0`
RealLiteral `.6f`
RealLiteral `1.6f`
如您所见,输入0.6f
不被识别为RealLiteral
令牌。您可以通过将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
)
;
,您的解析器将能够正确解析您的输入。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。