2010-11-03 13 views
6

duplicados posibles:
Methodologies for designing a simple programming language
Learning to write a compiler¿Cómo harías para escribir un lenguaje de programación simple?

me gustaría escribir un lenguaje de programación con una sintaxis similar a QBasic, pero aún más simple. Quiero que sea para programadores principiantes. Su simplicidad alentará a los aspirantes a programadores a no rendirse e interesarlos en la programación. Por ejemplo: En lugar de de QBasic IMPRIMIR "¡Hola, mundo!"

me gustaría utilizar

escritura "Hello World!"

o un poco más como VB

escritura ("Hola mundo")

¿Cómo hago para adaptar la sintaxis básica para hacer mi idioma?

+0

Posible duplicado de http://stackoverflow.com/q/1208338/246069 – YWE

+0

"Su simplicidad alentará a los aspirantes a programadores a no darse por vencidos y hacer que se interesen en la programación". - No para desanimarte, pero los lenguajes simplistas tienden a entrar en el camino después de un corto tiempo. Prefiero los idiomas que son * simples *, pero no se quedan cortos para las tareas más grandes/más sofisticadas (en particular, Python). Aparte de eso, ¿estás preguntando cómo debería ser la sintaxis, o quieres pistas sobre cómo analizarla realmente? – delnan

+0

Tienes razón. Empecé el año pasado aprendiendo BASIC y realmente lo disfruté, así que ahora estoy intentando aprender C para poder hacer una programación más profunda. También aprendí básico visual. Sin embargo, creo que si de alguna manera puedo modificar la sintaxis básica, posiblemente podría agregar mis propios comandos, convirtiéndolo en una versión más poderosa de BASIC pero con una sintaxis más simple. – RCProgramming

Respuesta

14

Esto no es una tarea simple. El análisis del lenguaje y la teoría del compilador son temas bastante importantes. Mucho o 'matemática. También debe decidir a qué plataforma desea apuntar, lo que también determinará si su idioma está completamente compilado (por ejemplo, C/C++, Pascal), compilado en bytecode (por ejemplo, Python, Java) o interpretado en tiempo de ejecución (por ejemplo, VBScript). , JavaScript). Para especificar el idioma en sí, repasar el Backus-Naur format.

Para ayudarle a lo largo, hay varios generadores robusto analizador por ahí, incluyendo:

  • Lex/Yacc (Flex/bisonte son las versiones de GNU) - El viejo estándar de la industria escuela. Para el desarrollo de un compilador de C/C++
  • ANTLR - Si usted está interesado en crear un compilador de Java utilizando
  • Boost.Spirit - Un enfoque diferente, lo que permite la especificación del lenguaje C++ utilizando en sí.

Y muchos más. La comparación se puede encontrar here, mientras que otra lista se puede encontrar here

Si usted está realmente interesado en la teoría completa, que desea comprobar a cabo The Dragon Book.

Pero debo reiterar: este es un gran tema. Hay muchas, muchas herramientas para ayudarte en el camino, pero el agujero del conejo es bastante profundo.

+3

Este es un gran tema, pero * no * involucra gran parte (al menos lo que mucha gente pensaría as) math. –

+0

Muchas gracias por esta minuciosa respuesta. Tengo algunas preguntas sobre tu respuesta. ¿Qué significa analizar? ¿En qué categoría estaría un lenguaje como BASIC? – RCProgramming

+0

Algunas observaciones: (1) No, no se trata de matemática, pero sí de cosas muy abstractas, sí. (2) JavaScript no se interpreta desde siempre (la mayoría de las implementaciones incluso JIT compila ahora). Hoy en día, ningún lenguaje serio interpreta únicamente el código fuente o incluso el AST directamente (las implementaciones anteriores de Ruby sí lo hacían, los lenguajes con metaprogramación en tiempo de compilación sí lo hacen). (3) (E) El BNF es útil para saberlo, pero los generadores del analizador de DSL se diferencian o no están relacionados por completo, por lo que no son las cosas más importantes. Sin mencionar que esa es solo la gramática, aún tienes que construir un AST y hacerlo funcionar. – delnan

2

creo que el tiro de esto es:

  1. fácil de usar.
  2. Simple de diseñar/implementar.
  3. Fuertes habilidades expresivas.

Elija 1.9 de ellos.

Es muy posible obtener un grado razonable de cualquiera de ellos. Hacer dos completamente es muy muy difícil y tratando de obtener los tres te deja en un no-mans-tierra donde no te va bien.

p.s. Me refiero a la experiencia para # 1 + # 3

Cuestiones relacionadas