Antlr4语法外部 /不匹配的输入误差



我想声明一个字符串,该字符串包含我的语法中的任何字符,但行不通。

这是我的语法:Syrius.g4

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

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

语法有什么问题?

说明

您的令牌STR : .;将与任何字符匹配。STR是在WS Lexeme之前定义的,因此它将消耗所有空格字符。解析string test = "testString";时,Lexer将产生这些令牌的序列:stringSTRID,...等等。但是解析器正在寻找一个declaration规则,该规则由stringID,...代币。

解决方案

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

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

最新更新