Я пытаюсь включить динамические поля в файле конфигурации для моего картографического приложения, но я не могу понять, как проанализировать «уравнение», переданное пользователем, по крайней мере, без написания целого парсера с нуля ! Я уверен, что есть более простой способ сделать это, и поэтому я прошу идеи!
Основная идея:
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