Antlr Syntax error: mismatched input 'p' expecting WS

Antlr Syntax error: mismatched input 'p' expecting WS

我有以下语法:

grammar myProject;

program: WS EOF myRules;
WS: [ \t\r\n]+ -> skip;
myRules: myRule+;
myRule: SELECTOR OPEN declarations CLOSE;
declarations: declaration+;
declaration: PROPERTY EQ value ENDSYMBOL;
value: INT | STRING | COLOR;

SELECTOR : (('#'CHAR+)|('.'CHAR+)|CHAR+);
PROPERTY : [A-z-]+;

STRING : '"' .*? '"';
INT : [0-9]+ ;
COLOR : '#' [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F] [0-9a-fA-F];
CHAR: [A-z];

EQ : ':' ;
OPEN : '{';
CLOSE : '}';
ENDSYMBOL : ';' ;

现在我的输入是这样的:

p {
    color: #054593;
    width: 100px;
}

现在,当我解析它时出现以下错误:

语法错误:输入不匹配 'p' 需要 WS

我在堆栈上有很多问题,并且已经用谷歌搜索了很多,但我简单地找不到答案。我在语法上做错了什么? 为什么程序需要 WS,我该如何解决这个问题。 非常非常感谢!

你在语法中做的第一件事就是要求 WS:

program: WS EOF myRules;

因此,缺少任何空白字符,您的解析失败。我只是建议:

program: myRule*;

因为您已经使用跳过选项丢弃了空格。