Ante este programa:
/*
Hola, mundo desde PROWL
jbgarcia@uvigo.es
*/
obj HolaMundo: ConsoleApplication {
mth + doIt()
{
System.console.writeLn( "¡Hola mundo!" );
return;
}
}
Nótese que hay algunos cambios de sintaxis. Antes, el fin de objeto se marcaba con endObject, mientras que ahora se pueden usar llaves. Antes, era necesario teclear object, method y attribute, cuando obj, atr y mth son igual de válidas. Tal y como se deduce de lo escrito, la antigua sintaxis sigue siendo perfectamente válida.
prowlc ha dicho:
Prowl - PROtotype-Writing Language - A Zero's programming language
v2.0 20100831
f: 'HolaMundo.pwl'
Compilando...
Generando...
Obj(s): 1
EOF('HolaMundo')
Y ha generado esto:
OBJ HolaMundo ConsoleApplication
MTH + doIt
STR ¡Hola mundo!
ASG __gp1
MTH System.console writeLn __gp1
RET
ENM
ENO
Aunque no está terminado, ni mucho menos (sólo soporta algunos tipos de mensajes en este momento), es un gran primer paso. El objetivo es tener un compilador de prowl tan estable como la máquina virtual. Desgraciadamente, el compilador actual fue desarrollado por una estudiante y tiene demasiados casos particulares.
Sobre la implementación, decir que no está basado en Lex & Yacc o variantes. De hecho, no está basado en nada: todo ha sido construido desde el principio. La gramática de PROWL es suficientemente sencilla como para no tener que escribir una analizador léxico y sintáctico complicadísimo, y la diferencia de comportamiento entre las versiones de Linux y Windows del actual compilador me decidieron en este sentido. No me arrepiento, desde luego.