2015-06-29 5 views
0

Я новичок в xtext (antlr) и не понимаю, почему существует двусмысленность между IconType'} 'и WindowType'} '.
я получаюxtext nested {} Решение может соответствовать вводу, например «'}' ', используя несколько альтернатив.

warning(200): ../org.simsulla.tools.ui.gui/src-gen/org/simsulla/tools/ui/gui/parser/antlr/internal/InternalGui.g:137:1: Decision can match input such as "'windowType'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 
warning(200): ../org.simsulla.tools.ui.gui.ui/src-gen/org/simsulla/tools/ui/gui/ui/contentassist/antlr/internal/InternalGui.g:117:38: Decision can match input such as "'windowType' '=' '{' 'name' '=' RULE_ID 'iconType' '=' '{' 'name' '=' RULE_ID 'spriteType' '=' RULE_STRING 'Orientation' '=' RULE_STRING '}' '}'" using multiple alternatives: 1, 2 
As a result, alternative(s) 2 were disabled for that input 

Это моя грамматика

Ui: 
    guiTypes+=GuiTypes+; 

GuiTypes: 
    windowType+=WindowType+ 
; 

WindowType: 
    'windowType' '=' '{' 
     'name' '=' name=STRING 
     iconType+=IconType* 
    '}' 
; 

IconType: 
    'iconType' '=' '{' 
     'name' '=' name=STRING 
     'spriteType' '=' spriteType=STRING 
     'Orientation' '=' Orientation=STRING 
    '}' 
; 
+1

Вы создаете грамматику ANTLR для отладки и проверили ее с помощью ANTLRWorks? Этот инструмент визуализирует, есть ли несколько путей через грамматику в случае двусмысленности. – Joko

+0

спасибо, я проверю это. – simsulla

ответ

1

фрагмент грамматики имеет несколько способов повторения WindowType:

  • вытекающих из Ui к GuiTypes нескольким WindowType экземпляров, или
  • производные ng от Ui до нескольких GuiTypes экземпляров, где каждый получает значение WindowType, или
  • любое сочетание вышеуказанного.

Таким образом, данный вход соответствует нескольким различным синтаксическим анализам. Таким образом, грамматика неоднозначна.