parse || and &&
use ExpressionPtr instead of more verbose std::unique_ptr<Expression>
identifiers can have underscores