UCG is an immutable, expression oriented, functional programming language specialized for generating configurations. It has limited IO and a form of forward type inference.
A valid UCG file is composed of a series of statements. Statements can be an expression, introduce named bindings, or create different outputs. All statements must be terminiated by a semicolon. Statements are executed in order. All expressions in ucg return a value. Expressions can see anything declared in their enclosing scope up to the point of their execution.
Scopes in UCG are defined by the ucg file, a function, or a module body.
Some words are reserved in UCG and can not be used as a named binding.