Минимальный парсер псевдоязыка программирования

Рейтинг: 2Ответов: 1Опубликовано: 02.11.2014

Для университетского проекта (симуляция ОС) нужно сделать некое подобие ЯП с минимальным синтаксисом. То есть объявление переменных, арифметические операции, вывод...

Вопрос таков: каким образом будет лучше сделать парсинг строки с командой? Через Regex или искать команды в строке методами String? Интересует не столько скорость работы, сколько удобство и аккуратность реализации.

Ответы

▲ 5Принят

Для того, чтобы написать минимальный язык программирования, вам придётся писать парсер. Вы должны решить заранее, будут ли в вашем языке программирования вложенные структуры, например, будет ли while, в который может быть вложена произвольная команда или набор команд.

Если ваш язык простой, вы можете разбирать его как угодно — вручную, регулярками, как вам нравится.

Но если вдруг ваш язык рекурсивный — забудьте все эти игрушки, вам придётся писать настоящий, честный парсер. Это не получится слёту, просто так: вам придётся читать книги.

Для написания простого recursive descent-парсера (это парсер языка типа Паскаля) стоит почитать Н. Вирта «Алгоритмы + структуры данных = программы».

Если у вас ещё более сложная грамматика (что вряд ли), вам придётся засесть за классическую «книгу с драконом». Учтите, что это сделает вас специалистом по парсерам, что, возможно, не так уж плохо для будущей специальности.


Это, кстати, не вся работа: кроме front-end'а (то есть парсера), вам придётся написать и back-end (генератор машинных кодов). Я бы посоветовал выбрать один из существующих бинарных форматов, и воспользоваться стандартным back-end'ом (например, Clang или .NET CIL). Для этого, конечно, вам придётся быть бинарно совместимыми с одной из существующих платформ. А если вы уж бинарно совместимы, почему тогда не взять связку Pure C/gcc?