0

マッピングアプリの構成ファイルで動的フィールドを有効にしようとしていますが、少なくともパーサー全体を最初から作成しない限り、ユーザーから渡された「方程式」を解析する方法がわかりません。これを行うためのもっと簡単な方法があると確信しているので、私はアイデアを求めています!

基本的な考え方:

public var testString:String = "(#TOTPOP_CY#-#HISPOP_CY#)/#TOTPOP_CY#";
public var valueObject:Object = {TOTPOP_CY:1000, HISPOP_CY:100};
public function calcParse(eq:String):String {
// do calculations
return calculatedValue
}

これまで、演算子または変数トークンのいずれかで式を分割することを考えていましたが、これにより括弧で囲まれたネストがなくなります。または、一連の正規表現を使用して、式の各部分を検索してその値に置き換え、数値だけが残るまで再帰的に実行します。しかし、正規表現が数学を行うとは思いません(つまり、「\ d + \ d」を2つの数値の合計に置き換えます)理想的には、すべての変数名を検索/置換してから、eval( )、しかしASには評価がありません...

eesh

コンパイラー設計のコース用にいくつかのコース資料をダウンロードしたので、本格的な電卓言語とパーサーを作成して、他のフレックス(パーサージェネレーター)から移植するだけかもしれません:-D

4

1 に答える 1

2

まず最初に、これは実際には正規表現の問題ではありません。

次に、as3でコンパイラジェネレータを使用する場合は、flexを使用しないでください。ANTLRを使用すると、出力用にAS3をターゲットにできます(Cから移植する必要はありません)。(http://www.antlr.org

最後に、中置から後置への変換のアルゴリズムを確認してください。これがウィキペディアの記事です。(http://en.wikipedia.org/wiki/Shunting-yard_algorithm)実装するのはそれほど難しくありません。

于 2010-03-12T22:01:14.110 に答える