Я пишу простой парсер / интерпретатор на C # с нуля (сторонних библиотек нет).Он компилируется в байт-код, а затем у меня есть класс, который выполняет байт-код.Я подхожу к завершению.Я только что реализовал циклы while
и for
и работаю с блоками if
| else if
| else
.
В настоящее время мой анализатор требует, чтобы все эти структуры использовали curlyбрекеты.Я хотел бы сделать его более C-подобным и иметь необязательные фигурные скобки, когда блок содержит только одну инструкцию.Это доставляет мне проблемы.
if (condition)
{
// Make curly braces optional when there is just one statement here
}
Проблема в отслеживании состояния.Как парсер узнает, когда закончился блок без фигурных скобок.Один из подходов состоит в том, чтобы проверить, существует ли блок без фигурных скобок после каждого оператора.Однако существует множество различных сценариев, которые могли бы составить заявление, и поэтому эти проверки должны быть в нескольких местах.Мне это кажется немного хрупким.
Мне просто интересно, если бы кто-нибудь сделал это и знает какие-нибудь хитрые уловки для отслеживания, когда заканчивается блок кода, когда нет фигурных скобок.