Calculator
.
Mueva el módulo Operator
a Calculator::Operator
.
Lea el capítulo Modulos
de los apuntes de LHP.
TODO
. Cuando la funcionalidad
a comprobar esté operativa cambie su estatus.
b = a = 4*2que será traducida a postfijo como:
4 2 * a = b =El operador de asignación es asociativo a derechas. El valor devuelto por una expresión de asignación es el valor asignado.
Use un hash para implantar la relación nombre-valor en el caso de la evaluación
c = { a = 4; b = 2*a }
Los bloques son listas entre llaves de expresiones separadas por punto y coma. El valor retornado por una expresión bloque es el último evaluado en el bloque.
El símbolo de arranque de la gramática (esto es, el patrón regular contra el que hay que casar) será la expresión bloque.
<
, >
, <=
, >=
, ==
y !=
con la prioridad adecuada. Tenga en cuenta que una expresión como:
a = b+2 > c*4deberá entenderse como
a = ((b+2) > (c*4))Esto es, se traducirá como:
b 2 + c 4 * > a =
if ... then ... else
. La parte del else
será opcional:
c = if a > 0 then { a = a -1; 2*a } else { b + 2 }; d = if a > 0 then { a = b -1; 2*b };un
else
casa con el if
mas cercano.
La sentencia:
if (a > 0) then if (b > 0) then {5} else {6}se interpreta como:
if (a > 0) then (if (b > 0) then {5} else {6})y no como:
if (a > 0) then (if (b > 0) then {5}) else {6}Se traducirá como:
a 0 > jz endif124 b 0 > jz else125 5 j endif126 :else125 6 :endif124 :endif125 ...