2016-06-15 10 views
1

Hereは、PLSQLのAntlr文法ファイルです。Antlr PLSQL文法でパッケージ名が正しく解析されませんか?

しかし、それは完全ではありません。

CREATE OR REPLACE PACKAGE BODY SCHEMA_NAME.PACKAGE_NAME AS 

先行文法ファイルから生成されたパーサーが(package_nameはANTLRパーサー規則である)package_nameとしてSCHEMA_NAME.PACKAGE_NAMEを解析しない:例えば、私が始まるパッケージを有しています。この問題を解決するには

、私はこの

package_name 
    : id ('.' id)? 
    ; 

するために、この

package_name 
    : id 
    ; 

を変更している私はまた

package_name 
    : id ('.' id_expression)? 
    ; 

を試してみましたが、それらのどれも働きました。 Antlrにはpackage nameの最後の.PACKAGE_NAMEの部分は含まれません。

なぜこれが機能しないのですか?これをどうすれば解決できますか?

+0

残りのルールがある場合は、実際には ':id( '。' id_expression)? '(この場合は認識されているものを変更すべきではありません)です。 –

+0

@ JeroenMostert私もそれを試しました。それはどちらもうまくいかなかった。 – Utku

+1

Antlr3文法のポートであるため動作しません。まだ完成していない。この文法のもう1つの問題は、PL/SQL、SQLおよびDDL言語をすぐに解析しようとしていることです。しかし、これらの文法では、下に別のレクサーを使うべきです。 – ibre5041

答えて

1

このようなパッケージ定義:

package_name 
    : id ('.' id_expression)? 
    ; 

は、次のPL/SQLクエリにうまく機能している:

CREATE OR REPLACE PACKAGE BODY SCHEMA_NAME.PACKAGE_NAME AS END; 

私はあなたが最後にENDやセミコロンを忘れてしまったとします。

また、このPL/SQL文法がすでにコメントに記載されているため、このPL/SQL文法が完了していないため、問題またはプルリクエストを公式のANTLR文法リポジトリに追加してください。

関連する問題