compiler-construction - terminales - gramatica de un lenguaje de programacion
Cómo definir una gramática para un lenguaje de programación. (6)
Echa un vistazo a Bison , tal vez eso es lo que estás buscando?
Cómo definir una gramática (sin contexto) para un nuevo lenguaje de programación (lenguaje de programación obligatorio) que desea diseñar desde cero.
En otras palabras: cómo proceder cuando desea crear un nuevo lenguaje de programación desde cero.
Necesitará saber mucho acerca de los lenguajes de programación antes de comenzar a diseñar uno. Recomiendo los lenguajes de programación: aplicación e interpretación por Shriram Krishnamurthi .
Querrá echar un vistazo a EBNF ( Formulario Backus-Naur extendido ).
(Suponiendo que desea escribir una gramática libre de contexto, es decir).
Si te refieres a definir una gramática, lo mejor sería comenzar comenzando con un idioma existente y modificando su gramática para que coincida con lo que buscas. Crear una especificación gramatical es un ejercicio bastante mecánico, usando un conjunto de patrones en tu propia cabeza. Por ejemplo, ¿cómo se ve una instrucción if? Se parece a c
if <- if(exp) block
if <- if(exp) block else block2
o como ML?
if <- if exp then block else block end
O tal vez quieras usar elseifs como Lua:
if <- if exp then exp end
if <- if exp then exp (elseif exp)* else exp end
La gramática y la semántica codifican estas decisiones. Tenga en cuenta que ninguno de estos es todavía adecuado para la implementación en un generador de compiladores LALR o LL (*) todavía, y debería ser masajeado para la implementación porque son ambiguos.
Programming Language Pragmatics de Michael Scott es una buena introducción al diseño de lenguajes de programación. Está disponible en Amazon here
Un paso a la vez.
No en serio, comience con expresiones y operadores, trabaje hacia arriba para hacer declaraciones, luego a funciones / clases, etc. Mantenga una lista de qué puntuación se usa para qué.
En paralelo, defina la sintaxis para referirse a variables, matrices, hashes, números literales, cadenas de caracteres, otros literales incorporados. También en paralelo, defina su modelo de nomenclatura de datos y reglas de alcance.
Para verificar si su gramática tiene sentido, enfóquese en un nivel (literal / variable, operador, expresión, declaración, función, etc.) y asegúrese de que la puntuación y los tokens de otros niveles intercalados o anexados / añadidos no causen una ambigüedad.
Finalmente, escríbalo todo en EBNF y ejecútelo a través de ANTLR o similar.
También es mejor no reinventar la rueda. Normalmente comienzo seleccionando secuencias para iniciar y finalizar bloques y funciones de instrucciones, y operadores matemáticos, que suelen ser fundamentalmente de tipo C, ECMAScript, Basic, basados en listas de comandos o basados en XML. Esto ayuda mucho porque esto es con lo que la gente está acostumbrada a trabajar.
Por supuesto, tiene que encontrar una razón bastante convincente para no abandonar la escritura de un nuevo idioma y simplemente quedarse con C, ECMAScript o Basic, que están bien probados y son muy utilizados.
A menudo, comencé a definir un nuevo idioma solo para encontrar a alguien que ya ha implementado una función en algún idioma existente.
Si su objetivo es la velocidad de desarrollo para algún proyecto específico, es mejor que esté haciendo prototipos en algo como Python, Lua o SpiderMonkey si desea comenzar a trabajar rápidamente y desea reducir la cantidad de escritura necesaria en la mayoría de los idiomas compilados. .
necesita comprar estos dos libros Patrones de implementación de idiomas: Cree sus propios lenguajes de programación generales y específicos del dominio (programadores pragmáticos) y la referencia definitiva a las normas de desarrollo de idiomas (programadores pragmáticos) que tienen todo lo que realmente necesita para comenzar a crear Su propio idioma, analizador, traductor, intérprete y / o compilador.