Вам понадобится следующее:
- Причина создания нового языка
- Философия
- Семантическое определение
- Лексическое описание ваших токенов
- Определение синтаксического анализа
Как ваш язык будет отличаться? Какова его миссия? Это функционально? Это объектно-ориентированный? Это мета-язык? Каковы его уникальные особенности? Что это даст миру, который не существует (или существует безобразно)? Как вы хотите изменить вещи? Это скомпилировано или интерпретировано? DSL или язык общего назначения? Это ваша философия и много диктует дизайн вашего языка.
Затем, работа над вычеркиванием грубого синтаксиса и семантики на бумаге. Это будет ваше семантическое определение ... написание фальшивого кода - отличный способ развить ваши мысли. Прочитайте «Язык программирования C», чтобы увидеть отличный пример того, как это делается. Играть с этим.
Затем вам нужно будет каким-то образом определить ваши токены и синтаксис. Затем программы превращают их в автоматы, способные считывать строки и обрабатывать синтаксис. Yacc и Bison используют регулярные выражения и синтаксис в стиле BNF для лексического и синтаксического анализа соответственно. Есть также инструменты, похожие на Yacc и Bison для других языков.
Вам также потребуется знание теории / компиляторов языка, чтобы знать, что НЕ нужно делать. Примерами могут служить неоднозначные грамматики, проблемы генерации и манипуляции AST и, как правило, упрощение жизни. Знание теории очень важно. Я хотел бы рассмотреть следующие вопросы:
Компиляторы: принципы, методы и инструменты (Dragon Book)
Современная реализация компилятора в C или Современная реализация компилятора в Java