ANTLR4语法无关/不匹配的输入错误

时间:2016-12-07 12:16:06

标签: regex antlr4

我想声明一个包含语法中任何字符的字符串, 但不起作用。

这是我的语法: Syrius.g4

当我运行它时,我收到以下错误:

$ grun Syrius program
string test = "testString";
line 1:6 extraneous input ' ' expecting ID
line 1:11 mismatched input ' ' expecting ';'

语法有什么问题?

1 个答案:

答案 0 :(得分:1)

说明

您的令牌STR : .;将匹配任何字符。 STRWS lexeme之前定义,因此它将消耗所有空白字符。解析string test = "testString";时,词法分析器将生成这些令牌的序列:stringSTRID,...等等。但解析器正在寻找declaration规则,其中包含stringID,...令牌。

解决方案

正确定义STR令牌。在declaration解析器规则中使用此令牌:

STR : '"' .*? '"';
// (...)
declaration
    : 'int' ID ('=' INTEGER)? ';'
    | 'string' ID ('=' STR)? ';'
    ;