IronMeta 2.1 Released

IronMeta version 2.1 has been released.

Version 2.1 contains some refactoring, miscellaneous bug fixes, as well as:

  • Better error handling and reporting.
  • Added IronMeta.Matcher.CharMatcher.Input() and IronMeta.Matcher.CharMatcher.Trimmed() for more convenient string handling.
  • Added min/max repeats syntax (e.g. 'a' {1, 3}).

IronMeta is an implementation of Alessandro Warth’s OMeta metaprogramming system in C#. It provides a packrat parser generator that generates parsers for Parsing Expression Grammars that operate on arbitrary streams of objects.

IronMeta 2.0 Released

I have released version 2.0 of the IronMeta parser generator. IronMeta is an implementation of OMeta for C#. It generates Packrat PEG parsers that can recognize streams of any C# type and output any other type.

This version contains massive efficiency improvements, and an implementation of Sergio Medeiros’s algorithm for handling left recursion, which is simpler and more general than Warth et al‘s.

This algorithm can handle grammars of the form:

    A <- A a | B
    B <- B b | A | C
    C <- C c | B | d

This grammar would drive ordinary recursive-descent parsers to drink, but IronMeta handles it fine.

IronMeta 1.2 Released

I have released a new version of IronMeta. It makes the syntax closer to the usual OMeta syntax.

I also fixed a bug that caused some redundant evaluation to be done. Performance is still pretty bad, though.

I will be focusing on

You can download the new version at SourceForge, or via Subversion at

IronMeta provides a programming language and application for generating pattern matchers on arbitrary streams of objects. It is an implementation of Alessandro Warth’s OMeta system for C# on .NET.

IronMeta, a parser generator for C#

In between the new job and the new baby I have still managed to finish up the project I’ve been working on for myself.

It’s a C# implementation of Alessandro Warth’s OMeta pattern matching meta-language.

The IronMeta system builds parsers that can operate not only on streams of characters, but streams of objects of arbitrary types. The matchers can operate using the semantics of Parsing Expression Grammars or as fully backtracking recursive descent parsers.

IronMeta uses Warth, Douglass and Millstein’s algorithm for handling both direct and indirect left-recursion.

Grammar rules in IronMeta can take parameters, and in fact can match parameters against a pattern, allowing for different rule patterns depending on the number, type and value of parameters passed to them.

IronMeta also allows for higher-order rules, i.e. rules that can take other rules as parameters.