Чат*, у меня для вас задачка.
Есть вот такое простенькое AST для подмножества арифметических выражений:
Напишите код для вывода этих выражений так, чтобы:
* в них были корректно расставлены скобки (в частности, никаких два знака операции подряд)
* с учётом ассоциативности сложения (то есть
* без избыточных скобок (в частности, без скобок на топ-левеле и без скобок вокруг положительных литералов).
Отрицание на вычитание переправлять не надо.
Не то чтобы сильно сложная задача, но сложнее, чем кажется на первый взгляд.
Есть вот такое простенькое AST для подмножества арифметических выражений:
enum Expr {
Lit(i32),
Neg(Box<Self>),
Add(Box<Self>, Box<Self>),
}
(взял отсюда, да)Напишите код для вывода этих выражений так, чтобы:
* в них были корректно расставлены скобки (в частности, никаких два знака операции подряд)
* с учётом ассоциативности сложения (то есть
add(lit(1), add(lit(2), lit(3)))
должно выводиться, как 1 + 2 + 3
, а не 1 + (2 + 3)
)* без избыточных скобок (в частности, без скобок на топ-левеле и без скобок вокруг положительных литералов).
Отрицание на вычитание переправлять не надо.
Не то чтобы сильно сложная задача, но сложнее, чем кажется на первый взгляд.
Telegram
Блог*
#prog #rust #article
Efficient, Extensible, Expressive: Typed Tagless Final Interpreters in Rust
Efficient, Extensible, Expressive: Typed Tagless Final Interpreters in Rust
🤷8🥴2❤1🔥1
Блог*
Чат*, у меня для вас задачка. Есть вот такое простенькое AST для подмножества арифметических выражений: enum Expr { Lit(i32), Neg(Box<Self>), Add(Box<Self>, Box<Self>), } (взял отсюда, да) Напишите код для вывода этих выражений так, чтобы:…
Disclaimer: я эту задачу уже решил (и выложу решение немного позже), но я хочу посмотреть ваши решения. Если надо, могу скинуть тесты для проверки.
🤨4🤡1