There is another project of mine to practice TDD (Test-Driven Development) and C#, at:
It is an interpreter (not a compiler) of Go programming language, written in C#. It has a class library project, and a test project. Go is a typed language, so I cannot follow the path of build an expression tree, and evaluate it, as in RubySharp, PythonSharp and Mass. Instead, the interpreter should have many phases, as in ScalaSharp, to detect type inconsistencies, and use the declaration of unknown types at the parse process.
The AST is implemented:
The AST (Abstract Syntax Tree) nodes are in two groups:
– Command Nodes, where they should generate commands to be executed.
– Expression Nodes, that generates expressions to be evaluated. They have an associated type.
The commands declare variables with types. By now, I have all in place to start:
– Declare the types of some declarations of variables and functions
– Control that types are the right ones, ie, an integer variable should not be assigned to an string expression
– Start to emit commands and expression
As in other projects, I want to add access to native .NET types, libraries and objects. I should research how many features of Go I could implement in this approarch. An example: the implementation of Go structures, and their original semantic in C#. I could implement channels (years ago, I implemented channels in C# and AjSharp).