Pergunta

Como definir uma gramática (sem contexto) para uma nova linguagem de programação (linguagem de programação imperativa) que você deseja projetar do zero.

Em outras palavras: como você prossegue quando deseja criar uma nova linguagem de programação do zero.

Foi útil?

Solução

Um passo de cada vez.

Não, seriamente, comece com expressões e operadores, trabalhe para as declarações e, em seguida, para funções/classes etc. Mantenha uma lista de que pontuação é usada para o quê.

Em paralelo, defina sintaxe para referir -se a variáveis, matrizes, hashes, literais numéricos, literais de cordas, outro literal construído. Também em paralelo, defina seu modelo de nomeação de dados e regras de escopo.

Para verificar se sua gramática faz sentido se concentrar em um nível (literal/variável, operador, expressão, declaração, função etc.) e verifique se a pontuação e os tokens de outros níveis intercalados ou anexados/precendidos não causarão uma ambiguidade.

Por fim, escreva tudo no EBNF e execute -o através do ANTLR ou similar.

Também é melhor não reinventar a roda. Normalmente, começo escolhendo sequências para iniciar e final blocos e funções de declaração e operadores matemáticos, que geralmente são fundamentalmente semelhantes a C, tipo Ecmascript, tipo básico, baseado na lista de comando ou baseado em XML. Isso ajuda muito porque é com isso que as pessoas estão acostumadas a trabalhar.

É claro que você precisa criar um motivo bastante convincente para não abandonar escrever um novo idioma e ficar com C, ECMAScript ou básico que são bem testados e muito utilizados.

Muitas vezes comecei a definir um novo idioma apenas para descobrir que outra pessoa já implementou um recurso em algum lugar de algum idioma existente.

Se seu objetivo é a velocidade de desenvolvimento para algum projeto específico, você pode estar melhor prototipando em algo como Python, Lua ou Spidermonkey se estiver procurando subir e funcionar rapidamente e deseja reduzir a quantidade de digitação necessária nos idiomas mais compilados .

Outras dicas

Você vai querer dar uma olhada no ebnf (Formulário estendido de backus-naur).

(Supondo que você queira escrever uma gramática livre de contexto, ou seja.)

você precisa comprar esses dois livros Padrões de implementação de idiomas: Crie suas próprias linguagens de programação específicas e específicas de domínio (programadores pragmáticos) e A referência definitiva de ANTLR: Languagens específicas de domínio de construção (programadores pragmáticos) Eles têm tudo o que você realmente precisa para começar a criar seu próprio idioma, analisador, tradutor, intérprete e / / ou compilador

Se você quer dizer definir uma gramática, seria melhor servido começando com um idioma existente e modificando sua gramática para corresponder ao que você procura. Criar uma especificação gramatical é um exercício bastante mecânico, usando um conjunto de padrões em sua própria cabeça. Por exemplo, como é uma declaração IF? Parece C

if <- if(exp) block

if <- if(exp) block else block2

ou como ML?

if <- if exp then block else block end

Ou talvez você queira usar elseifs como Lua:

if <- if exp then exp end

if <- if exp then exp (elseif exp)* else exp end

A gramática e a semântica codificam essas decisões. Observe que nenhum deles é bastante adequado para implementação em um gerador de compiladores LALR ou LL (*) e teria que ser massageado para implementação porque são ambíguos.

A linguagem de programação Pragmatics de Michael Scott é uma boa introdução ao design de linguagens de programação. Está disponível na Amazon aqui

Dê uma olhada em Búfalo, talvez seja isso que você está procurando?

Você precisará saber muito sobre linguagens de programação antes de começar a projetar uma. Eu recomendo Linguagens de programação: aplicação e interpretação por Shriram Krishnamurthi.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top