2017-04-18 8 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

文法規則では、タイプ情報がLineBEGINENDトークンの間に必須であると記載されています。私はあなたがそこにタイプを省略すると、パーサーが奇妙なエラー回復動作を表示していると思います。タイプをオプションとしてマークすると、おそらく役に立ちます。

+0

この場合、空白に敏感な言語を実装しようとしています。コンテンツアシストを使用して、その場所で可能なさまざまなタイプのプロンプトを表示したいと考えています。今、「モデル」、新しい行、およびタブを入力した後にctrl +スペースを打つと、何も返されません。しかし、その後に文字 't'をタイプすると、パーサーはタイプを認識し、 'タイプ1、タイプ2、タイプ3'で私にプロンプ​​トを出します。 合成トークンの動作を変更するにはどうすればよいですか? –

+0

オプションとしてマークしても役立たない –

関連する問題