1

私は現在、社内で使用する社内言語用の Eclipse ベースのエディターを作成しようとしています。言語は、次の形式のステートメントのコレクションです。

{action}: {arguments}

...独自の行で。{arguments} の形式は、実行される {action} のタイプによって異なります。スクリプト フラグメントの例は次のようになります。

banner: Some string with numbers and punctuation (23) in it!
# some comment
timeout: 42

私の問題は、そのようなフラグメントを解析することです。コメントとタイムアウト ステートメントは機能していますが、バナー ステートメントをカバーするルールを作成できないようです。私の試みはすべて、Antlr の「トークン定義に到達できません」という警告、またはエディターが入力を照合できないという結果になりました。バナーステートメントに対して次のルールを試しました。

Banner:
  'banner:' name=ANY_OTHER*;

Banner:
  'banner:' name=FF_STRING;
terminal FF_STRING : ('a'..'z'|'A'..'Z'|'0'..'9'|'.'|':'|' ')+;

...これにより、antlr の警告が表示されます。私が思いついたハックは、先頭に「#」の代わりに「banner:」を付けて、SL_COMMENT と同じターミナルを簡単に作成することです。欠点は、構文の色付けが行われないことと、オートコンプリート リストに「バナー」が表示されないことです。

どんなアドバイスでも大歓迎です。

4

1 に答える 1

4

データ型ルールと少数の端末ルールのセットを使用してみることができます。このようなものが機能する可能性があります:

Banner
  'Banner:' name=Value;
Value hidden(): 
  (ID | WS | INT | <any keyword from your grammar>)* LineBreak;
terminal LineBreak: '\r' '\n'? | '\n';
termianl WS: (' '|'\t') *
于 2011-04-25T18:35:43.997 に答える