問題タブ [lexer]
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 - 字句解析によるテキスト句の「ムード」の判別
テキストの短いフレーズにスコア (ポジティブ、ネガティブ、またはニュートラル) を適用しようとしています。顔文字を解析し、その使用法に基づいて推測する以外に、他に何を試せばよいかわかりません。この問題をより語彙的に分析した例、研究論文、記事などを提供できる人はいますか。
副詞の使用、句読点の誤用/繰り返し、スペル/文法の誤りなどはすべて、ほぼバイナリの意味で (良いか悪いか) 著者の気分の適切な指標になる可能性があると考えています。
regex - Lua の「長括弧」文字列構文の一致
Lua 用の jFlex lexer を作成していますが、言語仕様の特定の部分に一致するように正規表現を設計する際に問題が発生しています。
リテラル文字列は、長い括弧で囲まれた長い形式を使用して定義することもできます。レベル n の左長い括弧は、左角括弧の後に n 個の等号が続き、その後に別の左角括弧が続くものとして定義します。したがって、レベル 0 の左大括弧は [[ と記述され、レベル 1 の左大括弧は [=[ と記述されます。以下同様です。閉じ長括弧も同様に定義されます。たとえば、レベル 4 の閉じ長括弧は ]====] のように記述されます。長い文字列は、任意のレベルの左長い括弧で始まり、同じレベルの最初の長い閉じ括弧で終わります。このブラケット形式のリテラルは、複数行にわたって実行でき、エスケープ シーケンスを解釈せず、他のレベルの長いブラケットを無視します。適切なレベルの閉じ括弧以外は何でも含めることができます。
一言で言えば、長い開き括弧、その間の文字列の内容、長い閉じ括弧に一致する正規表現を設計しようとしています。開始長括弧と終了長括弧の等号の数が同じである場合にのみ、一致が発生する必要があります。
python - マークアップされたテキストを解析してさらに処理するにはどうすればよいですか?
Edit-1 で更新された入力データと出力データを参照してください。
私が達成しようとしているのは
次のようなPythonデータ構造に
私はさまざまなウィキ マークアップ言語、マークダウン、再構成されたテキストなどを見てきましたが、大量のタグと構文をカバーする必要があるため、どのように機能するかを理解するのは非常に複雑です (「リスト」のみが必要です)。これらのほとんどの部分ですが、もちろん html ではなく python に変換されています。)
トークナイザー、レクサー、パーサーも調べましたが、これらは必要以上に複雑であり、理解できます。
どこから始めればよいかわかりません。この件に関して可能な限りの助けをいただければ幸いです。ありがとう
Edit-1 : はい、行頭の文字が重要です。以前の必要な出力から、*
は子を持つルート ノードを示し、+には子があり、-には子がありません (ルートまたはその他) ) であり、そのノードに関する単なる追加情報です。は重要ではなく、 +*
と交換できます(他の方法で root ステータスを取得できます)。
*
したがって、新しい要件は、子を持つノードまたは持たないノードを示すためだけに使用され、子を持つことはできません。私もそれを変更したので、キーは後のテキストではなく、*
後で実際のタイトルに変更されることは間違いありません.
例えば
与えるだろう
または、Python でアウトラインを表現する別のアイデアがある場合は、それを提案してください。
.net - .NET 用の優れたパーサー ジェネレーター (lex/yacc または antlr を考えてください)? ビルド時だけ?
.NET 用の優れたパーサー ジェネレーター (lex/yacc または antlr を考えてください) はありますか? 弁護士を怖がらせないライセンスを持っている人はいますか? 多くの LGPL がありますが、私は組み込みコンポーネントに取り組んでおり、一部の組織は私が LGPL に依存することを快く思っていません。
Oslo がこの機能を提供する可能性があると聞いたことがありますが、それがビルド時の依存関係なのか、それともランタイムの依存関係なのかはわかりません。オスロが提供するものを誰か明確にしてもらえますか?
更新
私が本当に欲しいのは、ビルド時のみの依存関係であるパーサージェネレーターです。ANTLR にはランタイム コンポーネントがあるようです。
c# - .NET でのパーサーの使い方
ソース ファイルを処理するために .NET でパーサーを構築する方法を理解したいと思います。たとえば、SQL、HTML、または CSS を解析する方法を学ぶことから始めて、結果に基づいて読みやすくするなどの書式を設定できるようにすることもできます。
これを行う方法はどこで学べますか? 参照できる特定の本はありますか?レクサー/パーサーについて学ぶ必要がありますか?
私は C# に慣れているので、特に .NET プラットフォーム用です。
javascript - 本格的なレクサーなしで文字列をトークン化できる簡単な方法はありますか?
操車場アルゴリズムの実装を検討していますが、文字列をトークンに分割するための最良の方法を理解するための支援が必要です。
お気づきの方もいらっしゃると思いますが、アルゴリズムの最初のステップは「トークンの読み取り」です。これは、簡単なことではありません。トークンは、数値、演算子、および親で構成できます。
次のようなことをしている場合:
(5 + 1)
単純なstring.split()は、トークンの配列{"("、 "5"、 "+"、 "1"、 ")"}を提供します。
ただし、次のように複数桁の数字がある場合は、さらに複雑になります。
((2048 * 124)+ 42)
これで、単純なstring.split()はうまくいきません。複数桁の数字が問題です。
レクサーを作成できることは知っていますが、本格的なレクサーを作成せずにこれを行う方法はありますか?
私はこれをJavaScriptで実装しており、可能であればレクサーパスをたどる必要がないようにしたいと思います。「*」、「+」、「-」、「/」の演算子を整数とともに使用します。
haskell - Haskellレクサーの問題
私はhaskellでレクサーを書いています。コードは次のとおりです。
私が抱えている問題は2つあります。1つは、正規表現番号"^[0-9]*(\.[0-9]+)?"
がこのエラーをスローすることです。
そして、それを含む行とそれを使用する関数の一部をコメントアウトすると、次のエラーが発生します。
なぜこれらのエラーのいずれかが発生するのかわかりません。誰かが私を助けることができますか?
c++ - C++ で PL/SQL ステートメント文字列を変更する
これが私の使用例です。入力は、任意の複雑さのOracle PL/SQL ステートメントを表す文字列です。これは (スクリプトではなく) 単一のステートメントであると想定できます。ここで、この入力文字列のいくつかのビットを書き換える必要があります。
たとえば、テーブル名にはプレフィックスを付ける必要があり、列エイリアスを使用しない選択リスト内の集計関数にはデフォルトのエイリアスを割り当てる必要があります。
になる
(免責事項:問題を説明するためだけに、ステートメントは意味をなさない)
集約関数はネストされている可能性があり、subSELECT は b_tch であるため、正規表現はあえて使用しません。実際、私は 80% の成功を達成しましたが、残りの 20% が必要です。
正しいアプローチは、文法とパーサーを使用することだと思います。私はc ++ ANTLR2をいじりました(ただし、文法やそのような助けを借りた解析についてはあまり知りません)。SQL ビットを取得する簡単な方法がわかりません。
「解析の専門家」がこの問題をどのように追求するかについて、誰かがいくつかの指針を提供できますか? 編集:私はOracle 9iを使用しています。
antlr - Antlr には、レクサーが特定のルールの間だけトークンを照合できるようにするメカニズムはありますか?
私の言語にキーワードを追加したいと思います。
このキーワードは、1 つの特定のパーサー文法規則でのみ一致する必要があります。
下位互換性のため、このキーワードを引き続き変数名として使用できるようにしたいと思います。つまり、トークンが変数名に適しているかどうかを判断するレクサー規則に一致させることができます。
レクサーは、新しいルールがファイル内で見つかるたびに一致させます。
IDENT または新しい KEYWORD トークンのいずれかに一致するように var_declaration ルールを変更するために、これを回避する適切な方法はありますか?
関連するルールは次のとおりです。
変数を作成するためのパーサー規則は次のとおりです。
python - PLYを使用した1つのパーサーに対して複数のレクサー?
Linuxカーネルの構成オプションを生成するために使用されるKconfig言語のPLYを使用して、pythonパーサーを実装しようとしています。
包含を実行する source というキーワードがあるので、レクサーがこのキーワードに遭遇すると、レクサーの状態を変更して、ソースファイルをレクシングする新しいレクサーを作成します。
他のどこかにこの行があります
これは、パーサーによって呼び出される「メイン」または「ルート」レクサーです。
私の問題は、パーサーに別のレクサーを使用するように指示する方法や、「source_lexer」に何かを返すように指示する方法がわからないことです...
たぶん、クローン機能を使用する必要があります...
ありがとう