Transform concrete grammar into abstract algebra

If we model this after our AST (which we probably should), we can leave out `BinaryExpression` and `UnaryExpression` and add `MethodInvocation.isOperator` instead.