2016-04-22 16 views
0

プロジェクトDeveelDBのSQL-2003 ANTLR4文法を開発しました。これは、その基本機能の主なSQL文を定義しています。ANTLR4文法の単一ルールをオーバーライド

とにかく、データベースの機能を拡張するための一連の外部ライブラリも開発しています。たとえば、列のXMLデータの解析をサポートするa XML module、または空間操作をサポートするa Open-GIS SFS moduleです。

システムのアーキテクチャを考えると、システム構築時に登録されたシステム関数を使用してすべての操作を実行するのは簡単で、SQLパーサーは円滑に処理できます。

私の質問は、メインプロジェクトの既存のSQL文法を継承し、単一のルールを再定義し、メインの文法で定義するのではなく、機能固有のコマンドを追加するという新しいANTLR4文法を定義する可能性についてです.g4文法をコピーしてモジュールプロジェクトに貼り付け、そこでルールを直接再定義します。

ありがとうございました!

答えて

1

「継承」の種類が可能です。キーワード「インポート」を参照するだけです。 antlr4帳から 例: "親文法"

grammar ELang; 
stat : (expr ';')+ ; 
expr : INT ; 
WS : [ \r\t\n]+ -> skip ; 
ID : [a-z]+ ; 

"子" は、実際に何が起こるか

grammar MyELan 
import ELang; 
expr : INT | ID ; 
INT : [0-9]+ 

grammar MyELang; 
stat : (expr ';')+ ; 
expr : INT | ID ; 
INT : [0-9]+ 
WS : [ \r\t\n]+ -> skip ; 
ID : [a-z]+ ; 

で文法と同じ本MyELang inherits rules stat, WS, and ID, but it overrides rule expr and adds INTからの引用。

あなたはセクションの下に本の中で見ることができ、残り15.2文法構造、字幕文法の輸入

+0

ありがとうございました:その答えは私の質問です。私はそれを試してみる。実際には、すでに文法継承とレクサーのインポートを適用していますが、ルールをオーバーライドしようとしたことはありません。 – Antonello

+0

あなたは歓迎です。 – cantSleepNow