ANTLR的语法错误:不匹配输入“P”期待WS
问题描述:
我有以下语法:ANTLR的语法错误:不匹配输入“P”期待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
我在这里有很多红色的问题,并且已经搜索了很多,但我simpeley找不到anwser。我的语法错了什么? 为什么程序需要WS,我该如何解决这个问题。 很多很多,提前感谢!
答
你在你的语法做的第一件事情是需要WS:
program: WS EOF myRules;
因此,缺乏任何空白字符,您解析失败。我只是建议:
program: myRule*;
因为你已经用skip选项丢弃了空白。
为什么程序需要WS:因为这就是你指定的,所以'program'的声明意味着:首先是WS,然后是EOF,然后是myRules。 – Jesper
@Jesper是对的:你的程序规则没有任何意义。 –
所以你看到的是:如果我不把它放在任何地方,但只是说明它是一个规则;它仍然会做它的工作? – Nebulosar