2010-12-30 12 views
10

La mayoría de los idiomas permiten 'tweek' para extender ciertas partes de la sintaxis (C++, C#) y/o la semántica que utilizará en su código (Katahdin, lua). Pero no he oído hablar de un lenguaje que pueda definir completamente cómo se verá su código. Entonces, ¿no existe algún lenguaje que ya exista que tenga tales capacidades para anular todos sintaxis & definir semántica?¿Hay un lenguaje de programación con semántica cerca de inglés?

ejemplo de lo que quiero hacer es, básicamente, a partir del código C# a continuación:

foreach(Fruit fruit in Fruits) 
{ 
    if(fruit is Apple) 
    { 
    fruit.Price = fruit.Price/2; 
    } 
} 

quiero no ser capaz de escribir el código anterior en mi lengua perfecta como esta:

Check if any fruits are Macintosh apples and discount the price by 50%. 

Las ventajas que me vienen a la mente mirando desde la perspectiva de un codificador en este lenguaje "imaginario" son:

  1. Es muy claro wh at is on (autodescriptivo) - es sencillo English después de todo, incluso el niño entendería mi programa
  2. Oculta todas las complejidades que tengo que escribir en C#. Pero, ¿por qué me debe importar al saber que si las declaraciones, los operadores aritméticos, etc. puesto que ya están implementados

Las desventajas que veo para un codificador que van a mantener este programa son:

  1. Tal vez lo haría expresar este programa de manera diferente a mí, por lo que es posible que no obtenga toda la información que he expresado en mi oración
  2. Los programas pueden ser bastante detallados y difíciles de depurar, pero si es posible aproximar este tipo de sintaxis, quizás más personas lo harían comenzar a programar ¿verdad? Eso sería increíble, creo. Puedo ir a trabajar y acaba de escribir un ensayo para dibujar un cuadrado en un WinForm así:

Create a form called MyGreetingForm. Draw a square with in the middle of MyGreetingFormwith a side of 100 points. In the middle of the square write "Hello! Click here to continue" in Arial font.

En el código anterior el analizador básicamente debe adivinar que yo quiero usar la plaza sin nombre de En la oración anterior, sería difícil escribir un analizador tan inteligente, supongo, pero es tan simple lo que quiero hacer.

If the user clicks on square in the middle of MyGreetingForm show MyMainForm.

En el código anterior 'básicamente' el compilador debe: 1) generar un controlador de eventos 2) comprobar si hay alguna plaza en el centro de la forma y si hay - 3) ocultar el formulario y mostrar otra forma

Parece muy difícil de hacer, pero no me parece imposible IMO para mí al menos aproximado (personalmente puedo generar un analizador para realizar los 3 pasos anteriores np & es básicamente el mismo que tiene para hacer de cualquier manera cuando agregas incluso en C# a.MyEvent=+handler; así que no veo un problema aquí) así que estoy pensando que tal vez alguien ya hizo algo como esto? ¿O existe una carga práctica de complejidad para crear un lenguaje de programación de "estilo ensayo" que no puedo ver? Quiero decir, ¿qué es lo peor que puede pasar si el analizador no es tan bueno?- el programa se bloqueará por lo que tiene que volver a la palabra de él :)

+0

Conozco a un montón de gente que habla en LOLspeak –

+6

No tienen Hubo muchos intentos de "lenguajes semánticos", y solo 2 cosas son consistentes: 1.) parecían un desastre, y 2.) nunca fueron realmente semánticas. –

+0

En mi opinión, su "lenguaje perfecto" no está nada claro. Leí el primer ejemplo como "si alguna fruta es manzanas Macintosh, entonces descuenta el precio total en un 50%", no como "para cada fruta que es una manzana Macintosh, descontar su precio en un 50%". El código C#, por otro lado, está perfectamente claro. –

Respuesta

11

Salida:

The Osmosian Order of Plain English Programmers

Código Ejemplo:

The background is a picture. 

