Natural Programming Language .... o que você gostaria de ver?

votos
7

Eu estou olhando para escrever um compilador e depois de eu completar algo em um estilo C Estou olhando para adaptá-lo a outros modelos. Quais são algumas construções sintáticas que você esperaria ver em uma linguagem de programação natural?

A plataforma de destino para este compilador será o CLR e eu estou usando atualmente Oslo + MGrammar para o lexer / analisador (como você provavelmente pode dizer isso é realmente apenas uma desculpa para jogar)

Um dos objetivos do meu projeto seria permitir programação para se sentir mais como uma conversa de sintaxe e demandas estruturada.

Acho que deve se estender este para fora um pouco. Uma das ideias que eu estou trabalhando com está a ter uma declaração de classe lê como um parágrafo.

    A Dog is a mammal.  It may Bark and Run.  To Run it
uses its feet to move forward. It does Lay.

... se traduziria também ...

public class Dog : Mammal{

    public Feet Feet { get; set;}

    public virtual void Bark() {}
    public virtual void Run() {
        this.Feet.MoveForward();
    }
    public void Lay(){}
}
Publicado 19/05/2009 em 22:24
fonte usuário
Em outras línguas...                            


9 respostas

votos
13

Se você quiser que o seu projeto de ser informado por algo que tem ido ao extremo na direção de "naturalidade", Graham Nelson fez algum novo trabalho realmente impressionante em uma linguagem de programação de domínio específico que é baseada na linguagem natural. O sistema é chamado Informe 7 e na minha opinião será amplamente pagar análise.

Uma questão informarão 7 é que a apresentação é totalmente voltado para não-programadores. Não é fácil descobrir, mesmo que a sintaxe é! Mas estou bastante impressionado com os resultados, e eu acredito que existem algumas novas construções de ligação que oferecem genuinamente novas idéias --- não é apenas o material velho em um pacote muito atraente. Vale a pena conferir!

Respondeu 19/05/2009 em 23:53
fonte usuário

votos
6

Realmente, eu não acho que é uma boa idéia para tornar o código mais como linguagem natural. Vai tornar-se excessivamente detalhado. Há uma razão para que ninguém usa COBOL muito poucas pessoas de boa vontade usa COBOL :)

Pode ser uma idéia melhor para chegar a uma forma mais padrão de pronunciar código em voz alta (ele iria ajudar muito se você está tentando explicar o código para alguém, mas não pode mostrar a eles).

Respondeu 19/05/2009 em 22:28
fonte usuário

votos
3

Vou segundo a sugestão de dar uma olhada em Inform 7. No mês passado ou assim eu tenho escrito alguma ficção interativa com Inform7 e é realmente bastante uma linguagem impressionante. Acho que é para ser um refrescante partida das línguas que eu código normalmente, porque eu ainda estou criando algo, mas descrevendo-o de uma forma muito mais natural.

Por exemplo, este seria um programa perfeitamente válida (embora curto) em Inform7:

The Building Lobby is a room.  "You are standing in the lobby of a building."
There is a supporter called desk here.  "A large reception desk is to your right."  
There is a device called lamp on the desk which is switched off.  
There is a container called trash can on the floor next to the desk. 
There is a thing called crumpled paper in the trash can.
Respondeu 25/08/2009 em 02:38
fonte usuário

votos
2

Há uma forma de Inglês Sei que tenta ser tão rigorosa quanto a uma linguagem de programação (e falha): juridiquês. Um advogado é treinado para escrever de forma inequívoca em Inglês, ou algo vagamente parecido com Inglês. (Muitos Latina, algumas frases mágicas, etc.)

Se você quer uma linguagem de programação de propósito geral, ele não vai se assemelhar a linguagem natural. A linguagem natural é ambígua, e se baseia em processamento altamente inteligente e, em muitos casos, um exercício de perguntas e resposta para remover a ambiguidade remanescente. Bem, para tentar removê-lo; em muitos casos, se a pessoa A diz algo para a pessoa B, a opinião de A do que B entendido não é o mesmo que a compreensão de B.

Isto não é realmente um problema com a tecnologia, mas sim com a natureza dos recursos naturais versus línguas artificiais.

Claro, você poderia tentar implementar alguma forma de ambigüidade em seu idioma, mas eu não acho que seria útil. Pode ser divertido para brincar, porém, e esse é o seu objetivo.

