Em outras palavras, um idioma em que todas as sequências possíveis são sintaxe válida?
EDIT : Esta é uma questão teórica.
Não tenho interesse em usar esse idioma; Só estou perguntando se é possível.
Edição adicional
Fui adiante com um design dessa linguagem. Veja ErrorFree
language-design
syntax
SLaks
fonte
fonte
instruction operand*
, onde um operando pode ser um registro ou um número entre 0-127 (e tudo acima que é tratado como um registro) e se um operando está faltando para uma instrução de várias regiões, '0' é assumido.Respostas:
Sim, se você olhar para isso de uma maneira muito analítica, criando uma máquina de Turing determinística que sempre para em um bom estado final para cada sequência de caracteres de um determinado idioma, demonstrará que isso é possível. A demonstração é bem simples, você deve ter uma TM regular com uma função de transição com apenas uma transição, que se parece com isso:
Demonstrou-se que uma TM possui o mesmo poder de computação que qualquer computador da vida real, então isso é absolutamente possível
fonte
Sim, é claro que é possível, é até trivialmente fácil.
Eu não entendo como alguém pode dizer "não". Dito isso, pode ser um pouco difícil definir uma semântica significativa para esse idioma, mas isso também é possível. Basta olhar para o espaço em branco .
fonte
Eu acho que depende do que você quer dizer com sintaxe válida.
Você pode criar um idioma que aceite qualquer string, mas ignore qualquer coisa que não tenha sido prescrita com significado específico. Isso é basicamente o equivalente a dizer "Eu vou me livrar dos erros de sintaxe, mas dizendo que eles não são erros" - bastante inútil e extremamente indesejável por vários motivos.
Além disso, a única maneira de você ter uma linguagem que não possui erros de sintaxe seria fazer com que todas as sequências possíveis tivessem uma instrução / uso válido associado a ela. A única maneira de ver isso seria ter todas as operações como caracteres únicos e garantir que cada caractere tivesse uma operação atribuída a ele.
Há um milhão de coisas erradas nisso - obviamente não há palavras reservadas, é tudo sobre o local em que é usado no contexto e, como resultado, seria basicamente ilegível e, embora imune a erros de sintaxe, seria muito mais provável que você experimentasse qualquer outro tipo de erro.
Teoricamente possível (a AmmoQ coloca muito mais claramente do que eu), mas totalmente indesejável.
fonte
O código em uma linguagem de programação não baseada em texto pode não ter erros de sintaxe.
Estou pensando em uma linguagem visual como BYOB . Você não pode digitar acidentalmente "se x ten else foo" porque a "sintaxe" é definida por blocos gráficos.
fonte
O próprio objetivo da sintaxe é diferenciar entre válido e não válido de uma maneira que seja mais rápida e eficaz do que executar o código. Sintaxe é apenas uma otimização, o que entra e o que entra na semântica é arbitrário.
Geralmente, você quer o oposto: para estender a sintaxe o máximo possível para economizar mais tempo, mas é claro que você também pode omitir completamente a sintaxe e declarar todos os erros semânticos: você terminará com um intérprete não-tokenizador.
fonte
Então, o que isso significa?
Desde que a linguagem tenha estrutura e gramática, sempre haverá o conceito de erro de sintaxe. A questão é se você aplica ou não. As pessoas cometem erros, e os erros de sintaxe são o que a maioria dos designers de linguagem busca para ajudar os programadores a evitar erros estúpidos.
É impossível se livrar dos erros de sintaxe com base na definição acima. Todos nós identificamos erros de ortografia, todos nós escrevemos erros de nomes de métodos. Ter a linguagem silenciosamente aceitando o erro de ortografia e felizmente não fazer nada não é minha ideia de uma experiência agradável.
É possível criar um idioma que possa usar qualquer caractere unicode válido (ou sequência de caracteres) como identificadores. Existem desafios, como normalizar caracteres equivalentes / seqüências de caracteres para que sejam reconhecidos como a mesma coisa - mas é possível. NOTA: existem quatro tipos padrão de normalização unicode .
fonte