So far, our parser can evaluate static expressions, starting with simple ones such as 3
(which evaluates, what a surprise, to 3) up to arbitrarily complicated ones such as (5 + 3.14) * (14 + (29 - 2 * 3.918))
(which, by the way, evaluates to 286.23496). However, all of these expressions are static; they will always evaluate to the same result.
In order to make this more dynamic, we will now extend our grammar to allow variables. An example of an expression with variables is 3 + a
, which could then be evaluated multiple times with different values for a
.
This time, let's start by modifying the object model for the syntax tree. First, we'll need a new node type, Packt\Chp8\DSL\AST\Variable
, allowing for example the 3 + a
expression to generate the following syntax tree:
There's also a second problem: contrary to the Number
nodes or arithmetic operations that use Number nodes, we cannot simply compute the numeric value of...