Refactored AST so nodes are fully contained in the enum