1

考虑以下简化语法:

ID  :   ('a'..'z') ('a'..'z')*;

TYPE    :   'int' '[' ']' |
        'boolean' |
        'int';

现在,如果我将boolean作为输入,它可以被解析为IDTYPE。我希望它被解析为TYPE - 如何?

4

1 回答 1

1

放在TYPE 前面 ID

TYPE : 'int' '[' ']' 
     | 'boolean' 
     | 'int'
     ;

ID   : ('a'..'z') ('a'..'z')*
     ;

ANTLR 的词法分析器规则是这样工作的:

  1. 尽可能匹配
  2. 如果在规则 #1 之后,两个或多个规则匹配相同数量的字符,则选择语法中首先定义的规则

由于这些规则,"boolean"被标记为TYPE,而"booleans"将被标记为ID 1


1 没有"booleans"被标记为两个标记:( ) 和( ))TYPE"boolean"ID"s"

于 2012-11-07T16:34:59.157 回答