Конечно. Самый простой способ - присвоить значение результата каждой конструкции, которая в данный момент является оператором, и, таким образом, превратить его в выражение. Это не обязательно полезно или значимо, хотя. Единственный потенциальный выигрыш - это немного концептуальной простоты. Однако, если вы затем приступите к удалению таких вещей, как точки с запятой и циклы (вместо этого требуется цепочка с помощью других операторов и функций), программы, интенсивно использующие операторы, станут некрасивыми.
Более радикальный, но значимый способ сделать это состоит в том, чтобы спроектировать язык так, чтобы почти все имело осмысленное значение, и использовать его таким образом, чтобы вы почти всегда использовали выражение для этого значимого значения, а не для других эффектов. Это делают языки функционального программирования (в некоторой степени; например, в Haskell есть объявления, которые не являются выражениями).
Утверждения используются, потому что в императивной парадигме есть много общих операций, которые не имеют полезного значения результата, и потому что понятие последовательных инструкций (а не вычислений) вполне соответствует этой парадигме. Если большой процент вашей программы изменяет состояние, а не вычисляет новые значения, не имеет смысла требовать создания значения (каков результат цикла for?). Напротив, когда вся ваша парадигма (FP) построена вокруг вычисления значений, выбросы, у которых нет значения результата, не требуют исключения: вместо этого вы даете им результат дозорного, который ничего не значит.