неявное объявление в предупреждении о правиле синтаксического анализа antlrworks 2

Я всегда получаю неявное объявление в предупреждении правила синтаксического анализа при кодировании всех примеров из antlr v4 внутри antlrworks 2. для моего простого правила, например:

type
  : 'Integer'
  | 'Character'  
  | 'Real'       
  | 'String'     
  | 'Short'      
  | 'Long'       
  | 'Double'        
  | 'Signed'        
  | 'Unsigned'   
  | 'Boolean'    
  | structTag    
  | enumTag      
  | declarator   
  ;

Может ли кто-нибудь дать мне решение этого предупреждения, наконец, решение, например, выше. благодарить


person wied    schedule 04.06.2013    source источник


Ответы (1)


Предупреждение должно сообщить вам, что у вас не будет способа узнать в коде, является ли ваш type идентификатором, символом, реальным и т. д., потому что вы не присвоили именованные типы токенов соответствующим токенам. Вы можете устранить это предупреждение, создав правила именованного лексера для каждого из ваших токенов:

INTEGER : 'Integer';
CHARACTER : 'Character';

Вам не нужно изменять правило type после добавления этих новых определений, но после добавления определений вы сможете проверить, является ли тип токена INTEGER или CHARACTER, как часть кода обработки результатов синтаксического анализатора.

person Sam Harwell    schedule 04.06.2013
comment
отлично, это работает, я благодарен за это, но есть ли способ, кроме как писать токены один за другим в правиле лексера? Извините, я новичок в использовании antlrworks2. - person wied; 04.06.2013
comment
почему ( LINE_COMMENT | COMMENT | WS )* - person wied; 04.06.2013