2016-09-17 5 views
0

ANTLRv4を使用してFIXメッセージを検証する簡単なDSLを構築しています。 私の文法は現在、下の方言1(主に比較演算子)をサポートしており、方言2をさらにサポートしたいと考えています。ANTLRを使用してDSL用の方言を定義する

親文法を継承したり拡張したりする方言を定義できますか?

たとえば、私の文法を使用する他の開発者は、独自の方言を定義し、その方言に従うルールを表現することができます。方言1で

ルール:

tag 9 > 0 tag 59 = "A"

同じルール方言2:

tag 9 must be greater than 0 tag 59 must be equal to "A"

+0

基本的な文法を変更するには、本当にスマートなユーザーがいる必要があります。このようなスマートなユーザーを持つアプリケーションとは何ですか? –

+0

明確にするために、ユーザーはDSLを使用することが期待されますが、他の開発者は独自の方言を定義できる必要があります。謝罪、私は以前にはっきりさせておき、今編集しておくべきだった。 – Mahesh

答えて

0

私はANTLRの直接の助けを借りて、文法の方言を定義することができるとは思いません。

もちろん、文法を変更することを検討するには、現在の文法仕様にあるものを強く理解している必要があります。だからあなたは彼らに変更を加える前に、ある種のウィンドウで現在の文法であるを表示する必要があります。

エディタウィンドウで表示するだけで、直接編集することができます。

+0

既存の文法は編集可能です。既存の文法を使用する他の開発者が影響を受けないように、既存の文法を拡張する方法があるかどうかを調べています。私はここでの変更よりもむしろ拡張を指している。 – Mahesh

+0

「他のユーザー」に影響を与えたくない場合は、ユーザーごとに派生したコピーを保存する必要があります。それはそれがどのように得られるかとは無関係です。面白いと思われる –

1

Antlr4には、文法を論理的なチャンクと再利用可能なチャンクに分割できるようにするためのメカニズムが含まれています(import)。ある文法を別の文法にインポートすると、それはオブジェクト指向の継承のような振る舞いをします。これはDSLの多くの方言を維持するのに役立ちます。

基本についてはthis pageを参照してください。 Definitive Antlr4 Reference本の詳細

+0

は、これを試して更新します。 – Mahesh

関連する問題