Eu estava lendo sobre Iota e Jot e achei esta seção confusa:
Diferentemente de Iota, onde a árvore sintática de uma sequência pode ramificar-se à esquerda ou à direita, a sintaxe Jot é ramificada à esquerda de maneira uniforme. Como resultado, o Iota é estritamente livre de contexto, mas o Jot é uma linguagem comum.
Meu entendimento é que tanto Iota quanto Jot estão completos em Turing. Mas, aparentemente, um é livre de contexto e o outro é regular! Certamente idiomas regulares não podem ser completos de Turing?
regular-languages
programming-languages
turing-completeness
sdleihssirhc
fonte
fonte
1*0
é uma linguagem comum ;-) Embora não seja uma linguagem de programação muito amigável para o programador ou o compilador-escritor.Respostas:
Em suma, a resposta é sim.
Mas você está misturando dois significados completamente não relacionados ao termo "linguagem" (sim, isso é confuso):
Observe que você pode falar sobre "a linguagem C ++" de dois pontos de vista completamente independentes, usando os dois significados não relacionados da palavra "linguagem":
As características da "linguagem C ++" desses dois pontos de vista não são relacionadas.
Mais exemplos para ajudá-lo a separar esses conceitos:
fonte
(([a-z][0-9]*)*[A-Z][0-9]*([a-z][0-9]*)*->([a-zA-Z][0-9]*)*)*
é uma linguagem comum capaz de descrever a gramática de qualquer linguagem da classe 0Enquanto o conjunto de programas legais no Jot é regular, o próprio Jot é Turing-complete. Isso significa que cada função computável pode ser expressa em Jot. Podemos até criar uma linguagem na qual todas as strings binárias são legais, mas a própria linguagem é Turing completa (exercício). Você está confundindo sintaxe e semântica.
A propósito, as linguagens livres de contexto também (provavelmente) não são completas para NP, pois possuem um algoritmo de análise de tempo polinomial.
fonte
Somente a sintaxe (como codificada nas árvores de sintaxe) das linguagens de programação modernas está longe de tudo o que fazem. De fato, as linguagens formais definidas pelo conjunto de todos os programas em uma determinada linguagem que são compiladas sem erros raramente são livres de contexto .
A semântica estática e dinâmica é fator na equação. Eles são invisíveis na árvore de sintaxe, mas determinam se um pedaço de código é realmente um programa e o que ele calcula. Bottom line, o resp livre de contexto. linguagem formal regular, definida por "sintaxe", fornece uma super - aproximação da linguagem de programação.
Agora, para responder sua pergunta: sim, é possível. Considere, por exemplo, qualquer numeração Gödel de máquinas de Turing; você obtém a "linguagem de programação" de todos os números naturais, cada um representando uma TM. É verdade que não é uma linguagem agradável de se programar, mas certamente é uma linguagem completa de Turing que é regular - trivial, até.
fonte
Uma linguagem de programação é Turing-complete se for expressiva o suficiente para especificar todas as funções computáveis pelas máquinas de Turing. Aqui estamos discutindo o poder das linguagens especificadas nas linguagens de programação . Por exemplo, não é difícil escrever um intérprete para máquinas de Turing em Python, portanto, Python é uma linguagem de programação completa de Turing.
A sintaxe de uma linguagem de programação , ou seja, o conjunto de strings correspondentes a programas válidos na linguagem de programação, é ela própria uma linguagem. Por exemplo, considere o conjunto de todos os programas Python possíveis. A sintaxe de uma linguagem de programação pode ser sensível ao contexto , livre de contexto , normal , etc. Estamos interessados na dificuldade de verificar se uma determinada string é um programa válido na linguagem de programação (isto é feito por compiladores / intérpretes). Quando dizemos que a sintaxe de uma linguagem de programação é livre de contexto, significa que existe uma gramática livre de contexto para sua sintaxe e implica que há autômatos push-down para verificar a validade dos programas,
Observe que a simplicidade da sintaxe de uma linguagem de programação não implica uma restrição no poder computacional dos programas especificados nessas linguagens de programação.
fonte
A resposta é sim. Você vê, como a resposta aceita afirma, uma gramática é independente de seu significado. Nas próprias palavras de Chomsky:
Se uma gramática pode produzir sentenças suficientes para descrever todas as coisas que podem ser computadas, podemos atribuir arbitrariamente significado computacional às suas sentenças - uma para cada coisa que pode ser calculada.
Quanto a um exemplo concreto real, a linguagem popular
whitespace
possui uma gramática regular e talvez atéx86 assembly languages
(precisa de verificação).fonte