2017-10-10 131 views
0

我有以下语法: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,我该如何解决这个问题。 很多很多,提前感谢!

+2

为什么程序需要WS:因为这就是你指定的,所以'program'的声明意味着:首先是WS,然后是EOF,然后是myRules。 – Jesper

+0

@Jesper是对的:你的程序规则没有任何意义。 –

+0

所以你看到的是:如果我不把它放在任何地方,但只是说明它是一个规则;它仍然会做它的工作? – Nebulosar

回答

0

你在你的语法做的第一件事情是需要WS:

program: WS EOF myRules; 

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

program: myRule*; 

因为你已经用skip选项丢弃了空白。

相关问题