Otro proyecto que tengo para practicar TDD (Test-Driven Development) y C#, es
https://github.com/ajlopez/SharpGo
Un intérprete (no compilador) del lenguaje Go de Google en C#. Como es usual, tiene un proyecto de librería y un proyecto de tests de la librería. Como el lenguaje Go es un lenguaje tipado, no puedo seguir el camino de armar un árbol de expresiones y evaluarla, como en RubySharp, PythonSharp y Mass, sino que el compilador tiene que tener varias fases, como en ScalaSharp, para ir detectando incosistencias de tipos, y declaraciones de tipos que todavía no se conocen al momento de analizar una sentencia o expresión.
Parte del proyecto, los nodos del AST que por ahora están implementados:
Los nodos que estoy armando del AST (Abstract Syntax Tree), se agrupan en dos grandes grupos:
– Nodos de Comandos, que deben producir comandos que se ejecutan.
– Nodos de Expresiones, que deben producir expresiones a evaluar, que devuelvan un valor. Tienen tipo.
Las comandos que declaran variables también tienen tipo. Por ahora, tengo todo dispuesto para comenzar a ir comenzando a:
– Declarar los tipos de algunas declaraciones de variables y funciones
– Controlar que los tipos sean los correctos, por ejemplo que a una variable entera no se le asigne un string
– Comenzar a emitir los comandos y expresiones adecuados
Como en otros proyectos, espero poder agregar acceso a los tipos y librerías propios de .NET. Un tema que tengo que examinar es cuánto del lenguaje Go puedo implementar. Un punto a estudiar: hay referencias a estructuras, que tengo que revisar si es posible mantener la semántica original o no en un lenguaje como C#. Parece interesante implementar canales, que ya hace unos años lo había implementado, tomando ideas de Go, en C# y en AjSharp.
Nos leemos!
Angel “Java” Lopez
http://www.ajlopez.com
http://twitter.com/ajlopez