Nettoyage et documentation de traverse

pull/37/head
mama 2017-08-22 10:53:38 +02:00
parent 428205f79a
commit d7eb12f37c
1 changed files with 9 additions and 12 deletions

View File

@ -49,10 +49,6 @@ par exemple ainsi : https://github.com/Engelberg/instaparse#transforming-the-tre
*/
let fillVariableNode = (rules, rule) => (parseResult) => {
return createVariableNode(rules, rule)(parseResult)
}
let fillFilteredVariableNode = (rules, rule) => (filter, parseResult) => {
let evaluateFiltered = originalEval => (situation, parsedRules, node) => {
let newSituation = name => name == "sys.filter" ? filter : situation(name)
@ -69,27 +65,28 @@ let fillFilteredVariableNode = (rules, rule) => (filter, parseResult) => {
// ne pas laisser trop longtemps cette "optimisation" qui tue l'aspect fonctionnel de l'algo
var dict;
let createVariableNode = (rules, rule) => (parseResult) => {
let fillVariableNode = (rules, rule) => (parseResult) => {
let evaluate = (situation, parsedRules, node) => {
let dottedName = node.dottedName,
// On va vérifier dans le cache courant, dict, si la variable n'a pas été déjà évaluée
// En effet, l'évaluation dans le cas d'une variable qui a une formule, est coûteuse !
cached = dict[dottedName],
// make parsedRules a dict object, that also serves as a cache of evaluation ?
variable = cached ? cached : findRuleByDottedName(parsedRules, dottedName),
variableIsCalculable = variable.formule != null,
//TODO perf : mettre un cache sur les variables !
// On le fait pas pour l'instant car ça peut compliquer les fonctionnalités futures
// et qu'il n'y a aucun problème de perf aujourd'hui
parsedRule = variableIsCalculable && (cached ? cached : evaluateNode(
situation,
parsedRules,
variable
)),
// evaluateVariable renvoit la valeur déduite de la situation courante renseignée par l'utilisateur
situationValue = evaluateVariable(situation, dottedName, variable),
nodeValue = situationValue
!= null ? situationValue
!= null ? situationValue // cette variable a été directement renseignée
: !variableIsCalculable
? null
: parsedRule.nodeValue,
? null // pas moyen de calculer car il n'y a pas de formule, elle restera donc nulle
: parsedRule.nodeValue, // la valeur du calcul fait foi
explanation = parsedRule,
missingVariables = variableIsCalculable ? [] : (nodeValue == null ? [dottedName] : [])