Я написал базовый компилятор, который генерирует AST, правильно учитывая приоритет оператора в выражениях. Однако при выполнении генерации кода для создания кода на C++ я не уверен, как обращаться с использованием скобок.Ассоциативность и приоритетность выражений при генерации кода C/C++?
Для этого выражения:
A - (B - c)
АСТ ниже:
-
/\
A -
/\
B C
должны правильно генерировать предыдущее выражение в том числе в скобках, однако, если второй оператор был оператор сложения (например), скобки не нужны. Я бы предпочел использовать их только там, где это необходимо для повышения удобочитаемости.
Существуют ли какие-либо правила, диктующие такое поведение и как узнать, когда использовать круглые скобки. Плюс и минус имеют одинаковый уровень приоритета на большинстве языков, и я хотел бы сделать эту работу для всех операторов.
Какой код вы генерируете? Если вы генерируете машинный код (как полагает большинство людей в этом контексте), тогда ваш вопрос немного бессмыслен. * Вы генерируете язык высокого уровня (er), например C? * – BCS 2010-12-01 03:20:53
Извинения. Я предположил, что генерация языка более высокого уровня будет более распространенной или, по крайней мере, использование кода термина в отличие от сборки сделает это ясным. Я обновил вопрос, чтобы отразить это ... – Dan 2010-12-01 10:17:19