Implement the syntactic sugar for built-in operators. The syntactic sugar is a AST transform which converts a very simple expression syntax into the appropriate built-in operator procedure calls.
The following expressions need to be parsed and transformed into the appropriate kernel syntax:
Z = (X == Y): Equivalent to ````{Value.==` X Y Z}```
Z = (X \= Y): Equivalent to ````{Value.\=` X Y Z}```
Z = (X =< Y): Equivalent to ````{Value.=<` X Y Z}```
Z = (X < Y): Equivalent to ````{Value.<` X Y Z}```
Z = (X >= Y): Equivalent to ````{Value.>=` X Y Z}```
Z = (X > Y): Equivalent to ````{Value.>` X Y Z}```
Z = (X + Y): Equivalent to ````{Number.+` X Y Z}```
Z = (X - Y): Equivalent to ````{Number.-` X Y Z}```
Z = (X * Y): Equivalent to ````{Number.*` X Y Z}```
Z = (X div Y): Equivalent to ````{Number.div` X Y Z}```
Z = (X mod Y): Equivalent to ````{Number.mod` X Y Z}```
Z = (X / Y): Equivalent to ````{Float./` X Y Z}```
Z = X.F: Equivalent to ````{Record..` X F Z}```
Examples
The application should parse and execute the following example correctly:
Example 1
local X in local Y in local Z in
X = 5
Y = 10
Z = (X + Y)
end end end end
Tasks
[ ] Implement the parser logic to recognize these simple expressions.
[ ] Implement the kernel transformation to convert the parsed expressions into valid kernel syntax.
Description
Implement the syntactic sugar for built-in operators. The syntactic sugar is a AST transform which converts a very simple expression syntax into the appropriate built-in operator procedure calls.
The following expressions need to be parsed and transformed into the appropriate kernel syntax:
Z = (X == Y): Equivalent to ````{Value.
==` X Y Z}```Z = (X \= Y): Equivalent to ````{Value.
\=` X Y Z}```Z = (X =< Y): Equivalent to ````{Value.
=<` X Y Z}```Z = (X < Y): Equivalent to ````{Value.
<` X Y Z}```Z = (X >= Y): Equivalent to ````{Value.
>=` X Y Z}```Z = (X > Y): Equivalent to ````{Value.
>` X Y Z}```Z = (X + Y): Equivalent to ````{Number.
+` X Y Z}```Z = (X - Y): Equivalent to ````{Number.
-` X Y Z}```Z = (X * Y): Equivalent to ````{Number.
*` X Y Z}```Z = (X div Y): Equivalent to ````{Number.
div` X Y Z}```Z = (X mod Y): Equivalent to ````{Number.
mod` X Y Z}```Z = (X / Y): Equivalent to ````{Float.
/` X Y Z}```Z = X.F: Equivalent to ````{Record.
.` X F Z}```Examples
The application should parse and execute the following example correctly:
Example 1
Tasks