resolveName method
What name means where it is read as a value: by default one of the
scope's variables, and a refusal for anything else.
A host overrides it for names of its own kinds, as the material
language does for its inputs, parameters and lets.
Implementation
Expression resolveName(ExpressionToken name) {
final type = scope.variables[name.text];
if (type != null) return ExpressionVariable(name.text, type);
fail('"${name.text}" is not bound here.', where: name);
}