refactor expression infrastructure to enable non-binary operators