Programación internacional de lenguaje natural

Recientemente, se han encontrado a menudo artículos sobre nuevos lenguajes de programación, así como varias calificaciones y pronósticos relacionados con la popularidad de los lenguajes de computadora.



También se anuncian nuevas herramientas , que en su trabajo utilizan formatos propios para describir archivos de configuración o una secuencia de comandos ejecutados, lo que también las aproxima mucho al concepto de "lenguaje de programación".



El propósito de este artículo es formular expectativas y posible implementación de un lenguaje de programación abstracto que pueda convertirse en una herramienta universal de comunicación entre una computadora y una persona.



Sobre programadores.



Si comienzas desde el principio, una vez escuché una declaración parafraseada, "cada programador debería escribir su propia base de datos, editor de texto y lenguaje de programación". Y si escribí las dos primeras cosas hace mucho tiempo, el lenguaje de programación aún no ha funcionado.



Después de todo, ¿cómo se crean normalmente los lenguajes de programación?



Todo programador siempre tiene algún tipo de experiencia previa:



  • conocimiento de uno o más lenguajes de programación (cómo podemos prescindir de él)
  • experiencia negativa al usarlos (de lo contrario, si todo te conviene, ¿por qué inventar algo nuevo?)
  • deseo de obtener nuevas oportunidades (cuando algo falta en los idiomas existentes).


Y antes de describir la sintaxis, elegir palabras clave y comenzar el trabajo principal: lexer, parser, bibliotecas base, debe responder las preguntas básicas:



  • ¿Compilador / intérprete / transpilador?
  • ¿Escritura estática o dinámica?
  • ¿Gestión de memoria manual o automática con recolector de basura?
  • Modelo de programación: ¿OOP, funcional, estructural o algo nuevo?
  • ¿Se permiten inserciones de otros lenguajes de programación, etc.?


Probablemente, como la mayoría de los lectores, tenga experiencia en el uso de varios lenguajes de programación. Por lo tanto, durante mucho tiempo ha sido una práctica que para resolver un problema es mejor tomar un idioma conocido o incluso aprender uno nuevo, en lugar de comenzar a escribir el tuyo propio.



Además, no quiero inventar otro idioma solo por un tic o por el idioma en sí. Creo que el propósito de crearlo debería estar fuera de las necesidades del propio desarrollador.



Y me parece que logramos determinar el área para la que se puede demandar el desarrollo de un lenguaje de programación, y los esfuerzos invertidos en él pueden traer beneficios reales.



Acerca de los no programadores.



Esta área es la programación en lenguaje natural para no programadores. Puse deliberadamente las palabras "no programadores" y "natural" entre comillas, ya que estos términos son muy condicionales.



Después de todo, si no un programador comienza a programar, entonces sin darse cuenta, automáticamente se convierte en programador ;-). Por definición, un lenguaje de programación no puede ser "natural". Más precisamente, para las computadoras, el lenguaje ensamblador o un conjunto de instrucciones de la máquina probablemente será "natural".



Por lo tanto, el objetivo es máximo: acercar el lenguaje de programación al lenguaje humano natural.



Esto no solo hará que la lectura del texto del programa sea más comprensible para los no profesionales, sino que también le permitirá comenzar a crear programas simplemente dominando el habla escrita, utilizando el mínimo de reglas básicas.



¡Pero hay un gran problema en esta redacción!



Cualquier lenguaje de programación es internacional, porque su sintaxis es independiente del lenguaje natural en el que se comunica el programador.



Y si el texto del programa está en un lenguaje "natural", entonces será comprensible solo para aquellos que conocen este idioma, mientras que al mismo tiempo se volverá incomprensible para todos los demás.



A modo de ilustración: una o dos veces .


Si fantasea con los deseos de tal lenguaje, verá los siguientes requisitos y restricciones:



  • ( ), , , , .
  • / , «» , «» .
  • Realmente quiero ver tolerancia en el nuevo idioma, tolerancia a la confusión. Tal "característica" está presente en la escritura en lenguaje natural y, a pesar de la presencia de errores tipográficos, el significado casi siempre se conserva. Naturalmente, en este caso, no se debe llegar al fanatismo. El compilador no lee la mente y realmente no puede "entender" lo que el usuario quiso decir, y sin embargo es bastante común ignorar los errores tipográficos en el texto del programa según el contexto (aunque con mensajes de advertencia).


Sin embargo, dicho lenguaje debería seguir siendo solo un lenguaje de programación con todas las posibilidades de crear programas de cualquier nivel de complejidad, incluida la programación funcional y orientada a objetos y una comprensión inequívoca de lo que se ha escrito.



Sobre un lenguaje hipotético



