我有以下语法:
grammar myProject;
program: WS EOF myRules;
WS: [ trn]+ -> 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 以及如何解决此问题。提前非常感谢!
你在语法中做的第一件事就是要求WS:
program: WS EOF myRules;
因此,缺少任何空格字符,您的解析将失败。 我只是建议:
program: myRule*;
因为您已经使用跳过选项丢弃了空格。