¿Existe un lenguaje de programación en el que puede establecer sus propias configuraciones de sintaxis y convertiría el código al idioma que elija?
Por ejemplo, elegiría configuraciones específicas como "bloques indexados de Python", [a,b,c]
inicializa matrices, ^
para exponenciación y otras. Un script lo convertiría al equivalente de su idioma de elección.
programming-languages
syntax
Dokkat
fuente
fuente
Respuestas:
Sí, pero probablemente no en la forma en que piensas.
Lisp y sus parientes tienen potentes sistemas macro que le permiten realizar transformaciones arbitrarias en su fuente, por lo que, en principio, puede usar macros (y macros de lector, a nivel de caracteres) para hacer casi cualquier extensión que desee. Los lenguajes concatenativos (y los lenguajes de los autores en áreas relacionadas) tienen el potencial de un poder de metaprogramación similar . Un buen ejemplo de esto es Forth , en el que muchas construcciones sintácticas (como comentarios) pueden ser definidas por el usuario. Para un ejemplo contemporáneo, no esotérico, hay un esfuerzo por brindarle a Perl 6 un soporte mejorado sobre Perl 5 para la sintaxis definida por el usuario también.
fuente
operator[]
para múltiples argumentos o introducción de nuevos operadores como en Haskell; pero dudo que el comité vea más allá de los problemas de análisis.Suena como programación conceptual .
No estoy familiarizado con él, pero XL es un lenguaje diseñado específicamente para ello.
Lisp y Forth también admiten programación de conceptos, aunque menos que XL. Sugiero Lisp ya que es muy práctico y efectivo. Lo más importante es una sintaxis clara y flexible, no una notación, que proporciona Lisp.
Te puede interesar un idioma como Haskell que tiene una sintaxis muy flexible pero uniforme.
fuente
No que yo sepa.
Tampoco creo que sea una idea particularmente buena: uno de los principales beneficios de una sintaxis de lenguaje estándar es que muchas personas pueden leerla, y si todos inventaron su propia sintaxis, nadie podría entender el código de otra persona. .... por lo que este lenguaje puede ser divertido para un aficionado pero no es muy útil para nada práctico
Lo más cercano que existe probablemente sería Lisp, donde el sistema macro le permite escribir sus propias construcciones de lenguaje nuevo de una manera muy flexible. Normalmente todavía se mantendría con la sintaxis de Lisp, pero puede redefinir efectivamente todo si realmente lo desea.
Como resultado, Lisps tiende a ser particularmente popular para implementar DSL. Un buen ejemplo es este acceso a datos DSL en Clojure (Korma) que se encarga de todo el código repetitivo requerido para el acceso a la base de datos.
fuente
Scala se usa a menudo de esta manera para crear DSL, lenguajes específicos de dominio.
Esto se debe principalmente a que Scala no tiene operadores, y el método Scala que llama a la sintaxis se puede abreviar. Por ejemplo:
5 es un objeto entero. Para calcular 5 más 7 podrías escribir
val ans = 5.add (7) excepto que el método de suma en realidad se llama "+", por lo que escribiría:
val ans = 5. + (7) pero en Scala, no necesita incluir el "." en las llamadas al método o los paréntesis "()" alrededor de los argumentos, para llamar al método + en el objeto 5, escribiría
val ans = 5 + 7 que funciona perfectamente porque Scala no tiene operadores que interfieran con su ingenioso esquema de nombres de métodos. ¡Ahora extienda esa idea a sus propias clases y objetos, incluido el hecho de que puede "anular" métodos como +, así como crear sus propios métodos llamados >>> o ::! o @ * @ o simplemente nombres de texto sin formato como fancify.
fuente
No digo que deba usarlo, ya que todavía es en su mayoría experimental, pero un paradigma de programación reciente interesante es la programación orientada al lenguaje (LOP).
Sergey Dmitriev lo explica con más detalle .
Esa es su ideología, pero prácticamente se reduce a que respalda el comportamiento que está pidiendo. Usted puede:
El entorno de programación más activo que conozco para seguir este paradigma es el Sistema de Programación Meta (MPS) gratuito de JetBrains.
De hecho, también está comenzando a usarse en software comercial, por lo que tal vez esté comenzando a salir de su fase 'experimental':
fuente
Los lenguajes específicos de dominio se usan con bastante frecuencia en la comunidad Tcl. Por ejemplo, no es raro ver un programa Tcl que contiene C y SQL como DSL incrustados (a través de los paquetes Critcl y Sqlite). ¡La única restricción en un DSL incrustado es que es mucho mejor si el lenguaje incrustado equilibra sus llaves, y eso resulta ser un requisito realmente no oneroso en la práctica!
Otro lenguaje que facilita las DSL es Standard ML, que le permite tener acceso a tokens sin procesar desde el tokenizador genérico del sistema (desde antes del punto donde los identificadores se convierten en palabras clave). Esto facilita la realización de una amplia clase de DSL, siempre que cumplan algunas de las reglas básicas de sintaxis de SML, especialmente en relación con los comentarios, cadenas y límites de token, y de hecho se usa mucho en una serie de aplicaciones clave de manejo del idioma (demostradores de teoremas, etc.)
No todos los idiomas hacen esto tan fácil. En particular, los lenguajes que analizan automáticamente el contenido de los términos entre paréntesis (¡muchos, muchos de ellos!) No pueden hacer esto, por lo que requieren que el DSL sea construido por operadores primarios, colocando el sub-idioma dentro de una cadena, o mediante el uso de un preprocesador que reescribe el DSL en algo que puede manejarse dentro del lenguaje host.
fuente
AFAIU está buscando idiomas que puedan ayudarlo a escribir su propio DSL (Idioma específico del dominio). Hay muchos buenos candidatos. Personalmente, recomendaría Ruby o Io, porque ofrecen 1) sobrecarga fácil del operador, 2) metaprogramación y 3) mecanismos alternativos como los
method_missing
que puede usar para crear su propia API. Por ejemplo, eche un vistazo en sqldsl , un DSL escrito en Ruby que genera SQL leyendo el código Ruby.fuente
Realmente no lo he usado per se, pero si recuerdo bien, TXL está específicamente diseñado para traducir el código fuente. Como tal, debería poder usarlo para especificar cómo traducir desde su idioma y / o extensiones de idioma a cualquier idioma real de destino.
Parece tener una gramática disponible para Javascript. Pero, al no haberlo usado antes, no estoy seguro exactamente cómo eso podría ayudarlo.
fuente
Existe un buen preprocesador llamado PPWizard, bastante potente. Una vez que aprendió su sintaxis, podría crear macro defs para apuntar a diferentes idiomas, no es que fuera infalible o divertido, pero es una herramienta útil.
fuente
Puede ser lo que estás buscando es como compilador compilador. Un compilador compilador toma una definición de lenguaje escrita en un lenguaje formal y crea un compilador para este idioma.
Echa un vistazo a http://en.wikipedia.org/wiki/Compiler-compiler
fuente
Una forma común de personalizar parcialmente un lenguaje de programación es usar un preprocesador de macro. Por ejemplo, podría ejecutar "dokkat-lang" a través del preprocesador C antes de colocar el resultado donde algún entorno de JavaScript lo descargaría.
Cuánto puede hacer depende de la sofisticación de su preprocesador. Tenga en cuenta que las primeras versiones de C ++, Objective C y varios lenguajes experimentales se realizaron preprocesando el código fuente antes de alimentar a una cadena de herramientas de compilación de C en stock.
fuente