{"id":829,"date":"2009-05-16T02:11:10","date_gmt":"2009-05-16T09:11:10","guid":{"rendered":"http:\/\/balafon.net\/?p=829"},"modified":"2009-09-11T10:20:28","modified_gmt":"2009-09-11T17:20:28","slug":"ironmeta-a-parser-generator-for-c","status":"publish","type":"post","link":"https:\/\/balafon.net\/?p=829","title":{"rendered":"IronMeta, a parser generator for C#"},"content":{"rendered":"<p>In between the new job and the new baby I have still managed to finish up the project I&#8217;ve been working on for myself.<\/p>\n<p>It&#8217;s a C# implementation of Alessandro Warth&#8217;s <a href=\"http:\/\/www.cs.ucla.edu\/~awarth\/ometa\/\">OMeta<\/a> pattern matching meta-language.<\/p>\n<p>The <a href=\"http:\/\/ironmeta.sourceforge.net\/\">IronMeta<\/a> 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 <a href=\"http:\/\/en.wikipedia.org\/wiki\/Parsing_expression_grammar\">Parsing Expression Grammars<\/a> or as fully backtracking recursive descent parsers.<\/p>\n<p>IronMeta uses Warth, Douglass and Millstein&#8217;s <a href=\"http:\/\/www.tinlizzie.org\/~awarth\/papers\/pepm08.pdf\">algorithm<\/a> for handling both direct and indirect left-recursion.<\/p>\n<p>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.<\/p>\n<p>IronMeta also allows for higher-order rules, i.e. rules that can take other rules as parameters.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In between the new job and the new baby I have still managed to finish up the project I&#8217;ve been working on for myself. It&#8217;s a C# implementation of Alessandro Warth&#8217;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 &hellip; <a href=\"https:\/\/balafon.net\/?p=829\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;IronMeta, a parser generator for C#&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[187,57,58],"class_list":["post-829","post","type-post","status-publish","format-standard","hentry","category-computing","tag-computing","tag-ironmeta","tag-ometa"],"_links":{"self":[{"href":"https:\/\/balafon.net\/index.php?rest_route=\/wp\/v2\/posts\/829","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/balafon.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/balafon.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/balafon.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/balafon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=829"}],"version-history":[{"count":3,"href":"https:\/\/balafon.net\/index.php?rest_route=\/wp\/v2\/posts\/829\/revisions"}],"predecessor-version":[{"id":1001,"href":"https:\/\/balafon.net\/index.php?rest_route=\/wp\/v2\/posts\/829\/revisions\/1001"}],"wp:attachment":[{"href":"https:\/\/balafon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=829"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/balafon.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=829"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/balafon.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=829"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}