ここ数週間、私はSQLステートメントを解析して扱いやすいものにするという美しい世界に飛び込んできましたが、許可されたすべてのトークン/フォーマットを適切に処理するには、おそらく完全なレクサー/パーサーが必要になることがわかりました。同じこと。
私は主に create table ステートメントに興味がありますが、完全な汎用パーサーはさらに優れているでしょう。これは、Web 上の誰もまだこれを持っていないようです。
私はコンピューターの卒業生ではありませんが、独学なので、これは私にとってかなりの学習曲線です。私が取った手順は次のとおりです。
- 正規表現でSQLを解析する
- 失敗しました。正規表現を修正してください
- さらに悪いことに、SQLite ソースを掘り下げて、SQLite 固有のプロジェクトである Lemon パーサーを使用していることを確認します。
- 手動でjsに変換できると考えて、Lemon + PHPパーサーを機能させてみてください。(失敗した)
- Emscripten に、Lemon で生成された C のパーサーを動作させるようにしてください (依存関係の地獄、失敗しました)。
- 他のパーサー/レクサー ジェネレーターを検索します。ANTLR3 に注意してください。
- 出力形式を変更し、エラーをバックトレースすることによって、 Sqljet 言語ファイルを JavaScript に変換するために昼夜を問わず試みます。
私は優れたAntlrWorks GUI を使用して何が問題なのかを突き止めようとしましたが、壊れているのが Javascript スタックなのか、Java スタックなのか、それとも .g 形式が v2 の古い形式なのかはわかりません。
適切な再利用可能な Sqlite パーサーを生成するための正しい方向性を教えてくれるパーサー/レクサー ジェネレーターの経験を持つ人はいますか? mysql と pl/sql の両方のパーサーを JavaScript で生成できるようです。それは、sqlite .g 形式を更新する必要があるということですか?