Según las reglas de escritura, las convenciones básicas y la puntuación de un nuevo idioma podrían verse así:



  • Cualquier texto consta de oraciones y comentarios. Las sugerencias se procesan y los comentarios se ignoran.
  • Una oración consta de una secuencia de términos, literales y símbolos, separados por espacios y signos de puntuación, y termina con un carácter de final de oración.
  • Un término es una secuencia fusionada de letras, números y símbolos ":" y "_".
  • Literal: constantes incluidas directamente en el texto del programa, cuyo tipo se determina de forma única. Se trata de cadenas de caracteres entre comillas, enteros y números reales, y algunos formatos especiales (hora, fecha).
  • Símbolos: todos los demás símbolos que no pertenecen a signos de puntuación, espacios en blanco, números y letras.
  • — , :



    • «.»,«;»,«!»,«?»,«…» — .
    • «=» — .
    • "" () — .
    • «()» — / .
    • «[]» — .
    • «{}» — .
    • «$» — .
    • «@» — .
    • «,» () — .
    • «:» () — .


Si todo debe ser más o menos claro con el símbolo de asignación, comillas, paréntesis y corchetes, porque su propósito corresponde al de la gran mayoría de lenguajes de programación, entonces el propósito de los caracteres restantes (llaves, dos puntos, coma y funciones / variable del sistema) debe explicarse un poco.



Dado que el objetivo de un lenguaje de programación hipotético sigue siendo la escritura de programas, es necesario prever la posibilidad de insertar código de programa ordinario sin tener en cuenta todas las posibilidades y ambigüedades inherentes a cualquier lenguaje natural.



Esta capacidad también es necesaria para implementar funciones de bajo nivel e interactuar con bibliotecas externas.



Al crear tales inserciones, se pueden usar llaves, todo el texto entre los cuales se insertará en el archivo final con poco o ningún procesamiento.



Los símbolos "$" - una variable del sistema y "@" - una función del sistema también sirven para propósitos similares. Si dicho símbolo se coloca al principio de una palabra, entonces denotará un objeto con un propósito correspondiente. Por ejemplo, "@exit" significará una función, y "$ var" significará una variable con los nombres apropiados, y los objetos mismos estarán disponibles tanto en código normal como en inserciones programáticas entre llaves.



El acceso a los campos / métodos individuales de los objetos se organiza de manera similar:

"objeto @ método" u "objeto $ campo".



El carácter de coma "," se utiliza para indicar una secuencia de bloques lógicos iguales en una frase o para crear listas.



El carácter de dos puntos ":" se utiliza para crear listas y para indicar una relación lógica entre dos partes de una palabra / texto, incluida la ruta completa del módulo.



Por ejemplo, crear una lista: Consecuencia / indicación de una relación: Como puede ver, el uso de signos de puntuación se toma de su propósito directo, adoptado por escrito, lo que debería proporcionar un cierto equilibrio entre la sintaxis en los lenguajes de programación estándar y la escritura en lenguaje natural.



_: 1, 2, .





_:

- 1;

- 2;

- .












module:calc // «calc», «module»

super:module:example$var // «$var» .











Acerca de las computadoras



Ya que estamos hablando de un lenguaje de programación, no podemos prescindir de construcciones algorítmicas estándar: sucesión, ramificación y bucles.



Lo siguiente se describe fácilmente mediante las reglas habituales de la escritura en lenguaje natural. En el caso de la ejecución secuencial en una declaración, las operaciones y las llamadas a funciones se escriben secuencialmente, separadas por comas. Si están ubicados en diferentes oraciones, entonces se escriben de la misma manera una tras otra. Además, el formato de párrafo solo sirve para una mejor percepción del texto y la separación lógica de los fragmentos individuales.



Al crear estructuras de control condicional y en bucle, ya necesitará palabras clave. Pero dado que, de acuerdo con los deseos originales para el lenguaje, es imposible reservar los términos habituales para escribir construcciones algorítmicas, basta con indicar el símbolo de la función del sistema frente a las palabras clave, lo que permitirá distinguir un término ordinario de una palabra clave (control).



Naturalmente, durante la programación, se pueden utilizar estos términos, pero esto no es en absoluto necesario. Dado que cuando se configura para un lenguaje natural específico, las funciones del sistema y las palabras clave deben tener asignados términos específicos y usarlos ya, por ejemplo:



= @goto,

= @label,

= @continue,

=@break ..








Y el último a su vez, pero probablemente el más importante en esencia, la construcción: pasar parámetros al llamar a funciones. Si buscamos una sintaxis completamente natural, obtenemos el mismo lenguaje natural que es muy difícil de analizar.



Sin embargo, me parece que es posible combinar los dos enfoques eliminando el uso obligatorio de paréntesis, donde está permitido por la sintaxis. Pero: En otras palabras, para el orden natural de los argumentos, se pueden omitir los paréntesis para las funciones y las comas entre los parámetros. Aunque su uso debe estar determinado principalmente por el lenguaje natural de destino y no por la sintaxis.



: (1, 2(), 3=).

: 1 2 3=.












: ( 2() ).

: 2().

: (2 ).












Sobre las objeciones



Preveo objeciones bien fundadas al uso de dicho lenguaje por parte de los programadores. Cualquier programa que contenga resultará mucho más detallado que el uso de la sintaxis formal estricta de los lenguajes informáticos ordinarios.



Por lo tanto, permítame recordarle su propiedad obligatoria: la capacidad de convertir el texto de un programa de un idioma a otro. Esto le permite escribir programas usando una sintaxis estrictamente formal sin usar términos redefinidos del lenguaje natural y convertir el texto fuente en un lenguaje "natural" para un "no programador".



All Articles