おはようございます。
タスクは抽象として指定されました。 誰かが実際の応用を見つけるかもしれないけれども、解決の方法を習得するために。
最初は、SQL開発者としてオフィスに来たときにアイデアが生まれました。 数百のストアドプロシージャ、破損したドキュメント、テーブル間のリンクはありませんでした。
ビジネスに。 Antlrとコード例のさらなる使用。
foxclub.ruと
KvanTTTの同僚からの批判とこれに感謝します。
はい。Visitorテンプレートでacceptメソッドを使用する理由がわかりません。
現在の訪問を使用*
回答KvanTTT
-あなたはそれを必要としません、なぜなら 生成されたコードで使用され、必要なVisitメソッドを呼び出します。
Antlr-このことは、デフォルトではjavaの異なる言語でレクサーとパーサーを生成します。
antlr自体のアセンブリ
set PATH=c:\apache-maven-3.3.9\bin\;%PATH% rem mvn -DskipTests install mvn install -DskipTests=true
ビルドc:\ dev \ antlr4 \ runtime \ CSharp \ runtime \ CSharp \ Antlr4.vs2013.sln
tsql.g4(antlrのSQL文法ファイル)に追加します。
options { language = CSharp; }
gen_csharp.cmdを使用してパーサーを生成します
java -jar c:\dev\antlr4\tool\target\antlr4-4.7-SNAPSHOT-complete.jar -o Generated_Csharp tsql.g4 rem java -jar c:\antlrworks2\antlrworks2\modules\ext\antlr4.jar -o Generated_Csharp tsql.g4 pause
8つのファイルを
tsqlBaseListener.cs, tsqlBaseVisitor.cs, tsqlLexer.cs, tsqlListener.cs, tsqlParser.cs, tsqlVisitor.cs, tsql.tokens, tsqlLexer.tokens
ます:
tsqlBaseListener.cs, tsqlBaseVisitor.cs, tsqlLexer.cs, tsqlListener.cs, tsqlParser.cs, tsqlVisitor.cs, tsql.tokens, tsqlLexer.tokens
プロジェクトを作成し、受信したファイルとそのリンクを追加します
c:\dev\antlr4\runtime\CSharp\runtime\CSharp\Antlr4.Runtime\bin\net35\Release\Antlr4.Runtime.dll
それでは、パーサーコードを修正します...
Antlrは、リスナーと訪問者から選択する2つのデザインパターンを提供します。
最初に訪問者に対処しようとしましたが、判明したように、構文エラーを含む可能性のある絶えず変更されるコードに使用されることが多く、メソッドは分析の結果を返します。
そして、T-SQLストアドプロシージャはコンパイルされます。 静的であり、構文エラーは含まれていません。 はい、リスナーを使用して記述するコードを減らします。 最後にVisitorにクロールコードを追加します。
したがって、リスナーを使用したプログラムProgram.cs
using System; using System.IO; using Antlr4.Runtime; using Antlr4.Runtime.Misc; namespace tsql1 { class Program { static void Main(string[] args) {
入力データ:
select * from t1, t2 where t1.id = t2.id SELECT p.* FROM Production.Product AS p ORDER BY Name ASC; GO select * from zxc as t1 inner join qwe t2 on t1.id = t2.id inner join asd t3 on t3.id = t2.id ...
出力例:
Tsql_fileContext1.ChildCount = 105 Select_statement Table_sources t1 Table_sources t2 Search_condition t1.id=t2.id Select_statement Select_statement Table_sources zxc alias=t1 Table_sources qwe alias=t2 Search_condition t1.id=t2.id Table_sources asd alias=t3 Search_condition t3.id=t2.id ...
この結果は、必要に応じてExcelで分解できます。
それだけです
強く叩かないでください。 たぶん私は何かを忘れていたかもしれません。
GitHubでの
antlrの文法
pastebinでのT-SQLの古い文法
antlr.orgの
Antlr訪問者のクロールコード using System; using System.IO; using Antlr4.Runtime; using Antlr4.Runtime.Misc; namespace tsql1 { class Program { static void Main(string[] args) {