文字列ではなくカスタム関数をサポートするActionScriptパーサー(ASで記述され、ASを解析しない)の修正バージョンがあります。ただし、文字列サポートを追加するのはおそらく簡単でしょう。どこかにアップロードしますので、http://silentmatt.com/parser2.js http://silentmatt.com/parser3.js。
編集:文字列の基本的なサポートを非常に簡単に追加しました。エスケープシーケンスをサポートしておらず、toJSFunctionは機能しませんが、機能させるのに数分しかかかりませんでした。連結演算子を「||」に変更します とても簡単なはずです。
例の式を評価する方法は次のとおりです。
js> var parser = new Parser();
js> parser.parse("3 * (2 + 1) - 1").evaluate();
8
js> parser.parse("2 * func(2; 2)").evaluate({ func:Math.pow });
8
js> function substr(s, start, end) { return s.substring(start, end); }
js> parser.parse("func('hello world'; 0; 5) + ' you'").evaluate({ func:substr });
hello you
引数の区切り文字としてセミコロンを使用した理由を覚えていません。関数と組み込みの「演算子」関数を区別することと関係があると思います。
別の編集:
私はこれを少し遊んでいましたが、http ://silentmatt.com/parser3.jsに文字列サポートが改善されたバージョンがあります(toJSFunctionは機能し、標準のJavaScriptエスケープシーケンスを使用できます)。また、コンマを使用してすべての関数の引数を区切り、加算のみを行う||
の代わりに文字列連結演算子として使用します。+