CLanguage is a .NET Standard library that contains a C/C++ parser, a compiler (to its own VM), and an interpreter (for its VM). It's a very small library that enables you to embed C/C++ scripts into your .NET apps.
It is used to simulate Arduinos in the app iCircuit. It features cycle counting so that infinite loops and long computations can be paused.
I describe other details of it in my blog entry Oops, I Wrote a C++ Compiler.
There are two stages:
CLanguage.Compiler.CCompiler
CLanguage.Interpreter.CInterpreter
Machine information, such as pointer sizes, is stored in MachineInfo
objects.
After compilation, you must create an interpreter, Reset
it, then Run
it.
There is a static Eval
method on CLanguageService
to make compiling and executing expressions easier than setting everything up manually.
For example:
var result = CLanguageService.Eval("2 + 3");
Assert.AreEqual(5, result);