我想声明一个包含语法中任何字符的字符串, 但不起作用。
这是我的语法: Syrius.g4
当我运行它时,我收到以下错误:
$ grun Syrius program
string test = "testString";
line 1:6 extraneous input ' ' expecting ID
line 1:11 mismatched input ' ' expecting ';'
语法有什么问题?
答案 0 :(得分:1)
您的令牌STR : .;
将匹配任何字符。 STR
在WS
lexeme之前定义,因此它将消耗所有空白字符。解析string test = "testString";
时,词法分析器将生成这些令牌的序列:string
,STR
,ID
,...等等。但解析器正在寻找declaration
规则,其中包含string
,ID
,...令牌。
正确定义STR
令牌。在declaration
解析器规则中使用此令牌:
STR : '"' .*? '"';
// (...)
declaration
: 'int' ID ('=' INTEGER)? ';'
| 'string' ID ('=' STR)? ';'
;