Você precisará do seguinte:
- Um motivo para criar um novo idioma
- Uma filosofia
- Uma definição semântica
- Uma descrição lexical dos seus tokens
- Uma definição de Análise de Sintaxe
Como o seu idioma será diferente? Qual é a sua missão? É funcional? É orientado a objetos? É uma meta-linguagem? Quais são as suas características únicas? O que dará ao mundo que não existe (ou existe de maneira feia)? Como você quer mudar as coisas? É compilado ou interpretado? Uma linguagem DSL ou de uso geral? Essa é a sua filosofia e determina muito sobre o design do seu idioma.
Em seguida, trabalhe no desenho de sintaxe e semântica aproximadas. Esta será sua definição semântica ... escrever código falso é uma ótima maneira de desenvolver seus pensamentos. Leia "The C Programming Language" para um excelente exemplo de como isso é feito. Brinque com isso.
Você precisará definir seus tokens e sintaxe de alguma forma. Os programas então os processam em autômatos capazes de ler em strings e processar a sintaxe. Yacc e Bison usam expressões regulares e uma sintaxe de estilo BNF para análises lexicais e de sintaxe, respectivamente. Existem também ferramentas Yacc e Bison para outros idiomas.
Você também precisará de uma base na teoria da linguagem / compiladores para saber o que NÃO deve fazer. Os exemplos incluem gramáticas ambíguas, problemas de geração e manipulação de AST e geralmente como tornar a vida mais simples. Conhecer a teoria é muito importante. Eu consideraria começar o seguinte:
Compiladores: Princípios, Técnicas e Ferramentas (Dragon Book)
Implementação moderna do compilador em C ou Implementação moderna do compilador em Java