xtext を使用して忍者ビルドの文法を定義しようとしています。
答えられないトリッキーな点が3つあります。
- タブごとのインデント:
インデントの処理方法。ninja ビルド ファイルのルールには、前にタブ スペースを付けた複数の変数定義が含まれる場合があります (make ファイルと同様)。これは、言語に SL コメントがあり、空白を無視し、タブによるインデントを行う場合に問題になります (python、make など)。
cflags = -g
rule cc
command = gcc $cflags -c $in -o $out
- 変数名の予約済みセットの相互参照:
予約変数のセットが存在します。オートコンプリートは、予約済みの変数セットとユーザー定義の変数セットの両方を参照できる必要があります。
command = gcc $cflags -c $in -o $out
- WS で区切られていない相互参照変数名のオートコンプリート
org.eclipse.xtext.common.Terminals は WS トークンを隠します。ID トークンは空白で区切られます。ただし、忍者スクリプト (make ファイルに似ています) では、最長一致変数名を使用して解析を行う必要があります。
some_var = some_value
command = $some_var.h
どんなアイデアでも大歓迎です。ありがとう。