A button has a box and a name. 

To clear the status: 
    Clear the status' string. 
    Show everything. 

To create the background: 
    Draw the screen's box with the white color. 
    Loop. 
    Pick a spot anywhere in the screen's box. 
    Pick a color between the lightest gray color and the white color. 
    Dab the color on the spot. 
    If a counter is past 80000, break. 
    If the counter is evenly divisible by 1000, refresh the screen. 
    Repeat. 
    Extract the background given the screen's box. \or Create the background from the screen. Or something. 
+1

+1 eso es estúpidamente increíble. Podría usar mi "hora de google" para esto. : 3 – birryree

+0

¿Estallará mi computadora si comienzo sample.exe desde el archivo zip que puedo descargar de la página a la que vinculó? –

+0

@Martin: Mine explotó, ten cuidado con eso ;-) – Sarfraz

5

Algunos diseñadores de ficción interactiva utilizan un lenguaje sintaxis extremadamente cercana al idioma inglés. Aquí hay un código Inform 7, que se puede play online:

The foyer is a room. 

The apple is in the foyer. It is edible. The description is "This is a ripe, 
green granny smith apple." 

The apple core is a thing. The description is "This apple core all that is 
left of that granny smith apple you just consumed." 

After eating the apple: 
    now the apple core is in the player; 
    say "You gobble down the apple careful not to eat any of those cyanide- 
    laced seeds you heard about." 

I tutorizado un curso que utiliza Inform 7. Uno de los tutores tenido la impresión de la tarea fue diseñar, no escribir un juego. Entonces marcó los programas leyéndolos, sin darse cuenta de que eran programas reales.

+0

muy agradable, no pude encontrar esto. ¡Gracias! – user44298

2

no creo que esto sería una tarea fácil ni creo que va a hacer la vida más fácil para la depuración

¿Cómo lidiar con estos problemas?

  • faltas de ortografía
  • dialectos diferentes en diferentes partes del mundo
  • dialectos diferentes en la misma parte del mundo
  • sinónimos
  • , que parte de la frase es lo que PARSE primero?
  • lágrima (rasgadura) y rasgadura (del ojo) ambas palabras deletrean son las mismas pero significan dos cosas diferentes.

Traer de vuelta COBOL o se puede recordar "Walk West", "Examine la puerta", "Push puerta", "Puerta Abierta", "Uso llave en la puerta" :)

edición - cómo ¿Escribirías esto fuertemente?

+0

Sí cierto, la depuración sería una locura difícil. Si hay errores de ortografía, pueden ser señalados, aunque creo? – user44298

0

Pruebe usar el lenguaje de programación llamado 'Google': tiene una interfaz natural en inglés y su fragmento de código devuelve todas las respuestas que está sugiriendo. Curiosamente sólo seis minutos después de haber hecho esta pregunta, esta misma página es # 1 para la consulta:

Comprobar si los frutos son Macintosh manzanas y descuentan el precio en un 50%

uso del Google API y creo que tienes la base de un lenguaje de programación natural en inglés.

+0

Búsqueda de Google utiliza una [interfaz de usuario de lenguaje natural] (https://en.wikipedia.org/wiki/Natural_language_user_interface), pero no es una [programación de lenguaje natural] (https://en.wikipedia.org/wiki/Natural_language_programming) sistema. –

1

He escrito un compilador extensible de inglés a pitón llamado EngScript, que convierte el inglés estructurado en código Python funcional.

Este es un ejemplo de código EngScript:

print{create a string from the file called "README.txt"} 
print{save the string "Woohoo!" to a file called "ExampleText.txt"} 
print{the first 3 letters of "EngScript"} 

Ésta es la salida que se ha generado por el compilador EngScript:

print(pythonFunctions.stringFromTextFile("README.txt")) 
print(pythonFunctions.writeStringToFile("ExampleText.txt", "Woohoo!")) 
print("EngScript"[0:(3 - 1)+1]) 
Cuestiones relacionadas