decorate

See Decorated vs Undecorated for an explanation of what Decorated means.

The following syntax will decorate an undecorated tree:

decorate <Expr> with { ( <name> = <Expr> ; )* }

where Expr is expected to be undecorated. Each name should be an inherited attribute that occurs on the type of value that Expr is.

Example: decorate expr with { env = [pair("x", 1), pair("y", 2)]; } will decorate an undecorated expression with an environment binding two variables. decorate folder with { input = ["Hello", "world"]; }.output will decorate a value called folder with the inherited attribute input, then demand the synthesized attribute output from the resulting decorated node.

The inverse operation is new.