What is MAGES in Dot Net ?


In the late years, another flood of programming languages rose up. Some of them attempt to be broadly useful framework programming languages, e.g.- Rust, some of them need to be low level for convenient figuring, e.g – Go, others attempt to be ideal for efficiency, e.g – Swift, lastly there are additional languages for logical processing like Julia. It is entirely fascinating to see what ideas they convey to the table and how they need to wind up mainstream.

This flood of programming languages is likewise intensely impacted by the pattern towards practical programming. Traditional elements arranged programming is by all accounts prepared to make the following transformative stride. The strong standards constrain us to tail this pattern. The time appears to be on the right track to accomplish something else. As .NET designers we see this by the rising extremity of F# and the elements presented in C# 6 and particularly the ones going to come in C# 7.

This article is about MAGES, a quick lightweight translated scripting language that inter-operates seaming less with the .NET Framework. It can be utilized as a part of most codes, may it be Unity, Xamarin, or the standard structure.


MAGES is a recursive acronym and stands for “MAGES: Another Generalized Expression Simplifier”. It is the official successor to YAMP, which was a comparative venture that was exceedingly fruitful. While YAMP, for the most of the part, was a toy venture with a test plan, MAGES is a totally diverse bosom. It accompanies a strict partition of the entire parser pipeline: Lexical investigation, grammar examination, semantic examination, and code era. It utilized an abnormal state virtual machine to decipher the code in a direct way.

The essential objectives for MAGES are execution, ease of use, and extensibility. This is for the most part accomplished by utilizing standard .NET sorts rather than more advantageous wrappers. We will see that the interop amongst .NET and MAGES is direct and simple to oversee. This, thus, empowers numerous situations and permits clients of the library to rapidly coordinate it. Basically, one just needs to proclaim what components to open and that is it.

The language itself is not progressive. Try not to expect excessively. It contains some flawless components and ought to be quite articulate, yet its principle concern was to have something that can be utilized without requiring much examining. The thought is that a greater portion of people with some involvement in either C, Java, C#, or JavaScript can utilize the language. The language itself won’t be involved in this article, yet we’ll see a few of its elements along the way.


MAGES has been outlined as a library. It’s a little center that can be received, e.g., from Nuget. The library itself contains everything that is required for assessing, examining, or dissecting MAGES code. The assessment pipeline can be separated into the accompanying – totally open – parts:

  • Scanner for the source investigation

  • Tokenizer for the lexical investigation

  • Parser for the syntactic investigation

  • AST walkers for point-to-point assessment and code era

  • A virtual machine with abnormal state operations

  • A runtime framework with administrators and capacities

  • The conceptual sentence structure tree (AST) walkers are entirely critical. They are utilized to recover image data, create the operations for the virtual machine, accept the full code, or give auto-complete data.


The entire parsing model takes after the conventional pipeline character. An IScanner gives us the characters that can be utilized as a part of an ITokenizer. The subsequent stream of tokens (IToken) is then passed to the IParser.

The interfaces are generally entirely lightweight. Consider the entire parser:

public interface IParser


IExpression ParseExpression(IEnumerator<IToken> tokens);

IStatement ParseStatement(IEnumerator<IToken> tokens);

List<IStatement> ParseStatements(IEnumerator<IToken> tokens);


The completion of scanner has moved one step ahead:

public interface IScanner : IDisposable


Int32 Current { get; }

TextPosition Position { get; }

Boolean MoveNext();

Boolean MoveBack();


Conversely, the tokenizer and the tokens are somewhat ahead :

public interface ITokenizer


IToken Next(IScanner scanner);


public interface IToken : ITextRange


TokenType Type { get; }

String Payload { get; }


A token is basically given by a sort, for the most of the part, be that as it may, a few tokens may likewise be conveyed with a payload. Case in point, a string strict likewise accompanies the string its characterizing. The ITextRange interface just pronounces that articles need to announce a begin and end position. This is valid for tokens, as they live inside specific parts of the content. The content position can be recovered from the scanner, which has the Position property. The ITokenizer is in charge of gathering and relegating the right content positions.


MAGES is a decent apparatus to present speedy scripting in any sort of .NET application. It is profoundly performing, extensible, and works consistently with .NET. By grasping the .NET sort framework any sort of API presentation is done in the blink of an eye. The association between the MAGES languages and our custom code feels normal.

For .NET training and placement reviews, please do visit CRB Tech Reviews.

Related Articles:

.Net programming concepts explained in detail