Antlr语法错误:期望WS的输入'p'不匹配

时间:2017-10-10 11:49:45

标签: java antlr antrl4

我有以下语法:

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

我在堆栈上有很多问题,并且已经搜索了很多问题,但我辛普利找不到一个anwser。我的语法错在哪里? 为什么程序需要WS,我该如何解决这个问题。 很多,非常感谢提前!

1 个答案:

答案 0 :(得分:0)

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

program: WS EOF myRules;

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

program: myRule*;

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