Respondeu 19/05/2009 em 23:07
fonte usuário

votos
1

Sua declaração:

A Dog is a mammal.  
It may Bark and Run.  
To Run it uses its feet to move forward. 
It does Lay.

Não soa como uma língua natural real, mas uma forma de linguagem controlada .

Dois exemplos que têm máquina compreensível semântica é Attempto Inglês Controlled que mapeia para gráficos conceituais e Gellish que é usado como uma linguagem de modelagem de dados.

Eu não posso pensar de uma tradução direta de suas declarações sobre 'A Dog', como a primeira declaração parece estar falando sobre o sub-tipo de mamíferos que são cães, mas depois que você começar a falar sobre uma única instância; você precisa ser um pouco mais rigoroso para usar linguagens controladas existentes, algo como.

Every dog is a mammal.
Every dog may bark, or run.
To run is a forward movement.
Every dog uses its feet to run.
Every dog does lay.

(Embora isso perde alguma idéia de de vez em quando sobre a colocação)


O que "usa" implica?

O que "usa" implica no seu exemplo?

E eu estava descrevendo os métodos de instância do objeto “Dog”. Eu nunca disse nada parecido “Spot é um cão. Local começa a correr.”

É "um cão" um objeto, ou você estava referindo-se a classe de todos os cães? Você parecia estar se referindo a todos os cães, e línguas mais controlados exigem essa distinção. "Um cão é um mamífero" vs "Um cão é no jardim". É chamado de "o problema elefante" em livros de PNL.

Para mim, isso iria criar a instância e dizer a instância para executar.

Eu não sei como eu descreveria um método estático para um cão.

Não há tal coisa como um 'método estático' em linguagem natural, então por que você espera ser capaz de descrever tal coisa em algo derivado de uma linguagem natural?

Você pode escopo definir uma relação que tem um escopo "Se o tema da discussão é cães, então casca é um verbo", mas não há muito chamada para definir o âmbito de uma relação (um método estático é apenas uma função com o seu âmbito definido dentro de uma classe); normalmente não é ambígua.

Respondeu 05/07/2009 em 16:49
fonte usuário

votos
1

esta frase é falsa

Eu gosto de matemática e programação, pois eles são bastante absoluta.

A linguagem humana comunica emoção e ambiguidade. É por isso que eu sempre acabam discutindo com as pessoas. Se você não quer que seu computador para discutir com você, e seu compilador para fazer presunções aleatórias abstratas em seguida, ficar com linguagens lógicas I Recon.

Eu imagino traduzir em linguagem natural na semântica de concreto é muito mais difícil que a extração vaga significado de uma sentença através de PNL. Curto de frases como:

call method on sigkill then quit program

Que é muito bonito o que SQL-like em sua estrutura.

Você poderia ir para alguma forma de, a configuração semântica axiomática-como auto-definição (como Auto ou similar) com alguma afinidade lambda cálculo. Editar : Parece que Lisp. Eu retrair que a declaração .. ()) ((()) ) () ()

Dois exemplos de questão relacionada são LOLCODE e Inform7 ... tanto que eu odiaria programar.

Respondeu 19/05/2009 em 22:34
fonte usuário

votos
1

Olhe para interfaces fluentes .

Respondeu 19/05/2009 em 22:31
fonte usuário

votos
0

Dê uma olhada em recurso Rebol análise. Pode definir DSL com base em uma regra. Você poderia atender às suas expectativas facilmente com o mínimo de código

Respondeu 14/10/2009 em 06:52
fonte usuário

votos
0

Pelo que tenho visto recentemente, a maioria das "naturais" linguagens de programação pode ser construído para domínios específicos. Sua quando você entrar em uso linguagens de programação gerais que as coisas têm de se tornar mais geral e como resultado eles lêem menos naturalmente. Eu consideraria CSS para ser uma maneira muito natural de programação que é por isso que não-programadores podem buscá-lo e aplicá-lo muito bem. Eu acho que você vai ter um tempo difícil fazer uma linguagem de uso geral mais natural para ler do que algumas das código Ruby bem composto que já vi. Por outro lado, se você está lidando com um domínio específico, você pode fazer algumas coisas surpreendentes quando você só tem que lidar com um vocabulário limitado.

Respondeu 20/05/2009 em 00:01
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more