2010-03-12 5 views
0

J'essaie d'activer les champs dynamiques dans le fichier de configuration pour mon application de mappage, mais je n'arrive pas à comprendre comment analyser l'équation transmise par l'utilisateur, à pas moins sans écrire un parser entier à partir de zéro! Je suis sûr qu'il y a un moyen plus facile de le faire, et donc je demande des idées!Analyseur d'expressions de calcul avec imbrication et variables dans ActionScript

idée de base:

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 
} 

, j'étais si loin de penser diviser l'expression soit par les opérateurs, ou peut-être les jetons variables, mais qui se débarrasse de l'imbrication entre parenthèses. Vous pouvez également utiliser une série de regex pour rechercher et remplacer chaque élément de l'expression avec sa valeur, en exécutant récursivement jusqu'à ce qu'il ne reste qu'un nombre. Mais je ne pense pas que regex fasse des maths (ie remplacer "\ d + \ d" par la somme des deux nombres) Idéalement, je ferais juste de trouver/remplacer tous les noms de variables par leurs valeurs, puis lancer une évaluation(), mais il n'y a pas eval AS ...

EESH

J'ai téléchargé des supports de cours pour un cours sur la conception du compilateur, donc je vais peut-être juste écrire une langue calculatrice à part entière et l'analyseur et le port À partir du OTHER flex (le générateur d'analyseur) :-D

Répondre

2

Tout d'abord, ce n'est pas vraiment un problème de regex.

Ensuite, si vous voulez utiliser un générateur de compilation en as3, n'utilisez pas flex. Utiliser ANTLR, il peut cibler AS3 pour la sortie (pas besoin de le porter de C). (http://www.antlr.org)

Enfin, consultez les algorithmes pour la conversion de l'infixe en postfixe. Voici l'article de Wikipédia à ce sujet. (http://en.wikipedia.org/wiki/Shunting-yard_algorithm) Ce n'est pas trop difficile à mettre en œuvre.

+0

Oui, je pense que la gare de triage peut être la solution ... ANTLR semble être un peu exagéré pour mes besoins – yuletide

+0

Construit et cela a fonctionné comme un rêve, merci! – yuletide