問題タブ [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.
javascript - Javascriptで書かれたレクサー?
ユーザーが完全に JavaScript で記述された UI の一連の指示を定義する必要があるプロジェクトがあります。一連の命令を解析し、それらを命令に変換する機能が必要です。100% JavaScript の解析用ライブラリはありますか? それともJavaScriptで生成するジェネレーターですか? ありがとう!
c++ - ANTLR3.2でのC++コード生成の準備はできていますか?
私はANTLR3.2がC++でパーサー/レクサーを生成するように一生懸命努力していました。それは無益でした。しかし、JavaとCはうまくいきました。
私はこのチュートリアルを使用して開始しました:http ://www.ibm.com/developerworks/aix/library/au-c_plusplus_antlr/index.html
* .stgファイルを確認したところ、次のことがわかりました。
CPPには
Cには非常に多くのファイルがあります。
そして他の言語。
私のCgファイル:
エラー:
... 等々。
ご教授ください。ありがとうございました!Leopard10.5.8を使用しています
whitespace - 空白を削除しますが、残りますか?
スコープに中かっこを使用しないため、場合によっては空白に依存するLuaを解析しようとしています。別のルールが一致しない場合にのみ空白を捨てるのが最善の方法だと思いますが、それを行う方法がわかりません。誰かが私を助けることができますか?
java - スクリプトの照合に Scanner/Parser/Lexer を使用する
Java で実装された JavaScript コレーター/コンポジターに取り組んでいます。それは機能しますが、それを実装するためのより良い方法が必要であり、レクサーが前進する方法かもしれないと思いますが、私は少しあいまいです.
JavaScript 言語のサブセットであるコンポジターのメタ構文を開発しました。典型的な JavaScript インタープリターに関する限り、コンポジターのメタ構文は有効ですが、機能しません (コンポジターが解釈するはずのコード ブロックが後に続くラベルとして、予約語の同義語を使用しています)。現在、スキャナーと正規表現を使用してソース ファイル内のメタ構文を検出し、法的な表現の検出に基づいて浅い字句変換を行っています。
書き直された JavaScript とスキャナー/パーサーの間には密接な関係がありますが、これは満足のいくものではありません。書き直された JavaScript は、この目的のために特別に作成されたオブジェクト サポート ライブラリの機能を使用しており、そのライブラリは変更される可能性があります。
Backaus-Naur または EBNF でメタ構文だけを宣言し、それをレクサー (ANTRL?) にフィードし、ソース ファイルで検出されたメタ構文式に基づいて、コンポジターに特定のアクションを指示できることを願っています。必要なスクリプトを別のスクリプトに追加したり、変数を宣言したり、適切にパラメータ化されたライブラリ関数呼び出し用のテキストを生成したり、スクリプトを圧縮したりします。
これはコンポジターを作成する適切な方法ですか? JavaScript を合成するためにスキャナー/パーサー/レクサーのアプローチを使用する必要がありますか? フィードバックをいただければ幸いです。どこから始めればよいかわかりません :)
更新: これは、より具体的な例です-メタ構文を使用したサンプルオブジェクト宣言:
これは、オブジェクト ie.ondevice.Example を記述します。これは、Mixin を継承し、TraitsDeclaration に似ています (つまり、「同じ関数と特性を実装します」)。コンポジターは use ステートメントを検出し、名前空間が有効なファイルの場所にマップされていない場合は失敗します。そうでない場合は、オブジェクト宣言が存在するスクリプトの先頭に追加し、照合前にメタ構文を前処理します。
私が言及したオブジェクト サポート ライブラリの観点から表現された書き換え規則は、次のようなファイルになります(私はオブジェクトを表現する方法をいくつか開発しました)。
おそらく私は自分の要件を設計しすぎていますが、私が本当に欲しいのは、イベント駆動型のコレーターです。リスナーは、ディレクティブ検出に疎結合できます。
parsing - (非) 構造化テキスト文書のレクサー / パーサー
スクリプト (つまり、構造化されたコンピューター言語) 用のパーサーとレクサーは多数あります。しかし、(ほとんど) 構造化されていないテキスト文書をより大きなセクション (章、段落など) に分割できるものを探しています。
人がそれらを特定するのは比較的簡単です。目次、謝辞、または本文の開始場所であり、ルールベースのシステムを構築して、これらの一部 (段落など) を特定することができます。
私はそれが完璧であるとは思っていませんが、そのような幅広い「ブロックベース」のレクサー/パーサーを知っている人はいますか? または、役立つ可能性のある文学の方向性を教えていただけますか?
c++ - Cヘッダーファイルで定義されたトークン列挙リストを自動的に使用するバイソンファイルを作成する方法は?
別のモジュールによって行われたトークンのフローを解析できるように、Bison/Yacc を使用してパーサーを構築しようとしています。トークンは、次のように列挙型に既にリストされています。
bison のドキュメントを何度も読みましたが、次のように Bison ファイル内の各トークンをコピーするよりも良い解決策を見つけることができませんでした。
そうしなければならない場合、他のモジュールの仕様が変更されると、ファイルを維持するのがかなり難しくなります(これはかなり頻繁に発生します)。
方法を教えてください。または、良い方向に向けてください (アイデアやコメントは大歓迎です)。それは私を大いに助けるでしょう!前もって感謝します。
java - 多くの言語ソース ファイルから識別子を削除するために使用できる適切なレクサー ジェネレーターは何ですか?
私は自分の大学のグループ プロジェクトに取り組んでおり、これはコンピュータ サイエンスの剽窃検出に使用される予定です。
私のグループは主に、次のジャーナル記事で説明されているハッシュ/フィンガープリント手法から離れています: Winnowing: Local Algorithms for Document Fingerprinting . これは、 MOSS盗作検出システムの仕組みと非常によく似ています。
私たちは基本的に、仲間の学生のソース コードの k-gram ハッシュを取得し、関連する一致をデータベースで検索します (ドキュメントのフィンガープリントとして選択するハッシュを決定する方法の多くの最適化と共に)。
私たちのプロジェクトの最初の側面は、検出システムが処理できる各ファイル形式に関するセマンティックな知識を保持する「フロントエンド」部分です。これにより、剽窃検出の目的で不要になったドキュメントから詳細を取り除くことができます。基本的に、さまざまなプログラミング言語のすべての変数の名前を定数文字列または文字に変更できるようにしたいと考えています。
さまざまな言語のソース コード ファイル内のすべての変数の名前を定数に変更するために使用できる軽量のソリューション (レクサー ジェネレーターなど) は何ですか?
私たちのプロジェクトはJavaで書かれています。
理想的には、言語ごとに文法を定義できるようにしたいだけで、フロント エンドはその言語のソース ファイル内のすべての識別子の名前を何らかの定数に変更できるようになります。次に、サポートしたいファイル形式 (Java、C++、Python など) ごとにこれを行います。
java - 変換をまたいで文字列内の元の文字位置を追跡するにはどうすればよいですか?
CSクラスの剽窃防止プロジェクトに取り組んでいます。これには、 「Winnowing: Document Fingerprinting のためのローカル アルゴリズム」で説明されている手法を使用して、コンピューター サイエンスのコース (プログラミングの課題) で盗作を検出することが含まれます。
基本的に、私はプログラミング課題のグループを取っています。割り当ての 1 つが次のようになっているとします。
これは、フロントエンドの字句解析部分を実行して、不要なコードの機能を取り除く必要があります。この例では、すべての識別子の名前を定数 "V" に変更し、コードからすべてのコメントを削除します。
これを行うには、ANTLRとさまざまな言語の既存の文法を使用して、適切なレクサーを生成します。
最終結果は次のとおりです。
次に、すべての空白を削除して取得します。
この文字列は、事前設定されたサイズの k グラムに分割されます。たとえば、k = 5 とします (実際にはもっと大きくなります)。
問題は次のとおりです。
各 k-gram はローリング ハッシュ関数でハッシュされ、ソース テキスト内の元の文字位置で記録されることになっています。k-gram ハッシュと文字位置が一緒になってフィンガープリントを形成します。
識別子、コメント、および空白のすべてのフロントエンドストリッピングにわたって、ソーステキスト内の k-grams の元の位置を追跡するにはどうすればよいですか?
これは、元のソース テキスト内のドキュメントのペアで一致を強調表示するプログラムの最終フェーズに不可欠です。k-gram ハッシュの一致を強調するには、その k-gram が元のソースのどこで始まりどこで終わるかを知る必要があります。
programming-languages - 一部の言語では、呼び出す前に関数をコードで宣言する必要があるのはなぜですか?
この擬似コードがあるとします
一部のプログラミング言語では、コードを実行するために do_something() の呼び出しを関数宣言の下に置く必要があるのはなぜですか?
parsing - Antlr3-パーサーのHIDDENトークン
パーサーの単一のルールの非表示チャネルのレクサーで定義されたトークンを、通常のトークンであるかのように使用できますか?生成されたコードはJavaです...
ありがとう