web-dev-qa-db-ja.com

Javascriptで書かれたレクサー?

ユーザーが完全にjavascriptで記述されたUIの一連の命令を定義する必要があるプロジェクトがあります。一連の命令を解析してから、それらを命令に変換する機能が必要です。 100%javascriptである解析用のライブラリはありますか?または、JavaScriptで生成するジェネレーターですか?ありがとう!

28
Phobis

http://jscc.phorward-software.com/ のようなもの、多分?

JS/CCは、 JavaScriptおよびECMAScript -派生物で利用可能な最初のパーサー開発システムです。これは、生産的なコンパイラ開発システムを構築することと、ボトムアップ構文解析で一般的に解析テーブルの生成がどのように行われるかに関心のある人々のための使いやすいアカデミック環境を作成することの両方を目的として開発されました。

プラットフォームに依存しないソフトウェアは、次の両方を結合します。 正規表現ベース 字句解析器 ジェネレーター 入力文字ストリームからの個々のトークンの照合と a LALR(1) パーサジェネレータ、指定された 文脈自由文法 仕様の解析テーブルを計算し、スタンドアロンの動作パーサーを構築します。 JS/CCに供給される文脈自由文法は、 Backus-Naur-Form ベースのメタ言語で定義されており、個々のセマンティックコードの挿入をルールの縮小で評価できます。

JS/CC自体は完全にECMAScriptで記述されています そのため、さまざまな方法で実行できます。Webサイトに埋め込まれたプラットフォームに依存しないブラウザベースのJavaScriptとして、Windows Script Hostアプリケーションとして、コンパイルされたJScript.NET実行可能ファイルとして、Mozilla/RhinoまたはMozilla/Spidermonkeyで解釈されるアプリケーションとして、またはWindows、* nix、Linux、MacOSXのV8シェルスクリプト。ただし、生産的な実行のために、コマンドラインバージョンを使用することをお勧めします。これらのバージョンは、JS/CCパーサー仕様から完全なコンパイラーをアセンブルでき、それが.jsJavaScriptソースファイルに保存されます。

23
Stobor

JavaScriptパーサーとコードジェネレーターを構築する場合は、JavascriptでのMetaII実装を確認してください。

MetaIIコンパイラのチュートリアルでは、それ自体と他の言語を翻訳できる完全に自己完結型のコンパイラシステムを構築する方法について説明します。

MetaIIコンパイラチュートリアル

これはすべて、Val Schorreによる驚くべき小さな10ページのテクニカルペーパーに基づいています。METAII:正直な1964年の構文指向コンパイラ書き込み言語。MetaIIコンパイラの完全な自己記述は約30行です。私は1970年にこれからコンパイラーを構築する方法を学びました。コンパイラーがそれ自体をどのように再生成できるかをついに理解したとき、驚異的な瞬間があります。

チュートリアルでは、MetaIIとその仕組みについて説明し、MetaIIをJavaScriptにコンパイルするMetaIIを実装します。このコンパイラを簡単に変更して、他の言語を解析し、さまざまなJavascriptを生成できます。

私は大学時代からウェブサイトの作者を知っていますが、ウェブサイトとは何の関係もありません。

13
Ira Baxter

Jisonは、おそらくJavascript用の最もアクティブなレクサーおよびパーサージェネレーターです。バイソンとヤックを模倣しています。

ジソン: http://zaach.github.io/jison/

軽量のレクサー(〜100 sloc)だけが必要な場合は、Lexed.jsを参照してください: https://github.com/tantaman/lexed.js

6

単純な構文解析タスクの場合、私はプラットのバリアントを使用するのが非常に好きです トップダウン演算子優先順位パーサー 。プラットは古いLISP方言を使用して元の論文を書きましたが、同じ概念はほとんどすべての言語で簡単に使用できます。実際、Douglas Crockfordは、 JavaScriptでのトップダウン演算子の優先順位解析 に関する優れた記事を書いています。これはまさに必要なものかもしれません。

4
bcat

これは、命令の「疑似」自然言語のパーサーの例です。これは、pure JavaScript with Chevrotain Parsing DSL:で実装されました。

https://github.com/SAP/chevrotain/blob/master/examples/parser/inheritance/inheritance.js

この例には、文法の継承を使用したmultiple自然言語(英語とドイツ語)のサポートも含まれています。

Chevrotainは、 "100%javascriptである解析用のライブラリ"の実行時に(コード生成なし)のカテゴリに分類されます。 Chevrotainの使用は、再帰下降パーサーの「ハンドクラフト」に似ていますが、次のようなwithoutほとんどのheadacheのみです。

  • 先読み関数の作成(どの代替手段を取るかを決定する)
  • 自動エラー回復。
  • 左再帰の検出
  • あいまいさの検出。
  • 位置情報。
  • .。

chevrotainがそれを自動的に処理するので。

2
bd82

本当に字句解析プログラムだけを探している場合は、 prettify を試してください。

1
Naveen

「一連の命令」の設計によっては、Javascriptソースを解析するJavascriptの組み込みeval関数を使用できる場合があります。命令をJavascriptコードに変換する簡単なトランスレーターを書くことができるかもしれません。

ちなみに、XSSの穴には十分注意してください。

1
SLaks

Antlrバージョン4.5Javascriptターゲット が追加されました。

1
mounds

レクサーが必要で、レクサーだけが必要な場合は、これを見てください: https://github.com/aaditmshah/lexer

これは純粋なJavaScriptレクサーであり、わずか数行のコードで多くの強力な機能が記述されています。

1
Aadit M Shah

セキュリティホールのない類似のものを探していたところ、2つのリソースに出くわしました。スクリプトを解析しませんが、実際には「安全な」環境で実行します。これは、eval関数を使用するときに保証できないことです。だから、それがあなたが探しているものであるかどうかはわかりませんが、見てください:

  1. jsandbox --Javascriptサンドボックス
  2. Google Caja -仮想iframe。
0
Mottie