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

ANTLR4 Grammar extraneous / mismatched input error

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

这是我的语法: Syrius.g4

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

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

语法可能有什么问题?

说明

您的令牌 STR : .; 将匹配任何字符。 STR 是在 WS 词素之前定义的,因此它将消耗所有空白字符。解析 string test = "testString"; 时,词法分析器将生成这些标记的序列:stringSTRID、...等等。但是解析器正在寻找 declaration 规则,该规则由 stringID、... 标记组成。

解决方案

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

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