1

私は、(X)HTML5 および埋め込まれている可能性のあるもの (EcmaScript、CSS) 用に (C# で) 独自のカスタム パーサーを作成しようとしています - ただ学び、楽しむためです。私は中級プログラマーですが、パーサーやすべての技術的なことについてはあまり知りません。HTML5 用の語彙アナライザー (トークナイザー) はかなり簡単に作成できますが、構文解析 (構文解析) は少しトリッキーです。最初にすべてのソース入力を字句解析してから、もう一方を実行するか、両方を同時に試行する必要があるかどうかはわかりません。トークンを取得するまでcharを取得し、トークンが構文的に何を意味するかを理解してから、前のトークンに関連する特定のトークンを期待します。私が直面している問題は、HTML には CSS や JavaScript などの他の言語が埋め込まれている可能性があり、私が見る限り、トークンのカテゴリが異なることです。トークンが「何であるか」のさまざまな定義を持つためにコードをトークン化するときに、コード内のどこにいるのかを「知る」方法がわかりません。何かご意見は?また、最初に語彙的に分析し、次に構文的に分析することと、両方を同時に分析することの利点/欠点は何ですか?

4

2 に答える 2

2

これが純粋に解析に関するあなた自身の教育のためである場合は、 HTML 、 CSS および JS 解析よりもはるかに小さい/簡単なフィールドを追加することをお勧めします。取り組む。

おそらく、Scheme または Basic に基づく言語が最初の選択になるでしょう。(個人的なお気に入りは、 http://mitpress.mit.edu/sicp/full-text/book/book-ZH-10.htmlをたどりながらパーサー/インタープリターを構築することです)

(また、Modern Complier Design のようなもののコピーを取得しても問題はありません: http://www.amazon.com/Modern-Compiler-Design-D-Grune/dp/0471976970 )

あなたの関心を維持するために Web 関連でなければならない場合は、sass ( http://sass-lang.com )などの小さな Web 関連言語の 1 つに対してパーサーを実行することに挑戦します。

一方、これが特定のものを本当に解析する必要がある作業に関連するものである場合は、独自のパーサーを完全に作成する作業をスキップして、Razor や Chromium ライブラリなどにフックすることをお勧めします。

そして、あなたの質問の少なくとも後半に直接答えるには、常に、解析/解釈のさまざまなフェーズを可能な限り互いに分割することをお勧めします。

各問題は、「賢すぎる」ことを試みたり、機能を 1 つのスイープに結合しようとしたりしなくても、それ自体で十分に困難です。

可能な限り、物事をできるだけ高レベルで抽象的で「クリーン」に保つことをお勧めします...したがって、特に字句解析用のノードのツリーと構文解析用の別のノードのツリーを構築します...そしてHTMLとして結合された言語の場合、CSS および JS、それぞれに異なる AST および解析コード。

于 2012-08-31T03:11:49.467 に答える
0

HTMLとJavacript処理の完全な概念をカバーするUdacityという[1]という素晴らしいコースがあります。Programming Languages

字句解析、構文解析、および解釈について詳しく説明します。これはJavascriptのサブセットのみを対象としているため、コースを終了した後はさらに開発を進める必要がありますが、一般的な構造と概念を習得しているはずです。

[1] http://www.udacity.com/overview/Course/cs262/CourseRev/apr2012

于 2012-08-31T08:39:52.957 に答える