ユーザーが完全に JavaScript で記述された UI の一連の指示を定義する必要があるプロジェクトがあります。一連の命令を解析し、それらを命令に変換する機能が必要です。100% JavaScript の解析用ライブラリはありますか? それともJavaScriptで生成するジェネレーターですか? ありがとう!
10 に答える
http://jscc.phorward-software.com/のようなものでしょうか?
JS/CC は、 JavaScript および ECMAScript派生物用の最初の利用可能なパーサー開発システムです。これは、生産的なコンパイラ開発システムを構築する目的と、ボトムアップ解析で一般的に行われる解析テーブルの生成方法に関心のある人々にとって使いやすい学術環境を作成する目的の両方で開発されました。
プラットフォームに依存しないソフトウェアは、入力文字ストリームからの個々のトークンに一致する正規表現ベースの語彙アナライザー ジェネレーターとLALR ( 1 )パーサージェネレーターの両方を結合し、特定の文脈自由文法仕様の解析テーブルを計算し、スタンドを構築します。単独で動作するパーサー。JS/CC に供給される文脈自由文法は、Backus-Naur-Formベースのメタ言語で定義されており、個々のセマンティック コードの挿入をルールの縮小で評価できます。
JS/CC 自体は完全に ECMAScript で記述されているため、さまざまな方法で実行できます。Web サイトに埋め込まれたプラットフォームに依存しないブラウザーベースの JavaScript として、Windows スクリプト ホスト アプリケーションとして、コンパイル済みの JScript.NET 実行可能ファイルとして、 Mozilla/Rhino または Mozilla/Spidermonkey によって解釈されるアプリケーション、または Windows、*nix、Linux、および Mac OSX 上の V8 シェル スクリプト。ただし、生産的な実行のためには、コマンドライン バージョンを使用することをお勧めします。これらのバージョンは、JS/CC パーサー仕様から完全なコンパイラーを組み立てることができ、.js JavaScript ソース ファイルに保存されます。
JavaScript パーサーとコード ジェネレーターを構築する場合は、Javascript での MetaII 実装を確認してください。
MetaII Compiler のチュートリアルでは、それ自体と他の言語を翻訳できる完全に自己完結型のコンパイラ システムを構築する方法について説明します。
これはすべて、Val Schorre による驚くべき小さな 10 ページのテクニカル ペーパーに基づいています: META II: A Syntax-Oriented Compiler Writing Language from 正直者 1964. MetaII コンパイラの完全な自己記述は約 30 行です! 私は 1970 年にコンパイラを構築する方法を学びました。コンパイラがどのように自分自身を再生成できるかを最終的に理解したとき、衝撃的な瞬間があります....
このチュートリアルでは、MetaII とその仕組みについて説明し、MetaII を JavaScript にコンパイルする MetaII を実装します。このコンパイラを簡単に変更して、他の言語を解析し、さまざまな Javascript を生成できます。
私は大学時代からウェブサイトの作者を知っていますが、ウェブサイトとは何の関係もありません。
Jison はおそらく、Javascript 用のレクサーおよびパーサー ジェネレーターの中で最も優れた、最もアクティブなジェネレーターです。バイソンとヤックを模倣しています。
ジソン: http://zaach.github.io/jison/
軽量のレクサー (~100 sloc) だけが必要な場合は、Lexed.js を参照してください: https://github.com/tantaman/lexed.js
単純な解析タスクでは、Pratt のTop Down Operator Precedence parserのバリアントを使用するのが好きです。Pratt は古い Lisp 方言を使用して元の論文を書きましたが、同じ概念はほとんどの言語で簡単に使用できます。実際、Douglas Crockford がTop Down Operator Precedence parsing in JavaScriptに関する優れた記事を書いています。
レクサーが必要で、レクサーだけが必要な場合は、https ://github.com/aaditmshah/lexerをご覧ください。
これは純粋なJavaScriptレクサーであり、わずか数行のコードで多くの強力な機能が記述されています。
eval
「一連の命令」の設計によっては、 Javascript ソースを解析する Javascript の組み込み関数を使用できる場合があります。命令を Javascript コードに変換する簡単なトランスレータを作成できる場合があります。
ところで、XSS ホールには十分注意してください。
Antlr バージョン 4.5にはJavascript ターゲットが追加されました。
本当にレクサーだけを探している場合は、prettifyを試してください。
セキュリティ ホールのない同様のものを探していたところ、2 つのリソースに出会いました。スクリプトは解析されませんが、実際には「安全な」環境で実行されます。これは、eval
関数を使用するときに保証できないものです。だから、それがあなたが探しているものかどうかはわかりませんが、見てください:
- jsandbox - Javascript サンドボックス
- Google Caja - 仮想 iframe。