function evaluate($input) { $icontext = new InterpreterContext(); $prefab = new VariableExpression('input', $input); $prefab->interpret($icontext); $this->interpreter->interpret($icontext); $result = $icontext->lookup($this->interpreter); return $result; }
function evaluate($input) { $context = new Context(); $prefab = new VariableExpression('input', $input); // add the input variable to Context $prefab->interpret($context); $this->interpreter->interpret($context); $result = $context->lookup($this->interpreter); return $result; }
<?php $context = new InterpreterContext(); $myvar = new VariableExpression("input", "four"); $myvar->interpret($context); echo $context->lookup($myvar) . "<br/>"; $new_var = new VariableExpression("input"); $new_var->interpret($context); echo $context->lookup($new_var) . "<br/>"; $myvar->setValue("five"); $myvar->interpret($context); echo $context->lookup($myvar) . "<br/>"; echo $context->lookup($new_var) . "<br/>"; $literal = new LiteralExpression("Four"); $literal->interpret($context); echo $context->lookup($literal) . "<br/>";
} } $n = "<br />"; $context = new InterpreterContext(); $literal = new LiteralExpression('Четыре'); $literal->interpret($context); print $context->lookup($literal) . $n; $context = new InterpreterContext(); $myvar = new VariableExpression('input', 'Четыре'); $myvar->interpret($context); print $context->lookup($myvar) . $n; $newvar = new VariableExpression('input'); $newvar->interpret($context); print $context->lookup($myvar) . $n; $myvar->setValue('Пять'); $myvar->interpret($context); print $context->lookup($myvar) . $n; print $context->lookup($newvar) . $n; $context = new InterpreterContext(); $input = new VariableExpression('input'); $statement = new BooleanOrExpression(new EqualsExpression($input, new LiteralExpression('Четыре')), new EqualsExpression($input, new LiteralExpression('4'))); foreach (['Четыре', '4', '52'] as $val) { $input->setValue($val); print "{$val} : "; $statement->interpret($context); if ($context->lookup($statement)) { print "соответствует {$n}"; } else { print "не соответствует {$n}"; } }
public function walkVariable(VariableExpression $expression) { return $expression->update($this->walk($expression->getName())); }
function interpret(Context $context) { if (!is_null($this->val)) { $context->replace($this, $this->val); $this->val = null; } } function setValue($value) { $this->val = $value; } function getKey() { return $this->name; } } $context = new Context(); $myvar = new VariableExpression('input', 'four'); $myvar->interpret($context); print $context->lookup($myvar) . "\n"; // output: four $newvar = new VariableExpression('input'); $newvar->interpret($context); print $context->lookup($newvar) . "\n"; // output: four $myvar->setValue("five"); $myvar->interpret($context); print $context->lookup($myvar) . "\n"; // output: five print $context->lookup($newvar) . "\n"; // output: five
} class OrExpression extends OperatorExpression { protected function doInterpret(InterpreterContext $context, $resultL, $resultR) { $context->replace($this, $resultL || $resultR); } } class AndExpression extends OperatorExpression { protected function doInterpret(InterpreterContext $context, $resultL, $resultR) { $context->replace($this, $resultL && $resultR); } } $context = new InterpreterContext(); $literal = new LiteralExpression('quatro'); $literal->interpret($context); print $context->lookup($literal); $var = new VariableExpression('input', 'cinco'); $var->interpret($context); echo "\n"; print $context->lookup($var); $var = new VariableExpression('input'); $var->interpret($context); echo "\n"; print $context->lookup($var); $var->setValue('oito'); $var->interpret($context); echo "\n"; print $context->lookup($var);