Bug fix: the grammar of the Dao programming language should not have
allowed arbitrary reference expressions to be used as the head of
constructor expressions. For example in the expression "list{}" the
"list" token must not be an arbitrary reference expression, which could
include an arbitrary object in parentheses. Instead, the "list" must be
simply a dot-separated list of names. I solved this issue by defining
two new data types that represent a dot-separated list of names in the
abstract syntax tree, and defined functions that can convert these more
limited expressions to arbitrary references.