Вы можете использовать многое, и то, что вы найдете проще всего, будет зависеть от вашего опыта.
Во-первых, что касается языка:
- Самым простым является игрушечный язык, например, составление арифметических выражений.
- Далее идет ассемблер - опять же, на самом деле просто перевод, но показывает основы синтаксического анализа и превращения в op-коды
- Далее, вероятно, что-то вроде C, который очень близок к чистому ассемблеру, или что-то вроде LISP, который очень близок к чистой теории.
Далее выбираем ваш компилятор.
Вы можете начать с ассемблера - превратить ассемблер в машинный код. Это был первый шаг в производстве компиляторов - я бы посоветовал для чипов, таких как 6502 или 8080, которые оба очень просты. Что-то вроде комплекта для разработки на ассемблере может хорошо работать для вас (оно поставляется с примерами)
Многие люди (включая меня) утверждают, что самые простые языки для написания компиляторов являются функциональными - в настоящее время это, вероятно, означает Haskell, Scheme или Common Lisp. Пример того, насколько просто это это сообщение в блоге . Он пишет компилятор, который просто компилирует арифметические выражения в несколько строк. Это может быть достаточно минимальным для вас.
Почти каждое введение в написание компиляторов на академическом уровне начинается с минимального языка, например, Книга Дракона http://en.wikipedia.org/wiki/Dragon_Book_%28computer_science%29 всегда рекомендуется, но есть и другие хорошие.
В университете я использовал C--, который похож на C, но еще проще написать компилятор. Много ресурсов по адресу: http://www.cminusminus.org/qc--.html
Если вам нужен компилятор и вы знаете язык, такой как Java, я бы предложил что-то вроде JavaCC , где язык указан с использованием грамматик. Здесь множество примеров грамматик - выберите что-нибудь простое, например, C, чтобы начать.