Pergunta sobre a criação de uma linguagem de script


12

Digamos, por exemplo, que eu quis pagar alguém para criar uma linguagem de programação ou linguagem de script para mim. Que tipo de documento eles precisariam para entender completamente o que é exatamente o que eu quero.

Quero dizer, existem documentos padrão que descrevem a nova linguagem de programação / script em questão?


Como se trata de programação, não de programadores, provavelmente é um ajuste melhor para o StackOverflow.
Muad'Dib

14
Eu não concordo com o Muad'Dib. Eu acho que este é um bom lugar para esta pergunta.
Chris

5
Penso que, em vez de inventar sua própria linguagem de script, ao custo de uma enorme quantidade de trabalho para você e seu usuário precisarem aprender uma nova linguagem, seria melhor incorporar uma linguagem de script existente. Algumas linguagens, por exemplo, Python, Javascript / ECMAScript, são projetadas para que possam ser incorporadas a uma estrutura maior. Em resumo, você só precisará criar a API e descobrir uma maneira de incorporar o interpretador de script ao seu próprio programa.
Lie Ryan

1
Há vantagem em fazer isso se o idioma não for um DSL. para uma linguagem geral nem tanto. É claro que algumas linguagens gerais são bases muito boas para DSLs, por exemplo, Lisp ou TCL
jk.

Respostas:


16

O que você precisa escrever é chamado de especificação de linguagem .

Deve conter uma descrição da gramática da língua (de preferência na forma Backus-Naur estendida ) e sua semântica.

Para a última parte, você pode escrever uma descrição com suas próprias palavras (mas tome cuidado para ser preciso) ou uma semântica formal .


1
O BNF é útil apenas para gramáticas sem conteúdo, as linguagens de script nem sempre são livres de contexto, por exemplo, TCL (embora eu ache que você ainda possa argumentar que é preferível ter uma linguagem livre de contexto na maioria dos casos)
jk.

@jk. Eu não diria que o BNF é totalmente inútil para linguagens sem contexto. Dependendo da falta de contexto da sintaxe, ainda pode fazer sentido especificá-la no EBNF e, em seguida, resolver as ambiguidades em palavras. É isso que o padrão C ++ faz, por exemplo. Na maioria dos casos, imagino que isso ainda seja mais claro do que explicar tudo em palavras ou especificá-lo usando uma gramática sensível ao contexto ou irrestrita.
precisa saber é

verdade, meu argumento era mais que existem linguagens como lisp, tcl ou adiante (que são realmente boas para definir DSLs) que possuem sintaxes degeneradas e, portanto, o BNF diz muito pouco
jk.

@jk. Claro, mas nesse caso, qualquer outro meio de descrever a sintaxe lhe dirá igualmente pouco, simplesmente porque há muito pouco a dizer. Isso significa apenas que a parte da sintaxe da especificação será muito curta.
sepp2k

13

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


1
+1 para filosofia, para DSL você deseja claramente identificar o domínio aqui
jk.

8

99,9% do tempo criando um novo idioma é completamente desnecessário. O retorno do investimento provavelmente seria pequeno e você teria perdido seu tempo.

Provavelmente você pode usar o Javascript como uma linguagem de script suscetível e já existem analisadores disponíveis para a maioria dos idiomas. Você também pode usar outras linguagens de script que desejar, se encontrar um analisador adequado para elas. Implementá-las em seu programa exigiria muito menos trabalho e teria um retorno maior. As pessoas não precisam aprender outro idioma, apenas precisam aprender sua API. É uma solução muito melhor.

Criar um novo idioma é quase sempre ruim.


9
Exceto pela multiplicidade de vezes em que não é ruim. Criar suas próprias DSLs simples pode ser muito útil. Agora, criar sua própria linguagem de propósito geral estaria mais alinhado com o que sua resposta diz.
ChaosPandion

@ChaosPandion mas um monte de línguas já se destacam a criação de uma DSL que o código usos de que a linguagem (ou seja, ruby é bom nisso)
alternativa

2
Concordo com sua resposta, mas acredito que não é a resposta certa para esta pergunta. Acredito que o solicitante esteja analisando as generalidades da criação de uma linguagem de script, não pelos prós / contras da criação de uma.
Tim Murphy

Criar um novo idioma é quase sempre a melhor solução. pt.wikipedia.org/wiki/Language-oriented_programming
SK-logic

3

Você pode descrever a gramática do seu idioma no BNF .

Por exemplo, esta é a gramática do Python .


6
A gramática por si só não é informação suficiente para implementar uma linguagem. Ele também precisará especificar a semântica de uma maneira ou de outra.
sepp2k

0

se você estiver usando o .NET, aqui está algo que eu encontrei há algum tempo. Só dei uma olhada curiosa, mas talvez lhe fosse útil: ironia .

Irony é um kit de desenvolvimento para implementar linguagens na plataforma .NET.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.