問題タブ [lexical-analysis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
parsing - Flex を使用して 2 パス スキャナーを実装するにはどうすればよいですか?
ペット プロジェクトとして、Web スクリプト言語として使用できる、独自の設計による基本的な言語の実装を試みたいと考えています。C++ プログラムを Apache CGI として実行するのは簡単なので、実際の作業は、非コード (HTML/CSS マークアップ) とサーバー側コードを含む入力ファイルを解析する方法にあります。
学部生のコンパイラ コースでは、FlexとBisonを使用して、単純な言語のスキャナーとパーサーを生成しました。私たちは文法のコピーを受け取り、単純な言語を仮想マシン用の単純なアセンブリに変換するパーサーを作成しました。flex スキャナーは入力をトークン化し、トークンを Bison パーサーに渡します。
それと私がやりたいことの違いは、PHP のように、この言語にはプレーンな HTML マークアップと、次のように散在するスクリプト言語を含めることができるということです。
次のように入力ファイルを解析するのが効率的であると仮定するのは間違っていますか?
- スクリプト開始タグが見つかるまで入力をスキャンします ('
- 2 番目のスキャナーは、入力ファイルのサーバー側スクリプト セクションを (開始タグ: '' から) トークン化し、そのトークンをパーサーに渡します。パーサーは、ファイル内のマークアップについて知る必要はありません。
- 制御は、この一般的なパターンを継続する最初のスキャナーに戻されます。
基本的に、最初のスキャナーは、マークアップ (変更されずにブラウザーに直接返される) と、2 番目のスキャナーに渡されるコードのみを区別します。2 番目のスキャナーは、コードをトークン化し、トークンをパーサーに渡します。
これが堅実な設計パターンでない場合、PHP などの言語はどのようにして入力のスキャンとコードの解析を効率的に処理するのでしょうか?
c# - 優れた C#/.NET ベースの字句解析器に関する推奨事項
できれば C# で記述された、.NET ベースの優れた字句解析器を推奨できる人はいますか?
python - Pythonで複数の正規表現を効率的に照合する
正規表現がある場合、字句アナライザーは非常に簡単に記述できます。今日、私はPythonで簡単な汎用アナライザーを作成したいと思い、次のことを思いつきました。
それは問題なく動作しますが、非効率的すぎるのではないかと少し心配しています。より効率的でエレガントな方法でそれを書くことを可能にする正規表現のトリックはありますか?
具体的には、すべての正規表現ルールを直線的にループして、適切なものを見つけることを回避する方法はありますか?
c# - C#/.NET レクサー ジェネレーター
C#/.NET 用のまともな字句スキャナ ジェネレータを探しています。これは、Unicode 文字カテゴリをサポートし、ある程度読みやすく効率的なコードを生成するものです。誰か知っていますか?
編集: Unicode 文字だけでなく、 Unicode カテゴリのサポートが必要です。現在、(文字、大文字) カテゴリだけで 1421 文字あります。さまざまなカテゴリを非常に具体的に一致させる必要があり、それに必要な文字セットを手書きしたくありません。Lu
また、実際のコードは必須です。これにより、ドライバで使用されるバイナリ ファイルを生成するものが除外されます (つまり、GOLD)。
編集: ANTLR はまだ Unicode カテゴリをサポートしていません。ただし、未解決の問題があるため、いつか私のニーズに合うかもしれません。
regex - flex (語彙アナライザー) 正規表現 - 定義の再利用
私はこの作業定義を持っています:
[a-zA-Z] と [0-9] を繰り返したくないので、2 つの新しい定義を作成しました。
DIGIT および VALID 定義を使用するように IDENTIFIER ルールを書き直すにはどうすればよいですか?
「2番目」の一致を行う方法がわかりません。ここで立ち往生しています:
ありがとう。
編集:私が使用しているテスト プログラム全体: http://pastebin.com/f5b64183f。
erlang - Erlang/OTP にはどのようなプロファイラーとアナライザーがありますか?
Erlang 用の優れたコード プロファイラー/アナライザーはありますか? コードの呼び出しグラフ (gprof など) を作成できるものが必要です。
algorithm - テキスト分析用のアルゴリズムまたはライブラリ。具体的には、主要な単語、テキスト全体のフレーズ、およびテキストのコレクションです。
私は、テキストのページとテキストのページのコレクションを分析して支配的な単語を判断する必要があるプロジェクトに取り組んでいます。私のために面倒な作業を処理するライブラリ (C# または Java を優先) があるかどうかを知りたいです。そうでない場合、以下の私の目標を達成するアルゴリズムまたは倍数はありますか。
私がやりたいことは、Web で見つけた URL や RSS フィードから作成されたワード クラウドに似ていますが、視覚化は必要ありません。それらは、大統領候補のスピーチを分析して、テーマや最も使用されている言葉が何であるかを確認するために常に使用されます.
複雑なのは、何千もの短いドキュメントに対してこれを行う必要があり、次にこれらのドキュメントのコレクションまたはカテゴリに対して行う必要があることです。
私の最初の計画は、ドキュメントを解析してから、一般的な単語 (of、the、he、she など) をフィルター処理することでした。次に、残りの単語がテキスト (およびコレクション/カテゴリ全体) に表示される回数を数えます。
問題は、将来、ステミング、複数形などを処理したいということです。また、重要なフレーズを識別する方法があるかどうかも確認したいと思います。(単語の数ではなく、フレーズの数は 2 ~ 3 語をまとめたものです)
役立つ戦略、ライブラリ、またはアルゴリズムに関するガイダンスをいただければ幸いです。
programming-languages - オフサイドのルールをどのように実装しますか?
トリックを実行するジェネレーターを既に作成しましたが、オフサイドルールを実装するための最良の方法を知りたいです。
手短に:オフサイド ルールとは、このコンテキストでは、インデントが構文要素として認識されることを意味します。
これは、使用可能な形式でインデントをキャプチャするトークナイザーを作成するための疑似コードのオフサイド ルールです。言語によって回答を制限したくありません。
このレイアウタは、一度に複数の NEWLINE を生成することはなく、インデントが発生しても NEWLINE を生成しません。したがって、解析ルールは非常に単純なままです。かなり良いと思いますが、それを達成するためのより良い方法があればお知らせください。
しばらくこれを使用しているうちに、DEDENT の後にとにかく改行を発行するのが良いことに気付きました。この方法では、INDENT DEDENT を式のトレーラーとして保持しながら、NEWLINE で式を区切ることができます。
programming-languages - スコープ アナライザーに適した API
私はいくつかのコード生成ツールに取り組んでいますが、多くの複雑さはスコープ分析を行うことから生じます。などのことを知りたいと思うことがよくあります。
- 関数またはブロックの自由変数とは?
- このシンボルはどこで宣言されていますか?
- この宣言は何を覆っていますか?
- このシンボルの使用は、初期化の前に発生する可能性がありますか?
- この変数は潜在的にエスケープしますか?
そして、私のスコーピングクラッジを再考する時が来たと思います.
私はこの分析をすべて行うことができますが、使いやすく、理想的には、この作業を十分に遅延して実行できるように、API を構造化する方法を見つけようとしています。
人々がよく知っているこのようなツールは何ですか?また、API で何が正しく行われ、何が間違っていたのでしょうか?
parsing - flex/lex で単語境界状態を実装する (パーサージェネレーター)
パターン マッチが単語の文字の後に発生するか、単語以外の文字の後に発生するかについて述語できるようにしたいと考えています。つまり、flex/lex がサポートしていないパターンの先頭にある \b word break regex char をシミュレートしたいのです。
以下は私の試みです(これは希望どおりに機能しません):
入力:
期待される出力
実際の出力:
私がこれを行っているのは、ダイアレクタイザーのようなことをしたいからであり、実際のレクサーの使用方法を常に学びたいと思っていました。置き換えたいパターンは単語の断片である必要がある場合もあれば、単語全体のみである必要がある場合もあります。