1

ねえ、JavaScript と HTML5 でフラクタル生成プログラムを作成しました (ここにリンクがあります)。これには、複雑な数学とフラクタル方程式について行ったすべての調査を含め、約 2 年間のプロセスが必要でした。人々が見るのはかなり威圧的です。コードを調べているうちに、 Complex.parseFunctionなど、物事を行うための古い手法のいくつかが非常に非効率的であることに気付きました。

RegExp を使用して、関数、演算子、変数などの式のコンポーネントを解析し、式の操作の適切な順序を実装する方法を探しています。以下の例は、私の言いたいことを示しているかもしれません:

//the first example parses an expression with two variables and outputs to string
console.log(Complex.parseFunction("i*-sinh(C-Z^2)", ["Z","C"], false))

"Complex.I.mult(Complex.neg(Complex.sinh(C.sub(Z.cPow(new Complex(2,0,2,0))))))"

//the second example parses the same expression but outputs to function
console.log(Complex.parseFunction("i*-sinh(C-Z^2)", ["Z","C"], true))

function(Z,C){
  return Complex.I.mult(Complex.neg(Complex.sinh(C.sub(Z.cPow(new Complex(2,0,2,0))))));
}

私は RegExp を使用して処理する方法を知ってString.prototype.replaceいます。必要なのは RegExp 自体だけです。減算演算子 (「CZ^2」など) と負の関数 (「i*-(Z^2+C)」など) の違いは、それぞれ変数または演算子。

4

1 に答える 1

2

たとえば、正規表現を式パーサーの一部として使用してトークンを分割することはできますが、正規表現には、適切にネストされた数式を解析する計算能力がありません。これは本質的に、計算理論 (有限状態オートマトンとプッシュ ダウン オートマトン) の中心的な結果の 1 つです。おそらく、再帰降下や LR 解析のようなものを見たいと思うでしょう。

また、式の構文解析が 1 回だけであれば、構文解析の効率についてもあまり心配する必要はありません。あなたがしている他のすべての計算を考えると、それが重要であるとは思えません.

于 2012-12-16T21:04:04.343 に答える