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";
时,词法分析器将生成这些标记的序列:string
、STR
、ID
、...等等。但是解析器正在寻找 declaration
规则,该规则由 string
、ID
、... 标记组成。
解决方案
正确定义 STR
标记。在 declaration
解析器规则中使用此标记:
STR : '"' .*? '"';
// (...)
declaration
: 'int' ID ('=' INTEGER)? ';'
| 'string' ID ('=' STR)? ';'
;
我想声明一个包含语法中任意字符的字符串, 但不起作用。
这是我的语法: 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";
时,词法分析器将生成这些标记的序列:string
、STR
、ID
、...等等。但是解析器正在寻找 declaration
规则,该规则由 string
、ID
、... 标记组成。
解决方案
正确定义 STR
标记。在 declaration
解析器规则中使用此标记:
STR : '"' .*? '"';
// (...)
declaration
: 'int' ID ('=' INTEGER)? ';'
| 'string' ID ('=' STR)? ';'
;