用于检测模糊标记的ANTLR语法

时间:2014-01-09 16:14:01

标签: antlr grammar antlrworks

我在ANTLR中创建一个简单的语法来匹配某些命令。我坚持使用特殊字符的令牌。

这些命令会匹配像......这样的句子。

  1. connect "HAL" computer 4
  2. connect "HAL256" computer 8
  3. connect "HAL2⁸" computer 16
  4. connect "HAL 9000" computer 32
  5. connect "HAL \x0A25 | 32" computer 64
  6. ......产生类似的东西:

    interpretation

    很明显我的问题出在ID令牌中,但我不知道如何解决它。这是我目前的语法:

    grammar foo;
    ID      :   '"' ('\u0000'..'\uFFFF')+ '"' ;
    NUMBER  :    ('0'..'9')* ;
    SENTENCE    :    'connect ' ID ' computer' NUMBER ;
    

    我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

你的语法有几个问题:

  1. NUMBER匹配空字符串:词法规则必须始终匹配至少1个字符
  2. SENTENCE应该是解析器规则(请参阅:Practical difference between parser rules and lexer rules in ANTLR?
  3. ('\u0000'..'\uFFFF')+也匹配您可能不想要的'"'
  4. 尝试这样的事情:

    sentence   : K_CONNECT ID K_COMPUTER NUMBER;
    
    K_CONNECT  : 'connect';
    K_COMPUTER : 'computer';
    ID         : '"' (~'"')+ '"';
    NUMBER     : ('0'..'9')+;
    SPACE      : (' ' | '\t' | '\r' | '\n')+ {skip();};