private Datum expression()
{
Datum d;
if ((d = quotedExpression()) != null)
return d;
if ((d = symbol()) != null)
return d;
if ((d = atom()) != null)
return d;
if ((d = vectorExpr()) != null)
return d;
if ((d = compound()) != null)
return d;
throw fail("Unexpected token: {0}", next);
}