代码之家  ›  专栏  ›  技术社区  ›  Nebulosar Nutcracker

Antlr语法错误:不匹配的输入“p”应为WS

  •  0
  • Nebulosar Nutcracker  · 技术社区  · 7 年前

    我有以下语法:

    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

    我在stack上有很多问题,已经在Google上搜索了很多,但我simpeley找不到anwser。我的语法有什么错? 为什么程序需要WS,我该如何解决这个问题。 非常非常感谢!

    1 回复  |  直到 7 年前
        1
  •  0
  •   Nebulosar Nutcracker    7 年前

    program: WS EOF myRules;
    

    因此,由于没有任何空格字符,解析失败。我只是建议:

    program: myRule*;
    

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