Antlr4:第1行:14个无关输入';w';期待{<;EOF>;,';';,';';&}

Antlr4:第1行:14个无关输入';w';期待{<;EOF>;,';';,';';&},antlr4,Antlr4,我尝试编写一个语法,检查以下数据(csv文件)是否有效: w;w;w;s;s;s;s w;s;w;w;w;w;w w;s;w;w;w;w;w w;s;w;s;s;s;w w;s;w;w;w;w;w w;s;w;w;w;w;w w;w;s;s;w;w;w * Define a grammar Battlefield */ grammar Battlefield; file : row* EOF; row : value (Separator value)* (LineFeed |EOF)

我尝试编写一个语法,检查以下数据(csv文件)是否有效:

w;w;w;s;s;s;s
w;s;w;w;w;w;w
w;s;w;w;w;w;w
w;s;w;s;s;s;w
w;s;w;w;w;w;w
w;s;w;w;w;w;w
w;w;s;s;w;w;w



* Define a grammar Battlefield
 */
grammar Battlefield;
file : row* EOF;
row : value (Separator value)* (LineFeed |EOF) ;
value : SimpleValue ;
Separator : ';' ;

// line feed
LineFeed : '\n';

// w or s is allowed
SimpleValue : ('s'|'w'|'\n')+ ;

WS : [ \t\r]+ -> skip ; // skip spaces, tabs
运行语法时,我得到以下错误代码:

line 1:14 extraneous input 'w' expecting {<EOF>, ';', '
'}
行1:14外部输入'w'应为{,,;','
'}

有什么问题吗?

您的
SimpleValue
规则将始终使用尾随的
\n
,因此不会生成
LineFeed
令牌。只需从
SimpleValue
规则中删除
\n
alt。

删除后,我会收到消息:“第7:13行在“”处缺少SimpleValue”