¿Es posible diseñar un idioma que no tenga errores de sintaxis? [cerrado]

13

En otras palabras, ¿un idioma en el que todas las cadenas posibles sean sintaxis válida?

EDIT : esta es una pregunta teórica.
No tengo interés en usar ese idioma; Solo pregunto si es posible.

Edición adicional

Seguí adelante con un lenguaje así diseñado. Consulte ErrorFree

    
pregunta SLaks 19.01.2011 - 15:05

6 respuestas

8

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 un TM regular con una función de transición con una sola transición, que se vea así:

TF(w,q) -> (w,Qa) 

Considerations:
    L = { w | w is any possible string }
    w e L
    q e Q
    F is a set with all good final states {Qa,Qr}
    Qa e F

Se ha demostrado que una TM tiene la misma potencia informática que cualquier computadora de la vida real, por lo que es absolutamente posible

    
respondido por el guiman 19.01.2011 - 15:25
16

Sí, por supuesto que es posible, incluso es trivialmente fácil.

<programm> ::= char | char <program> |

No entiendo cómo alguien puede decir "no". Dicho esto, podría ser bastante difícil definir una semántica significativa para tal lenguaje, pero eso también es posible. Solo mire whitespace .

    
respondido por el user281377 19.01.2011 - 15:22
5

Supongo que depende de lo que entiendas por sintaxis válida.

Puedes diseñar un lenguaje que acepte cualquier cadena pero que ignore cualquier cosa que no haya recibido un significado específico. Básicamente, esto equivale a decir "Me desharé de los errores de sintaxis, pero al decir que no son errores", bastante inútil y enormemente 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 que todas las cadenas posibles tuvieran una instrucción / uso válido asociado. La única forma en que puedo ver eso es tener todas las operaciones como caracteres individuales y garantizar que cada uno tenga una operación asignada.

Hay un millón de cosas que están 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, aunque es inmune a los errores de sintaxis, es mucho más probable que experimente cualquier otro tipo de error.

Teóricamente posible (AmmoQ lo pone mucho más ordenado que yo) pero totalmente indeseable.

    
respondido por el Jon Hopkins 19.01.2011 - 15:22
5

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.

    
respondido por el LennyProgrammers 19.01.2011 - 16:19
3

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, usted desea todo lo contrario: hacer que la sintaxis se extienda lo más posible para ahorrar más tiempo, pero, por supuesto, puede omitir la sintaxis por completo y declarar que cada error es semántico. intérprete de tokenización.

    
respondido por el biziclop 19.01.2011 - 15:57
0
  

Ahbefiasdlk aslerhsofa; f jwi [asdfasdf] aew / & Q! @ # $} {;-P

Entonces, ¿qué significa eso?

Mientras el lenguaje tenga estructura y gramática, siempre habrá un concepto de error de sintaxis. La pregunta es si lo haces cumplir o no. La gente cometerá errores, y los errores de sintaxis son lo que la mayoría de los diseñadores de lenguajes buscan para ayudar a los programadores a evitar errores estúpidos.

  

Un error de sintaxis es un error introducido por los programadores que escriben un código que no tiene significado para el idioma.

Es imposible deshacerse de los errores de sintaxis según la definición anterior. Todos hemos identificado mal los identificadores, todos hemos escrito mal los nombres de los métodos. Hacer que el idioma acepte silenciosamente el error y felizmente no hacer nada no es mi idea de una experiencia agradable.

Es posible diseñar un lenguaje que pueda usar cualquier carácter válido de Unicode (o secuencia de caracteres) como identificadores. Existen desafíos, como la normalización de caracteres equivalentes / secuencias de caracteres para que se reconozcan como la misma cosa, pero es posible. NOTA: hay cuatro tipos estándar de normalización de Unicode .

    
respondido por el Berin Loritsch 19.01.2011 - 16:14

Lea otras preguntas en las etiquetas