Я пытаюсь сделать парсер для искусственного языка программирования. Сейчас я нахожусь в той части упражнения, где мы должны убедиться, что вывод синтаксического анализатора является преобразованием ввода C.
Такие вещи, как ...
STARTMAIN a=b+2; return a ENDMAIN
... должно стать ...
int main () { a=b+2; return a; }
Пока все хорошо, почти. В упражнении также требуется, чтобы в то же время, когда мы обращаемся, мы добавляли правильные отступы и (как мне пришлось выучить трудный путь в прошлом году) переводы строк.
Очевидная часть заключается в том, что каждый раз, когда открывается {, вы увеличиваете счетчик, а затем добавляете соответствующие вкладки в каждой новой строке. Однако закрывающие скобки ('}') - это отдельная история, так как вы не можете обнаружить их заранее, и, проанализировав их, вы не можете просто поместить их вкладку влево, удалив последнюю напечатанную вкладку.
Есть ли решение для этого и / или последовательный способ проверки и добавления отступов?