2010-03-12 15 views
0

我想在我的映射應用程序的配置文件中啓用動態字段,但我無法弄清楚如何解析用戶傳入的「等式」至少不是從頭開始編寫整個解析器!我相信有一些更簡單的方法可以做到這一點,所以我要求提供創意!計算表達式分析器與嵌套和變量在ActionScript中

基本思想:

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」) 理想情況下,我只需要用它們的值查找/替換所有變量名稱,然後運行eval (),但有一個在AS沒有EVAL ...

eesh

我下載了一些教材對編譯器設計課程,所以也許我會只寫一個完整的計算機語言和語法分析器和港口它從OTHER flex(解析器生成器):-D

回答

2

首先,這不是一個真正的正則表達式問題。

接下來,如果您想在as3中使用編譯器生成器,請不要使用flex。使用ANTLR,它可以將AS3作爲輸出目標(不需要從C端口)。 (http://www.antlr.org

最後,檢查中綴到後綴轉換的算法。這裏是維基百科的文章。 (http://en.wikipedia.org/wiki/Shunting-yard_algorithm) 實施並不難。

+0

是的,我認爲分流碼可能是解決方案... ANTLR看起來有點矯枉過正我的需要 – yuletide 2010-03-12 22:09:43

+0

建成它,它像夢一樣工作,謝謝! – yuletide 2010-08-19 02:26:22