praeclarum / CLanguage

C parser, compiler, and interpreter for .NET
MIT License
270 stars 33 forks source link

CLanguage

NuGet Package

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.

Usage

There are two stages:

  1. Compiling using CLanguage.Compiler.CCompiler
  2. Interpreting using 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.

Simple Evaluation

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);