En otras palabras, ¿un lenguaje donde cada cadena posible es una sintaxis válida?
EDITAR : Esta es una pregunta teórica.
No tengo interés en usar ese lenguaje; Solo pregunto si es posible.
Editar más
Seguí adelante y diseñé tal lenguaje. Ver ErrorFree
language-design
syntax
SLaks
fuente
fuente
instruction operand*
, donde un operando puede ser un registro o un número entre 0-127 (y todo lo anterior que se trata como un registro) y si un operando falta para una instrucción multi-arity, se supone '0'.Respuestas:
Sí, si observa esto de una manera muy analítica creando una máquina de Turing determinista que siempre se detiene en un buen estado final para cada cadena de un determinado idioma, entonces habrá demostrado que es posible. La demostración es bastante sencilla, debe tener una TM regular con una función de transición con una sola transición, que se ve así:
Se ha demostrado que una TM tiene la misma potencia informática que cualquier computadora de la vida real, por lo que esto es absolutamente posible.
fuente
Sí, por supuesto que es posible, incluso es trivialmente fácil.
No entiendo cómo alguien puede decir "no". Dicho esto, puede ser bastante difícil definir una semántica significativa para dicho lenguaje, pero eso también es posible. Solo mira el espacio en blanco .
fuente
Supongo que depende de lo que quieras decir con sintaxis válida.
Puede diseñar un lenguaje que acepte cualquier cadena pero ignore cualquier cosa a la que no se le haya prescrito un significado específico. Esto es básicamente el equivalente a decir "Me libraré de los errores de sintaxis pero decir que no son errores", bastante inútil y muy indeseable por muchas razones.
Más allá de eso, la única forma en que podría tener un lenguaje que no tuviera errores de sintaxis sería hacer que cada cadena posible tenga una instrucción / uso válido asociado. La única forma en que puedo hacer eso es tener todas las operaciones como caracteres individuales y asegurarme de que cada personaje tenga una operación asignada.
Hay un millón de cosas mal con esto: obviamente no hay palabras reservadas, se trata de dónde se usa en contexto y, como resultado, sería básicamente ilegible y, mientras que los inmunes a los errores de sintaxis serían mucho más propensos a experimentar cualquier otro tipo de error
Tan teóricamente posible (AmmoQ lo pone mucho más ordenadamente que yo) pero completamente indeseable.
fuente
El código en un lenguaje de programación no basado en texto puede no tener errores de sintaxis.
Estoy pensando en un lenguaje visual como BYOB . No puede escribir accidentalmente "if x ten else foo" porque la "sintaxis" está definida por bloques gráficos.
fuente
El propósito mismo de la sintaxis es diferenciar entre válido y no válido de una manera más rápida y efectiva que ejecutar el código. La sintaxis es solo una optimización, lo que entra y lo que entra en la semántica es arbitrario.
Por lo general, desea todo lo contrario: hacer que la sintaxis se extienda lo más posible para ahorrar más tiempo, pero, por supuesto, también puede omitir la sintaxis por completo y declarar que cada error es semántico: terminará con un intérprete no tokenizador.
fuente
¿Entonces que significa eso?
Mientras el lenguaje tenga estructura y gramática, siempre existirá el concepto de un error de sintaxis. La pregunta es si lo haces cumplir o no. La gente cometerá errores, y los errores de sintaxis son lo que buscan la mayoría de los diseñadores de idiomas para ayudar a los programadores a evitar errores estúpidos.
Es imposible deshacerse de los errores de sintaxis basados en la definición anterior. Todos hemos identificado incorrectamente los identificadores, todos hemos escrito incorrectamente los nombres de los métodos. Que el lenguaje acepte silenciosamente la falta de ortografía y no haga nada felizmente no es mi idea de una experiencia agradable.
Es posible diseñar un lenguaje que pueda usar cualquier carácter Unicode válido (o secuencia de caracteres) como identificadores. Existen desafíos, como la normalización de caracteres equivalentes / secuencias de caracteres para que sean reconocidos como lo mismo, pero es posible. NOTA: hay cuatro tipos estándar de normalización unicode .
fuente