Finalmente comencé a comprender la complejidad detrás de la creación de un intérprete y un compilador. He construido varias versiones de TinyBasic, 1964 (Dartmouth) Basic, y mis propias expansiones en esos idiomas antes de llegar a este punto. El proyecto más reciente es uno que llamo Open Source Basic ... porque no se me ocurren otras características del lenguaje que puedan interesar a las personas. Para poder abrir la fuente del lenguaje y comprender cómo se hacen algunas cosas complejas (cómo se escanea, analiza, interpreta y compila)
Open Source Basic se interpreta primero en un lenguaje basado en pila. Ese lenguaje basado en la pila se interpreta y ejecuta inmediatamente o se convierte en un ejecutable CLR.
Todas mis preguntas se reducen a esto:
- ¿Cuáles son las características / construcciones básicas de un lenguaje basado en Basic? Ya tengo estas construcciones básicas: Asignaciones, Expresiones, Variables, algunas funciones (Aleatorio, ToUpper, ToLower), Bucle (para y hacer mientras / hasta), If (bloque y una sola línea) Otras decisiones, entrada basada en la consola (Entrada ) y salida (Imprimir), y subrutinas (sin parámetros, todavía).
- Cuando termine de agregar las construcciones básicas a mi idioma, ¿cómo debo ramificarme? ¿En qué dominio (s)? En otras palabras, ¿qué dirección (s) debe tomar mi lenguaje básico de código abierto una vez que tenga todas las construcciones genéricas funcionando?
Gracias por tu tiempo,
Dominick
fuente
Respuestas:
Mi experiencia con BASIC temprano en el Commodore [Vic-20, C-64] me dio la impresión de que los números de línea eran una "característica" central de BASIC. Parece que ya no se usan en implementaciones modernas, lo que para mí es algo perjudicial ya que mi visión principal de BASIC es como un lenguaje de aprendizaje desde el cual saltar a otra cosa.
fuente
Definitivamente un esfuerzo noble, pero creo que tienes tus prioridades invertidas.
Su primera preocupación debería ser los problemas de "dominio" a los que se dirige su idioma. Es por eso que se llama un "lenguaje específico de dominio" en primer lugar. Un DSL es tolerable solo cuando es pequeño, simple y muy enfocado para resolver un conjunto particular de problemas, como un cuchillo a través de la mantequilla.
Una vez que haya identificado el dominio y cómo funcionará su idioma en el dominio, puede establecer construcciones o características específicas.
Finalmente, puede ser útil considerar si desea un DSL interno o externo .
fuente
He estado desarrollando un lenguaje de secuencias de comandos para una aplicación CAE / FEA y algunas características que he encontrado útiles para los usuarios finales son: Variables locales y globales Matrices con asignación dinámica y expansión Funciones con argumentos y por referencia que pasan Estructuras (tipos definidos por el usuario) Junto con Para empezar, las características que mencionaste deberían ser un lenguaje bastante poderoso. Luego, se desarrollará de acuerdo con la solicitud del usuario.
fuente
Hay varias características que se pueden agregar o ampliar si ya existe, pero ...
... Los lenguajes de programación básicos, son muy similares a los lenguajes de script, y una característica que muchos perdieron o incluyeron más tarde, fue el espacio de nombres o los módulos.
C, C ++, PHP, Visual Basic, comenzaron sin módulos / espacios de nombres, y se agregaron más tarde.
Las siguientes podrían ser subrutinas (procedimientos o funciones que no devuelven un valor) y funciones (subrutinas que devuelven un valor especial).
fuente
Hay una buena pregunta en el sitio Stack Overflow sobre recursos para comprender los compiladores. También puedes echar un vistazo a la página de mi clase de compiladores .
Dadas las características que ya ha creado, sugiero agregar tres tipos de datos: int, string, boolean. Tendrá que hacer tres cosas, cada una un poco más difícil que la anterior:
Si eso va bien, entonces sugiero trabajar en el alcance (local en subrutinas versus global). Avíseme si desea algún consejo al respecto.
Buena suerte. ¡Y disfrutar!
fuente