2017-04-18 24 views
0

要使xtext语言变成缩进感知,使用合成令牌as described here。但是,在缩进的位置,除非输入第一个字母,否则内容协助不会提出任何建议。Xtext:缩进感知语言的内容帮助

例如,请考虑下面的语法:

Model: 
 
\t lines += Line+; 
 
\t 
 
Line: 
 
    \t 'model' name=ID 
 
    \t BEGIN 
 
    \t \t type=(Type1 | Type2 | Type3) 
 
    \t END 
 
; 
 

 
Type1: 
 
'type1:' attr=ID; 
 

 
Type2: 
 
'type2:' attr=ID; 
 

 
Type3: 
 
'type3:' attr=ID; 
 

 
// The following synthetic tokens are used for the indentation-aware blocks 
 
terminal BEGIN: 'synthetic:BEGIN'; // increase indentation 
 
terminal END: 'synthetic:END';  // decrease indentation

现在,输入模式和新的生产线和一个标签,内容帮助不提示任何东西之后。但是,如果我输入t然后要求提供内容帮助,我会得到type1,type2和type3。

为什么内容只能在部分输入时才起作用?

回答

0

您的文法规则规定,规则Line中的BEGINEND标记之间的类型信息是强制性的。如果你忽略了那里的类型,我会假设解析器显示奇怪的错误恢复行为。如果将该类型标记为可选,它可能会有所帮助。

+0

在这种情况下,我试图实现一个白色空间敏感语言。我希望使用内容辅助提示在该位置可能的不同类型。现在,输入'model'后点击ctrl +空格,新行和标签不会返回任何内容。但是,如果在那之后输入字母't',解析器就会识别这些类型并用'type1,type2和type3'提示我。 如何修改合成令牌的行为? –

+0

将其标记为可选项并没有帮助 –