<?xml version="1.0"?><?xml-stylesheet type="text/xsl" href="/rss.xsl"?><rss version="2.0"><channel><title>irony Wiki &amp; Documentation Rss Feed</title><link>http://www.codeplex.com/irony/Wiki/View.aspx?title=Home</link><description>irony Wiki Rss Description</description><item><title>New Comment on "Expression Grammar sample"</title><link>http://irony.codeplex.com/wikipage?title=Expression Grammar sample&amp;ANCHOR#C26435</link><description>Hello&amp;#10;Can someone explain me the purpose of MarkTransient &amp;#63;&amp;#10;Thank you</description><author>homaica</author><pubDate>Tue, 05 Feb 2013 14:15:36 GMT</pubDate><guid isPermaLink="false">New Comment on "Expression Grammar sample" 20130205021536P</guid></item><item><title>New Comment on "ContribProjects"</title><link>http://irony.codeplex.com/wikipage?title=ContribProjects&amp;ANCHOR#C25277</link><description>re&amp;#58; P5&amp;#58; Handling implied &amp;#34;&amp;#43;&amp;#34; between string literals&amp;#10;This seems more naturally a grammatical construct caught by the Parser than a lexical one caught by the Scanner. Is there a particular reason why that is incorrect&amp;#63;&amp;#10;&amp;#10;Pieter</description><author>pgeerkens</author><pubDate>Sat, 13 Oct 2012 20:37:02 GMT</pubDate><guid isPermaLink="false">New Comment on "ContribProjects" 20121013083702P</guid></item><item><title>Updated Wiki: Home</title><link>http://irony.codeplex.com/wikipage?version=84</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Irony&lt;/b&gt; is a development kit for implementing languages on .NET platform. Unlike most existing yacc/lex-style solutions Irony does not employ any scanner or parser code generation from grammar specifications written in a specialized meta-language. In Irony the target language grammar is coded directly in c# using operator overloading to express grammar constructs. Irony&amp;#39;s scanner and parser modules use the grammar encoded as c# class to control the parsing process. See the &lt;a href="http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&amp;referringTitle=Home"&gt;expression grammar sample&lt;/a&gt; for an example of grammar definition in c# class, and using it in a working parser. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download contents&lt;/b&gt;&lt;br /&gt;The download zip contains core Irony libraries implementing a parsing engine, an interpreter, a number of sample grammars, unit test projects, and Grammar Explorer tool for viewing and debugging your languages (see picture below). &lt;br /&gt;We provide multiple sample grammars for languages like GW Basic, Java, c#, Scheme, SQL, JSON and some others. Irony includes a ready-to-use expression evaluator that can be easily plugged-in into a .NET application.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=irony&amp;DownloadId=322642" alt="irony_GrammarExplorer.jpg" title="irony_GrammarExplorer.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;&lt;br /&gt;Windows 7, .NET Framework 4.0, Visual Studio 2010&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Irony on the Web&lt;/b&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at LangNET 2009 symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx" class="externalLink"&gt;Scott Hanselman about Irony.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/YourFirstDSL.aspx" class="externalLink"&gt;Writing your first Domain-Specific Language&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/" class="externalLink"&gt;A Google-like Full Text Search engine based on Irony parser.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://intellect.dk/post/Writing-a-calculator-in-C-using-Irony.aspx" class="externalLink"&gt;Writing a calculator in c# using Irony&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More information&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Expression%20Grammar%20sample&amp;referringTitle=Home"&gt;Expression Grammar sample&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Contributors&amp;referringTitle=Home"&gt;Contributors&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=ContribProjects&amp;referringTitle=Home"&gt;Willing to Contribute&amp;#63;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Demo%20Running%20Instructions&amp;referringTitle=Home"&gt;Demo Running Instructions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Wikibook: Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - everybody is welcome to contribute.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My blog and other projects&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;Irony blog&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vita.codeplex.com" class="externalLink"&gt;VITA Application Framework&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Fri, 16 Mar 2012 19:41:47 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120316074147P</guid></item><item><title>Updated Wiki: Home</title><link>http://irony.codeplex.com/wikipage?version=83</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Irony&lt;/b&gt; is a development kit for implementing languages on .NET platform. Unlike most existing yacc/lex-style solutions Irony does not employ any scanner or parser code generation from grammar specifications written in a specialized meta-language. In Irony the target language grammar is coded directly in c# using operator overloading to express grammar constructs. Irony&amp;#39;s scanner and parser modules use the grammar encoded as c# class to control the parsing process. See the &lt;a href="http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&amp;referringTitle=Home"&gt;expression grammar sample&lt;/a&gt; for an example of grammar definition in c# class, and using it in a working parser. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download contents&lt;/b&gt;&lt;br /&gt;The download zip contains core Irony libraries implementing a parsing engine, an interpreter, a number of sample grammars, unit test projects, and Grammar Explorer tool for viewing and debugging your languages (see picture below). &lt;br /&gt;We provide multiple sample grammars for languages like GW Basic, Java, c#, Scheme, SQL, JSON and some others. Irony includes a ready-to-use expression evaluator that can be easily plugged-in into a .NET application.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=irony&amp;DownloadId=322642" alt="irony_GrammarExplorer.jpg" title="irony_GrammarExplorer.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;&lt;br /&gt;Windows 7, .NET Framework 4.0, Visual Studio 2010&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Irony on the Web&lt;/b&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at LangNET 2009 symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx" class="externalLink"&gt;Scott Hanselman about Irony.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/YourFirstDSL.aspx" class="externalLink"&gt;Writing your first Domain-Specific Language&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/" class="externalLink"&gt;A Google-like Full Text Search engine based on Irony parser.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://intellect.dk/post/Writing-a-calculator-in-C-using-Irony.aspx" class="externalLink"&gt;Writing a calculator in c# using Irony&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More information&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Expression%20Grammar%20sample&amp;referringTitle=Home"&gt;Expression Grammar sample&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Contributors&amp;referringTitle=Home"&gt;Contributors&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=ContribProjects&amp;referringTitle=Home"&gt;Willing to Contribute&amp;#63;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Demo%20Running%20Instructions&amp;referringTitle=Home"&gt;Demo Running Instructions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Wikibook: Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - everybody is welcome to contribute.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My blog and other projects&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;Irony blog&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vita.codeplex.com" class="externalLink"&gt;VITA - ORM done right&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Thu, 05 Jan 2012 09:49:12 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20120105094912A</guid></item><item><title>New Comment on "Demo Running Instructions"</title><link>http://irony.codeplex.com/wikipage?title=Demo Running Instructions&amp;ANCHOR#C21686</link><description>Fabulous tool &amp;#33; breezed through installation too. thanks &amp;#33;&amp;#33;</description><author>tmaisnam</author><pubDate>Tue, 22 Nov 2011 07:08:49 GMT</pubDate><guid isPermaLink="false">New Comment on "Demo Running Instructions" 20111122070849A</guid></item><item><title>Updated Wiki: Home</title><link>http://irony.codeplex.com/wikipage?version=82</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Irony&lt;/b&gt; is a development kit for implementing languages on .NET platform. Unlike most existing yacc/lex-style solutions Irony does not employ any scanner or parser code generation from grammar specifications written in a specialized meta-language. In Irony the target language grammar is coded directly in c# using operator overloading to express grammar constructs. Irony&amp;#39;s scanner and parser modules use the grammar encoded as c# class to control the parsing process. See the &lt;a href="http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&amp;referringTitle=Home"&gt;expression grammar sample&lt;/a&gt; for an example of grammar definition in c# class, and using it in a working parser. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download contents&lt;/b&gt;&lt;br /&gt;The download zip contains core Irony libraries implementing a parsing engine, an interpreter, a number of sample grammars, unit test projects, and Grammar Explorer tool for viewing and debugging your languages (see picture below). &lt;br /&gt;We provide multiple sample grammars for languages like GW Basic, Java, c#, Scheme, SQL, JSON and some others. Irony includes a ready-to-use expression evaluator that can be easily plugged-in into a .NET application.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=irony&amp;DownloadId=126418" alt="irony_GrammarExplorer.jpg" title="irony_GrammarExplorer.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;&lt;br /&gt;Windows 7, .NET Framework 4.0, Visual Studio 2010&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Irony on the Web&lt;/b&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at LangNET 2009 symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx" class="externalLink"&gt;Scott Hanselman about Irony.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/YourFirstDSL.aspx" class="externalLink"&gt;Writing your first Domain-Specific Language&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/" class="externalLink"&gt;A Google-like Full Text Search engine based on Irony parser.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://intellect.dk/post/Writing-a-calculator-in-C-using-Irony.aspx" class="externalLink"&gt;Writing a calculator in c# using Irony&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More information&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Expression%20Grammar%20sample&amp;referringTitle=Home"&gt;Expression Grammar sample&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Contributors&amp;referringTitle=Home"&gt;Contributors&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=ContribProjects&amp;referringTitle=Home"&gt;Willing to Contribute&amp;#63;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Demo%20Running%20Instructions&amp;referringTitle=Home"&gt;Demo Running Instructions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Wikibook: Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - everybody is welcome to contribute.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My blog and other projects&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;Irony blog&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vita.codeplex.com" class="externalLink"&gt;VITA - ORM done right&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Wed, 19 Oct 2011 16:33:23 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111019043323P</guid></item><item><title>Updated Wiki: Home</title><link>http://irony.codeplex.com/wikipage?version=81</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Irony&lt;/b&gt; is a development kit for implementing languages on .NET platform. Unlike most existing yacc/lex-style solutions Irony does not employ any scanner or parser code generation from grammar specifications written in a specialized meta-language. In Irony the target language grammar is coded directly in c# using operator overloading to express grammar constructs. Irony&amp;#39;s scanner and parser modules use the grammar encoded as c# class to control the parsing process. See the &lt;a href="http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&amp;referringTitle=Home"&gt;expression grammar sample&lt;/a&gt; for an example of grammar definition in c# class, and using it in a working parser. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download contents&lt;/b&gt;&lt;br /&gt;The download zip contains core Irony libraries implementing a parsing engine, an interpreter, a number of sample grammars, unit test projects, and Grammar Explorer tool for viewing and debugging your languages (see picture below). &lt;br /&gt;We provide multiple sample grammars for languages like GW Basic, Java, c#, Scheme, SQL, JSON and some others. Irony includes a ready-to-use expression evaluator that can be easily plugged-in into a .NET application.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=irony&amp;DownloadId=126418" alt="irony_GrammarExplorer.jpg" title="irony_GrammarExplorer.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;&lt;br /&gt;Windows 7, .NET Framework 4.0, Visual Studio 2010&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Irony on the Web&lt;/b&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at LangNET 2009 symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx" class="externalLink"&gt;Scott Hanselman about Irony.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/YourFirstDSL.aspx" class="externalLink"&gt;Writing your first Domain-Specific Language&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/" class="externalLink"&gt;A Google-like Full Text Search engine based on Irony parser.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at 2009 Lang.NET symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://intellect.dk/post/Writing-a-calculator-in-C-using-Irony.aspx" class="externalLink"&gt;Writing a calculator in c# using Irony&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More information&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Expression%20Grammar%20sample&amp;referringTitle=Home"&gt;Expression Grammar sample&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Contributors&amp;referringTitle=Home"&gt;Contributors&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=ContribProjects&amp;referringTitle=Home"&gt;Willing to Contribute&amp;#63;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Demo%20Running%20Instructions&amp;referringTitle=Home"&gt;Demo Running Instructions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Wikibook: Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - everybody is welcome to contribute.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My blog and other projects&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;Irony blog&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vita.codeplex.com" class="externalLink"&gt;VITA - ORM done right&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Wed, 19 Oct 2011 16:27:27 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111019042727P</guid></item><item><title>Updated Wiki: Home</title><link>http://irony.codeplex.com/wikipage?version=80</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Irony&lt;/b&gt; is a development kit for implementing languages on .NET platform. Unlike most existing yacc/lex-style solutions Irony does not employ any scanner or parser code generation from grammar specifications written in a specialized meta-language. In Irony the target language grammar is coded directly in c# using operator overloading to express grammar constructs. Irony&amp;#39;s scanner and parser modules use the grammar encoded as c# class to control the parsing process. See the &lt;a href="http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&amp;referringTitle=Home"&gt;expression grammar sample&lt;/a&gt; for an example of grammar definition in c# class, and using it in a working parser. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download contents&lt;/b&gt;&lt;br /&gt;The download zip contains core Irony libraries implementing a parsing engine, an interpreter, a number of sample grammars, unit test projects, and Grammar Explorer tool for viewing and debugging your languages (see picture below). &lt;br /&gt;We provide multiple sample grammars for languages like GW Basic, Java, c#, Scheme, SQL, JSON and some others. Irony includes a ready-to-use expression evaluator that can be easily plugged-in into a .NET application.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=irony&amp;DownloadId=126418" alt="irony_GrammarExplorer.jpg" title="irony_GrammarExplorer.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;&lt;br /&gt;Windows 7, .NET Framework 4.0, Visual Studio 2010&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project News&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;02/10/2009 - new article on CodeProject: &lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; by Ben Morrison about using Irony for language integration into Visual Studio.&lt;/li&gt;
&lt;li&gt;April 20, 2009 - Recordings of presentations at &lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;2009 Lang.NET symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; are available online. I&amp;#39;ve made a couple of presentations there, the first one about Irony. Watch it, come back with comments. Watch other recordings - very interesting stuff!   &lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Irony on the Web&lt;/b&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at LangNET 2009 symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx" class="externalLink"&gt;Scott Hanselman about Irony.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/YourFirstDSL.aspx" class="externalLink"&gt;Writing your first Domain-Specific Language&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/" class="externalLink"&gt;A Google-like Full Text Search engine based on Irony parser.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at 2009 Lang.NET symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://intellect.dk/post/Writing-a-calculator-in-C-using-Irony.aspx" class="externalLink"&gt;Writing a calculator in c# using Irony&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More information&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Expression%20Grammar%20sample&amp;referringTitle=Home"&gt;Expression Grammar sample&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Contributors&amp;referringTitle=Home"&gt;Contributors&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=ContribProjects&amp;referringTitle=Home"&gt;Willing to Contribute&amp;#63;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Demo%20Running%20Instructions&amp;referringTitle=Home"&gt;Demo Running Instructions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Wikibook: Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - everybody is welcome to contribute.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My blog and other projects&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;Irony blog&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vita.codeplex.com" class="externalLink"&gt;VITA - ORM done right&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Wed, 19 Oct 2011 16:26:43 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111019042643P</guid></item><item><title>Updated Wiki: Home</title><link>http://irony.codeplex.com/wikipage?version=79</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Irony&lt;/b&gt; is a development kit for implementing languages on .NET platform. Unlike most existing yacc/lex-style solutions Irony does not employ any scanner or parser code generation from grammar specifications written in a specialized meta-language. In Irony the target language grammar is coded directly in c# using operator overloading to express grammar constructs. Irony&amp;#39;s scanner and parser modules use the grammar encoded as c# class to control the parsing process. See the &lt;a href="http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&amp;referringTitle=Home"&gt;expression grammar sample&lt;/a&gt; for an example of grammar definition in c# class, and using it in a working parser. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Download contents&lt;/b&gt;&lt;br /&gt;The download zip contains core Irony libraries implementing a parsing engine, interpreter, sample grammars, unit test projects, and Grammar Explorer tool for viewing and debugging your languages (see picture below). &lt;br /&gt;We provide multiple sample grammars for languages like GW Basic, Java, c#, Scheme, SQL, JSON and some others. Irony includes a ready-to-use expression evaluator that can be easily plugged-in into a .NET application.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=irony&amp;DownloadId=126418" alt="irony_GrammarExplorer.jpg" title="irony_GrammarExplorer.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;&lt;br /&gt;Windows 7, .NET Framework 4.0, Visual Studio 2010&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project News&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;02/10/2009 - new article on CodeProject: &lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; by Ben Morrison about using Irony for language integration into Visual Studio.&lt;/li&gt;
&lt;li&gt;April 20, 2009 - Recordings of presentations at &lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;2009 Lang.NET symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; are available online. I&amp;#39;ve made a couple of presentations there, the first one about Irony. Watch it, come back with comments. Watch other recordings - very interesting stuff!   &lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Irony on the Web&lt;/b&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at LangNET 2009 symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx" class="externalLink"&gt;Scott Hanselman about Irony.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/YourFirstDSL.aspx" class="externalLink"&gt;Writing your first Domain-Specific Language&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/" class="externalLink"&gt;A Google-like Full Text Search engine based on Irony parser.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at 2009 Lang.NET symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://intellect.dk/post/Writing-a-calculator-in-C-using-Irony.aspx" class="externalLink"&gt;Writing a calculator in c# using Irony&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More information&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Expression%20Grammar%20sample&amp;referringTitle=Home"&gt;Expression Grammar sample&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Contributors&amp;referringTitle=Home"&gt;Contributors&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=ContribProjects&amp;referringTitle=Home"&gt;Willing to Contribute&amp;#63;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Demo%20Running%20Instructions&amp;referringTitle=Home"&gt;Demo Running Instructions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Wikibook: Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - everybody is welcome to contribute.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My blog and other projects&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;Irony blog&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vita.codeplex.com" class="externalLink"&gt;VITA - ORM done right&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Wed, 19 Oct 2011 16:25:58 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111019042558P</guid></item><item><title>Updated Wiki: Home</title><link>http://irony.codeplex.com/wikipage?version=78</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Irony&lt;/b&gt; is a development kit for implementing languages on .NET platform. Unlike most existing yacc/lex-style solutions Irony does not employ any scanner or parser code generation from grammar specifications written in a specialized meta-language. In Irony the target language grammar is coded directly in c# using operator overloading to express grammar constructs. Irony&amp;#39;s scanner and parser modules use the grammar encoded as c# class to control the parsing process. See the &lt;a href="http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&amp;referringTitle=Home"&gt;expression grammar sample&lt;/a&gt; for an example of grammar definition in c# class, and using it in a working parser. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Initial Release&lt;/b&gt;&lt;br /&gt;The initial release contains implementation of compiler front-end modules - scanner and LALR(1) parser. We provide several test grammars and parser implementations based on them: a grammar for simple arithmetic expressions and simplified grammars for c#, Scheme, SQL, GwBasic, JSON and others. &lt;br /&gt;Sample expression grammar allows evaluation of arithmetic expressions using Irony&amp;#39;s built-in AST interpreter.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Download?ProjectName=irony&amp;DownloadId=126418" alt="irony_GrammarExplorer.jpg" title="irony_GrammarExplorer.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;&lt;br /&gt;Windows 7, .NET Framework 4.0, Visual Studio 2010&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project News&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;02/10/2009 - new article on CodeProject: &lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; by Ben Morrison about using Irony for language integration into Visual Studio.&lt;/li&gt;
&lt;li&gt;April 20, 2009 - Recordings of presentations at &lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;2009 Lang.NET symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; are available online. I&amp;#39;ve made a couple of presentations there, the first one about Irony. Watch it, come back with comments. Watch other recordings - very interesting stuff!   &lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;b&gt;Irony on the Web&lt;/b&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at LangNET 2009 symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.hanselman.com/blog/TheWeeklySourceCode59AnOpenSourceTreasureIronyNETLanguageImplementationKit.aspx" class="externalLink"&gt;Scott Hanselman about Irony.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/YourFirstDSL.aspx" class="externalLink"&gt;Writing your first Domain-Specific Language&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/" class="externalLink"&gt;A Google-like Full Text Search engine based on Irony parser.&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at 2009 Lang.NET symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; &lt;br /&gt;&lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://intellect.dk/post/Writing-a-calculator-in-C-using-Irony.aspx" class="externalLink"&gt;Writing a calculator in c# using Irony&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More information&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Expression%20Grammar%20sample&amp;referringTitle=Home"&gt;Expression Grammar sample&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Contributors&amp;referringTitle=Home"&gt;Contributors&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=ContribProjects&amp;referringTitle=Home"&gt;Willing to Contribute&amp;#63;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Demo%20Running%20Instructions&amp;referringTitle=Home"&gt;Demo Running Instructions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Wikibook: Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - everybody is welcome to contribute.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;My blog and other projects&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;Irony blog&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vita.codeplex.com" class="externalLink"&gt;VITA - ORM done right&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Wed, 19 Oct 2011 16:20:53 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20111019042053P</guid></item><item><title>Updated Wiki: Demo Running Instructions</title><link>http://irony.codeplex.com/wikipage?title=Demo Running Instructions&amp;version=15</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Demo instructions&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;If you are interested in Silverlight version of Irony, make sure you install Silverlight tools before you open Irony solution - see instructions below.&lt;/li&gt;
&lt;li&gt;Open Irony_All.sln solution file in Visual Studio.&lt;/li&gt;
&lt;li&gt;If you are not interested in Silverlight development, remove the project &amp;quot;100.IronySilverlight&amp;quot; from the solution. &lt;/li&gt;
&lt;li&gt;Right-click on the project &amp;quot;030.Irony.GrammarExplorer&amp;quot; and select &amp;quot;Set as StartUp project&amp;quot; from the context menu.&lt;/li&gt;
&lt;li&gt;Click Run button on toolbar (F5). Grammar Explorer Window opens.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Important: if you are launching the Grammar Explorer for the first time after downloading Irony and if you see that Grammars combobox is not empty, then clear it: click on the button next to the combobox and select &amp;quot;Remove all&amp;quot;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;If the Grammar combobox on top is empty, click on the button next to it (or right-click the combobox) and select &amp;quot;Add grammar&amp;quot; command. In the file-open window that appears, navigate to (root)\Irony.Samples\bin\debug folder and select Irony.Samples.dll. Application will popup a small window with a list of grammars in selected assembly. Leave all lines checked and click &amp;quot;OK&amp;quot;. The newly added grammars will appear in the grammar combobox.  &lt;/li&gt;
&lt;li&gt;Select a grammar (language) in top combo-box. If you see exception window with error popping up, then go back to previous step and remove all old grammars by selecting &amp;quot;Remove all&amp;quot; command.&lt;/li&gt;
&lt;li&gt;Browse form tabs to see grammar data. &lt;/li&gt;
&lt;li&gt;To parse source code sample, switch to &amp;quot;Test&amp;quot; tab. Click &amp;quot;Load...&amp;quot; button on top of the form. Open file dialog opens.&lt;/li&gt;
&lt;li&gt;Navigate to &amp;lt;root&amp;gt;\Irony.Samples\SourceSamples folder. Select source file appropriate for currently selected grammar. &lt;/li&gt;
&lt;li&gt;Source file contents are loaded into text area in the form. Click Parse button on top of the form. &lt;/li&gt;
&lt;li&gt;The Output Syntax Tree control on the right (in Results tab in the right tab control) would contain a parsed syntax tree.&lt;/li&gt;
&lt;li&gt;If button &amp;quot;Run&amp;quot; is enabled, click it to execute the code. The results are shown in the Output window at the bottom of the form. For Expression Evaluator grammar, the output is the result of the last expression or assignment. Interpreter for Scheme can execute more complex programs found in SourceSamples\Scheme subfolder.  &lt;/li&gt;
&lt;li&gt;Alternatively you can paste or type your own sample program into source text area. &lt;/li&gt;
&lt;li&gt;Repeat for other selections in the Grammar combobox.&lt;/li&gt;&lt;/ul&gt;
Note that Grammar Explorer restores your last language selection and source sample after you close/restart the form. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installing Silverlight tools&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;If you are going to use Team Foundation Server Client, install it from here: &lt;/li&gt;&lt;/ul&gt;
  http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0ed12659-3d41-4420-bbb0-a46e51bfca86
&lt;ul&gt;&lt;li&gt;Install Visual Studio 2010&lt;/li&gt;
&lt;li&gt;Install Silverlight 4 Tools (from &lt;a href="http://www.microsoft.com/download/en/details.aspx?id=18149" class="externalLink"&gt;http://www.microsoft.com/download/en/details.aspx?id=18149&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Thu, 11 Aug 2011 07:12:16 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Demo Running Instructions 20110811071216A</guid></item><item><title>Updated Wiki: Demo Running Instructions</title><link>http://irony.codeplex.com/wikipage?title=Demo Running Instructions&amp;version=14</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Demo instructions&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;If you are interested in Silverlight version of Irony, make sure you install Silverlight tools before you open Irony solution - see instructions below.&lt;/li&gt;
&lt;li&gt;Open Irony_All.sln solution file in Visual Studio.&lt;/li&gt;
&lt;li&gt;If you are not interested in Silverlight development, remove the project &amp;quot;100.IronySilverlight&amp;quot; from the solution. &lt;/li&gt;
&lt;li&gt;Right-click on the project &amp;quot;030.Irony.GrammarExplorer&amp;quot; and select &amp;quot;Set as StartUp project&amp;quot; from the context menu.&lt;/li&gt;
&lt;li&gt;Click Run button on toolbar (F5). Grammar Explorer Window opens.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Important: if you are launching the Grammar Explorer for the first time after downloading Irony and if you see that Grammars combobox is not empty, then clear it: click on the button next to the combobox and select &amp;quot;Remove all&amp;quot;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;If the Grammar combobox on top is empty, click on the button next to it (or right-click the combobox) and select &amp;quot;Add grammar&amp;quot; command. In the file-open window that appears, navigate to (root)\Irony.Samples\bin\debug folder and select Irony.Samples.dll. Application will popup a small window with a list of grammars in selected assembly. Leave all lines checked and click &amp;quot;OK&amp;quot;. The newly added grammars will appear in the grammar combobox.  &lt;/li&gt;
&lt;li&gt;Select a grammar (language) in top combo-box. If you see exception window with error popping up, then go back to previous step and remove all old grammars by selecting &amp;quot;Remove all&amp;quot; command.&lt;/li&gt;
&lt;li&gt;Browse form tabs to see grammar data. &lt;/li&gt;
&lt;li&gt;To parse source code sample, switch to &amp;quot;Test&amp;quot; tab. Click &amp;quot;Load...&amp;quot; button on top of the form. Open file dialog opens.&lt;/li&gt;
&lt;li&gt;Navigate to &amp;lt;root&amp;gt;\Irony.Samples\SourceSamples folder. Select source file appropriate for currently selected grammar. &lt;/li&gt;
&lt;li&gt;Source file contents are loaded into text area in the form. Click Parse button on top of the form. &lt;/li&gt;
&lt;li&gt;The Output Syntax Tree control on the right (in Results tab in the right tab control) would contain a parsed syntax tree.&lt;/li&gt;
&lt;li&gt;If button &amp;quot;Run&amp;quot; is enabled, click it to execute the code. The results are shown in the Output window at the bottom of the form. For Expression Evaluator grammar, the output is the result of the last expression or assignment. Interpreter for Scheme can execute more complex programs found in SourceSamples\Scheme subfolder.  &lt;/li&gt;
&lt;li&gt;Alternatively you can paste or type your own sample program into source text area. &lt;/li&gt;
&lt;li&gt;Repeat for other selections in the Grammar combobox.&lt;/li&gt;&lt;/ul&gt;
Note that Grammar Explorer restores your last language selection and source sample after you close/restart the form. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Installing Silverlight tools&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;If you are going to use Team Foundation Server Client, install it from here: &lt;/li&gt;&lt;/ul&gt;
  http://www.microsoft.com/downloads/details.aspx?displaylang=en&amp;amp;FamilyID=0ed12659-3d41-4420-bbb0-a46e51bfca86
&lt;ul&gt;&lt;li&gt;Install Visual Studio 2010&lt;/li&gt;
&lt;li&gt;Install Silverlight 4 Tools (from&lt;a href="http://www.microsoft.com/download/en/details.aspx?id=18149" class="externalLink"&gt;http://www.microsoft.com/download/en/details.aspx?id=18149&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Thu, 11 Aug 2011 07:11:53 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Demo Running Instructions 20110811071153A</guid></item><item><title>Updated Wiki: Home</title><link>http://irony.codeplex.com/wikipage?version=77</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Irony&lt;/b&gt; is a development kit for implementing languages on .NET platform. Unlike most existing yacc/lex-style solutions Irony does not employ any scanner or parser code generation from grammar specifications written in a specialized meta-language. In Irony the target language grammar is coded directly in c# using operator overloading to express grammar constructs. Irony&amp;#39;s scanner and parser modules use the grammar encoded as c# class to control the parsing process. See the &lt;a href="http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&amp;referringTitle=Home"&gt;expression grammar sample&lt;/a&gt; for an example of grammar definition in c# class, and using it in a working parser. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Initial Release&lt;/b&gt;&lt;br /&gt;The initial release contains implementation of compiler front-end modules - scanner and LALR(1) parser. We provide several test grammars and parser implementations based on them: a grammar for simple arithmetic expressions and simplified grammars for c#, Scheme, SQL, GwBasic, JSON and others. &lt;br /&gt;Sample expression grammar allows evaluation of arithmetic expressions using Irony&amp;#39;s built-in AST interpreter.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=irony&amp;DownloadId=126418" alt="irony_GrammarExplorer.jpg" title="irony_GrammarExplorer.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;&lt;br /&gt;Windows 7, .NET Framework 4.0, Visual Studio 2010&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project News&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/recipes/YourFirstDSL.aspx" class="externalLink"&gt;Writing your first Domain-Specific Language&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - two articles by Daniel Flower at CodeProject.com. An excellent introduction to using Irony for parsing &amp;quot;little&amp;quot; application-specific languages - DSLs. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/" class="externalLink"&gt;A Google-like Full Text Search&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - an article by Michael Coles about Google-to-SQL Server full-text search query converter based on Irony. &lt;/li&gt;
&lt;li&gt;02/10/2009 - new article on CodeProject: &lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; by Ben Morrison about using Irony for language integration into Visual Studio.&lt;/li&gt;
&lt;li&gt;April 20, 2009 - Recordings of presentations at &lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;2009 Lang.NET symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; are available online. I&amp;#39;ve made a couple of presentations there, the first one about Irony. Watch it, come back with comments. Watch other recordings - very interesting stuff!   &lt;/li&gt;
&lt;li&gt;May 2, 2009. Started a &lt;b&gt;blog about Irony: &lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;http://irony-roman.blogspot.com/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;. The first post is about changes in April code update. Enjoy it!&lt;/li&gt;
&lt;li&gt;Oct 12, 2009. Updated the release download version&lt;/li&gt;
&lt;li&gt;June 6, 2010. A wikibook for documenting Irony : &lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (http://en.wikibooks.org/wiki/Irony&lt;i&gt;-&lt;/i&gt;Language&lt;i&gt;Implementation&lt;/i&gt;Kit). Everybody is welcome to contribute!&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More information&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Contributors&amp;referringTitle=Home"&gt;Contributors&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=ContribProjects&amp;referringTitle=Home"&gt;Willing to Contribute&amp;#63;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Demo%20Running%20Instructions&amp;referringTitle=Home"&gt;Demo Running Instructions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Expression%20Grammar%20sample&amp;referringTitle=Home"&gt;Expression Grammar sample&lt;/a&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at LangNET 2009 symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;Irony blog&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Wikibook: Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vita.codeplex.com" class="externalLink"&gt;My other project: VITA - ORM done right&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Thu, 04 Aug 2011 18:24:04 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110804062404P</guid></item><item><title>Updated Wiki: Contributors</title><link>http://irony.codeplex.com/wikipage?title=Contributors&amp;version=6</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Contributors&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The following people made contributions to Irony project, and I would like to express my gratitude to them:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Alexey Yakovlev (yallie)&lt;/b&gt; 
&lt;ul&gt;&lt;li&gt;Contributed Refal programming language implementation.&lt;/li&gt;
&lt;li&gt;Implemented auto-reloading on compile of grammar assemblies in Grammar Explorer.&lt;/li&gt;
&lt;li&gt;Implemented LineContinuationTerminal.&lt;/li&gt;
&lt;li&gt;Implemented semi-automatic parser conflict resolution from token preview (08/02/2011 - currently in review).&lt;/li&gt;&lt;/ul&gt;
  &lt;br /&gt;&lt;b&gt;William Horner (wmh)&lt;/b&gt;: contributed implementation of auto-compiled delegates for AST node creation.&lt;br /&gt;&lt;b&gt;Philipp Serr&lt;/b&gt;: completed NumberLiteral implementation with advanced features for c#, python, VB&lt;br /&gt;CodePlex user &lt;b&gt;notmasteryet&lt;/b&gt;: improved GwBasic grammar to make it match the syntax rules of GwBasic&lt;br /&gt;&lt;b&gt;Benjamen Morrison&lt;/b&gt;: created an implementation of Language Services for Visual Studio integration based on Irony.   This code is not a part of Irony codebase (yet), but you can find it in the article in CodeProject.com&lt;br /&gt;&lt;b&gt;Michael Coles&lt;/b&gt; - created SearchGrammar for converting Google-like search queries into MS SQL Server full-text search syntax. The code is used in his book &amp;quot;Pro Full-Text Search in SQL Server 2008&amp;quot;.&lt;br /&gt;&lt;b&gt;Kirill Osenkov&lt;/b&gt;: created IronySilverlight, Irony version for Silverlight environment&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Tue, 02 Aug 2011 21:38:01 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Contributors 20110802093801P</guid></item><item><title>Updated Wiki: Contributors</title><link>http://irony.codeplex.com/wikipage?title=Contributors&amp;version=5</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Contributors&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The following people made contributions to Irony project, and I would like to express my gratitude to them:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Alexey Yakovlev (yallie)&lt;/b&gt; 
&lt;ul&gt;&lt;li&gt;Contributed Refal programming language implementation.&lt;/li&gt;
&lt;li&gt;Implemented auto-reloading on compile of grammar assemblies in Grammar Explorer.&lt;/li&gt;
&lt;li&gt;Implemented LineContinuationTerminal.&lt;/li&gt;
&lt;li&gt;Implemented semi-automatic parser conflict resolution from token preview (08/02/2011 - currently in review).&lt;/li&gt;&lt;/ul&gt;
  &lt;br /&gt;&lt;b&gt;user wmh&lt;/b&gt;: contributed implementation of auto-compiled delegates for AST node creation.&lt;br /&gt;&lt;b&gt;Philipp Serr&lt;/b&gt;: completed NumberLiteral implementation with advanced features for c#, python, VB&lt;br /&gt;CodePlex user &lt;b&gt;notmasteryet&lt;/b&gt;: improved GwBasic grammar to make it match the syntax rules of GwBasic&lt;br /&gt;&lt;b&gt;Benjamen Morrison&lt;/b&gt;: created an implementation of Language Services for Visual Studio integration based on Irony.   This code is not a part of Irony codebase (yet), but you can find it in the article in CodeProject.com&lt;br /&gt;&lt;b&gt;Michael Coles&lt;/b&gt; - created SearchGrammar for converting Google-like search queries into MS SQL Server full-text search syntax. The code is used in his book &amp;quot;Pro Full-Text Search in SQL Server 2008&amp;quot;.&lt;br /&gt;&lt;b&gt;Kirill Osenkov&lt;/b&gt;: created IronySilverlight, Irony version for Silverlight environment&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Tue, 02 Aug 2011 21:34:14 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Contributors 20110802093414P</guid></item><item><title>Updated Wiki: Contributors</title><link>http://irony.codeplex.com/wikipage?title=Contributors&amp;version=4</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Contributors&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;The following people made contributions to Irony project, and I would like to express my gratitude to them:&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Alexey Yakovlev (yallie)&lt;/b&gt; 
&lt;ul&gt;&lt;li&gt;Contributed Refal programming language implementation.&lt;/li&gt;
&lt;li&gt;Implemented auto-reloading on compile of grammar assemblies in Grammar Explorer.&lt;/li&gt;
&lt;li&gt;Implemented LineContinuationTerminal.&lt;/li&gt;
&lt;li&gt;Implemented semi-automatic parser conflict resolution from token preview (08/02/2011 - currently in review).&lt;/li&gt;&lt;/ul&gt;
  &lt;br /&gt;&lt;b&gt;Philipp Serr&lt;/b&gt;: completed NumberLiteral implementation with advanced features for c#, python, VB&lt;br /&gt;CodePlex user &lt;b&gt;notmasteryet&lt;/b&gt;: improved GwBasic grammar to make it match the syntax rules of GwBasic&lt;br /&gt;&lt;b&gt;Benjamen Morrison&lt;/b&gt;: created an implementation of Language Services for Visual Studio integration based on Irony.   This code is not a part of Irony codebase (yet), but you can find it in the article in CodeProject.com&lt;br /&gt;&lt;b&gt;Michael Coles&lt;/b&gt; - created SearchGrammar for converting Google-like search queries into MS SQL Server full-text search syntax. The code is used in his book &amp;quot;Pro Full-Text Search in SQL Server 2008&amp;quot;.&lt;br /&gt;&lt;b&gt;Kirill Osenkov&lt;/b&gt;: created IronySilverlight, Irony version for Silverlight environment&lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Tue, 02 Aug 2011 21:32:39 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Contributors 20110802093239P</guid></item><item><title>Updated Wiki: ContribProjects</title><link>http://irony.codeplex.com/wikipage?title=ContribProjects&amp;version=25</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Willing to Contribute? Here is a To-Do list for Release&lt;/h1&gt;July 07, 2011.&lt;br /&gt;Hi everybody!&lt;br /&gt;These are things that, in my opinion, need to be done before we declare the Release. Any help and contributions are welcome! &lt;br /&gt;&lt;b&gt;For a while, I will NOT be working on any of these items, or in this area&lt;/b&gt; - so feel free to pick any item and start hacking. I will be finishing Interpreter.&lt;br /&gt;If you see something you would like to work on, make sure you are in contact with other people who may be working on the same item. Once you selected the project, find an existing discussion related to it. Either follow the link to discussion thread in the project item (if it is enabled), or search Discussions page for a thread about this item. If there&amp;#39;s no existing thread, then start a new one - set the title to match the item title. Post a message to this &lt;a href="http://irony.codeplex.com/discussions/264535" class="externalLink"&gt;discussion thread&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announcing your intent to work on some item, with a link to item&amp;#39;s discussion.&lt;br /&gt;I will update the link to discussion thread on this page.&lt;br /&gt;&lt;br /&gt;
&lt;h2&gt;Scanning and Terminals&lt;/h2&gt; &lt;b&gt;&lt;del&gt;P1: Create LineContinuationTerminal&lt;/del&gt;&lt;/b&gt; - DONE, &lt;a href="http://irony.codeplex.com/discussions/265782" class="externalLink"&gt;http://irony.codeplex.com/discussions/265782&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;A terminal class to handle continuation symbols like &amp;quot;_&amp;quot; in VB, use it in GWBasic. &lt;br /&gt;Note: MiniPython grammar in Samples uses CodeOutlineFilter that handles continuation symbol &amp;quot;\&amp;quot;. But for simpler case like GwBasic it seems overcomplicated, better have a simple terminal just for this.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P2: Handling embedded documentation (Xml comments)&lt;/b&gt;  (Discussion thread)&lt;br /&gt;A terminal to handle Xml comments or other types of embedded documentation (&amp;quot;=begin/=end&amp;quot; in Ruby, DocLines in Python). The terminal (TokenFilter?) should assemble documentation block from multiple lines and put it into ParseTreeNode.Documentation field (to be added) of the subsequent parse tree node.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P3: Implement IncludeText support&lt;/b&gt;  (Discussion thread)&lt;br /&gt;Facility to handle &amp;quot;include&amp;quot; statement, when you include text directly into the source (not reference external module). See discussion http://irony.codeplex.com/Thread/View.aspx?ThreadId=204640&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P4: Fancy string types&lt;/b&gt;  (Discussion thread)&lt;br /&gt;Either extend StringLiteral, or create a new terminal to handle the following:
&lt;ol&gt;&lt;li&gt;Lua: [[ ... ]] string type; note: fist newline is ignored. Also the start end pair might be with &amp;quot;=&amp;quot; added:   [===[ .... ]===] ; same for comment  --[[ ... ]] &lt;/li&gt;
&lt;li&gt;Ruby:  &amp;#39;%&amp;#39; notation (&lt;a href="http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals" class="externalLink"&gt;http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;&lt;/ol&gt;
&lt;pre&gt;
       myString = %&amp;amp;This is my String&amp;amp;
	%Q/This is the same as a double-quoted string./    # &amp;#39;%Q&amp;#39; is treated as double-quoted string  &lt;/pre&gt;&lt;br /&gt;Interesting case is &amp;#39;%w&amp;#39;: %w(foo bar baz) is equivalent to  [&amp;#39;foo&amp;#39;, &amp;#39;bar&amp;#39;, &amp;#39;baz&amp;#39;]  - maybe a separate terminal for handling this?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P5: Handling implied &amp;quot;+&amp;quot; between string literals.&lt;/b&gt;   (Discussion thread)&lt;br /&gt;Ruby allows missing &amp;quot;+&amp;quot; operator in concatenating strings:&lt;br /&gt;&lt;pre&gt;
		myString = &amp;quot;Welcome &amp;quot; &amp;quot;to &amp;quot; &amp;quot;Ruby!&amp;quot;
		=&amp;gt; &amp;quot;Welcome to Ruby!&amp;quot; &lt;/pre&gt;&lt;br /&gt;Add support for this to StringLiteral - new option flag; if it is set, the matching code tries to search beyond the ending quote and checks if it is followed by other literal; if yes - the string is joined in one token.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P6: Implement HereDoc terminal (Ruby)&lt;/b&gt; (Discussion thread)&lt;br /&gt;Implement a terminal class to handle embedded text like HereDoc in Ruby (similar things in other languages?).&lt;br /&gt;Ruby HereDoc element is treated as double-quoted string; &amp;#39;&amp;lt;&amp;lt;-&amp;#39; allows indenting ending tag; &amp;#39;&amp;lt;&amp;lt;&amp;#39; does not; &lt;br /&gt;Note that Ruby allows starting multiple HereDocs on a single line&lt;br /&gt;&lt;pre&gt;
		puts &amp;lt;&amp;lt;BEGIN + &amp;quot;&amp;lt;--- middle ---&amp;gt;\n&amp;quot; + &amp;lt;&amp;lt;END
		This is the beginning:
		BEGIN
		And now it is over!
		END
		
		# this equals this expression:
		puts &amp;quot;This is the beginning:\n&amp;lt;--- middle ---&amp;gt;\nAnd now it is over!&amp;quot;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P7: Create reduced Ruby grammar&lt;/b&gt;  (Discussion thread)&lt;br /&gt;To test all these fancy terminals mentioned in previous sections (Ruby variations) - would be nice to have some reduced version of Ruby grammar - call it MiniRuby?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P8: Add RegEx validation pattern to Identifier terminal; support for specific values&lt;/b&gt; (Discussion thread)&lt;br /&gt;Some languages have certain rules about identifiers; for ex, &amp;#39;Oneletter+OneDigit&amp;#39; in GwBasic. Add a property to IdentifierTerminal, Regex expression, to validate the identifier. &lt;br /&gt;On a similar theme: Scheme has a notion of &amp;quot;Peculiar identifier&amp;quot; in its syntax definition - identifier with a fixed list of values:&lt;br /&gt; Peculiar identifier = +|-|... &lt;br /&gt;See how this can be supported. Maybe Regex pattern listing all variations?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P9: Support for nested comments&lt;/b&gt; (Discussion thread)&lt;br /&gt;Examples:  {- and -} in Haskell, similar thing in Scheme with &amp;quot;&amp;#39;(...)&amp;quot; - commenting out blocks of code with nested parenthesis.&lt;br /&gt;Add support for this to CommentTerminal.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P10: Support for &amp;quot;special&amp;quot; treatment of the first line in code file&lt;/b&gt; (Discussion thread)&lt;br /&gt; Lua- first line in file ignored if it starts with #; similar in CSV files - the first line has field names&lt;br /&gt;One way to implement: add a LanguageFlag, and if it is set, Scanner calls some special overridable method in Grammar: HandleFirstLine(....)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P11: Implement BackgroundTextTerminal&lt;/b&gt;   (Discussion thread)&lt;br /&gt;A special terminal for grabbing everything that does not fall into other terminals. Will be used in Wiki and template parsers. &lt;br /&gt;Let&amp;#39;s look at Wiki terminals as an example. It has a bunch of terminals with certain start symbols, like &amp;quot;*&amp;quot; for bold, etc.&lt;br /&gt;Scanner select a terminal based on current input symbol, trying to match it to one of First symbols of registered terminals. If it fails to match to any, it should call Background terminal (this can be done probably by making it a &amp;quot;fallback&amp;quot; terminal - the one that does not declare any test symbols). Now the interesting stuff. The background terminal should &amp;quot;eat&amp;quot; the text until it hits any of the &amp;quot;First&amp;quot; symbols of other terminals.  At this point it stops, produces token and yields control to Scanner - which will try to select a terminal again. &lt;br /&gt;To be able to do this (stop at other&amp;#39;s firsts), the background terminal must be able to &amp;quot;spy&amp;quot; on other terminals and grab all their &amp;quot;first&amp;quot; symbols at initialization. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;P12: Terminal for handling inlined Xml&lt;/b&gt; (Discussion thread)&lt;br /&gt;A terminal to scan inlined Xml (Scala). &lt;br /&gt;
&lt;h2&gt;Miscellaneous projects (more challenging and requiring more effort)&lt;/h2&gt;&lt;b&gt;&lt;del&gt;P21: Implement fast compiled delegate to create AST nodes&lt;/del&gt;&lt;/b&gt; DONE: &lt;a href="http://irony.codeplex.com/discussions/265806" class="externalLink"&gt;http://irony.codeplex.com/discussions/265806&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;AstNodes are created by Parser using reflection, which is slow. Implement creating dynamic compiled delegates calling AST node constructors. For an example, see Vita project, EntityClassBuilder class, method InstanceCreatorMethod - creates compiled method to create entity instances. Plan: NonTerminal should have a property Creator - pointer to delegate creating the Ast instance. If it is null (default), then the method is built by ParserDataBuilder. Then this method is used by Parser for creating node instances. Place all static creator methods in one static class generated at runtime. &lt;br /&gt;Note that there is already a method pointer for custom AST node creation. This new one is an addition, for the case when grammar provides AstNode type only.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P22: Switch to .NET big int, complex, rational in VS2010&lt;/b&gt;  (Discussion thread)&lt;br /&gt;BigInteger, Complex are supported in .NET 4.0. Implementation of ration numbers (BigRational) is available here: &lt;a href="http://bcl.codeplex.com" class="externalLink"&gt;http://bcl.codeplex.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;A good place to test is Scheme grammar - Scheme supports all these data types.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P23: Console window for Grammar Explorer&lt;/b&gt;  (Discussion thread)&lt;br /&gt;Create and integrate Console control in Grammar Explorer, to show interactive console directly inside in the form, instead of read-only Runtime Output window.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P24: Pretty print facility&lt;/b&gt; (Discussion thread)&lt;br /&gt;Implement &amp;quot;pretty printer&amp;quot; - some way to output parse tree in a nice formatted form. The formatting options should be provided through some setup class (like indentation, etc)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P25: Specifying custom infix operator precedence and associativity on per-file basis.&lt;/b&gt;  (Discussion thread)&lt;br /&gt;Haskell allows this: infix, infixl, infixr methods in Haskell.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P26: Finish LINQ syntax implementation in c# grammar.&lt;/b&gt;  (Discussion thread)&lt;br /&gt;This is mostly to explore additional twist - scoped reserved words. &lt;br /&gt;Extract from c# language spec, section 7.16.1:&lt;br /&gt;&lt;br /&gt;  &lt;i&gt;Query expressions contain a number of “contextual keywords”, i.e., identifiers that have special meaning in a given context. Specifically these are from, where, join, on, equals, into, let, orderby, ascending, descending, select, group and by. In order to avoid ambiguities in query expressions caused by mixed use of these identifiers as keywords or simple names, these identifiers are considered keywords when occurring anywhere within a query expression.&lt;/i&gt;&lt;br /&gt;  &lt;i&gt;For this purpose, a query expression is any expression that starts with “from identifier” followed by any token except “;”, “=” or “,”.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;This introduces a concept of &amp;quot;scoped&amp;quot; reserved words: some keywords are reserved words (in Irony&amp;#39;s meaning) only inside some scope/statement. Suggestions on implementation?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P27: Refactor/rebuild unit tests projects.&lt;/b&gt;  (Discussion thread)&lt;br /&gt;This is a big one. The current state is a shameful mess. Existing unit tests make quick shortcuts to instantiate terminals and call TryParse directly. &lt;br /&gt;We need to implement more complete tests, with test grammars, systematically covering all aspects of functionality.&lt;br /&gt;
&lt;h2&gt;Advanced Research Projects&lt;/h2&gt;&lt;b&gt;P31: Survey popular languages&lt;/b&gt;&lt;br /&gt;Survey modern languages and identify which facilities are missing in Irony to build parsers for these languages (mainly terminals). Suggested languages to look at: Scheme, Python, Ruby, GwBasic, Lua, Tcl, JavaScript, Clojure, Scala, Boo,Haskell, Erlang, Groovy, Smalltalk, PHP, Go (new Google language). &lt;br /&gt;All these are modern and popular languages - but why not include older ones - like Cobol? Even if we never write Cobol compiler, somebody may need to write colorizer for Cobol editor.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;del&gt;P32: Token Preview -based Semi-Automatic Conflict Resolution.&lt;/del&gt;&lt;/b&gt; (DONE)&lt;br /&gt;This topic deserves its own page: &lt;a href="http://irony.codeplex.com/wikipage?title=Contrib_ConflictResolution&amp;referringTitle=ContribProjects"&gt;Automatic Conflict Resolution&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P33: Macro facilities&lt;/b&gt;&lt;br /&gt;See how to implement macro facilities, starting from plain c macros up to advanced stuff like Scheme Macro system.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P34: Template processor&lt;/b&gt;&lt;br /&gt;Parser for template files, which include &amp;quot;text&amp;quot; and embedded script commands (Ruby rhtml format as an example).&lt;br /&gt;Things to consider - embedded grammars or sub-grammars, a separate grammar attached to some terminal that will be used to parse sub-sections of the text.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P35: Basic code analysis algorithms&lt;/b&gt;&lt;br /&gt;Implement some basic code analysis - &amp;quot;Lattices&amp;quot; and all that stuff. Maybe not for this release, but more long-term. The goal is to implement algorithms for detecting loops, uninitialized variables, unused code, etc. The most approachable introduction to the subject I found in &amp;quot;Advanced Compiler Design Implementation&amp;quot; by Steven Muchnick.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Tue, 02 Aug 2011 21:28:36 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ContribProjects 20110802092836P</guid></item><item><title>Updated Wiki: ContribProjects</title><link>http://irony.codeplex.com/wikipage?title=ContribProjects&amp;version=24</link><description>&lt;div class="wikidoc"&gt;&lt;h1&gt;Willing to Contribute? Here is a To-Do list for Release&lt;/h1&gt;July 07, 2011.&lt;br /&gt;Hi everybody!&lt;br /&gt;These are things that, in my opinion, need to be done before we declare the Release. Any help and contributions are welcome! &lt;br /&gt;&lt;b&gt;For a while, I will NOT be working on any of these items, or in this area&lt;/b&gt; - so feel free to pick any item and start hacking. I will be finishing Interpreter.&lt;br /&gt;If you see something you would like to work on, make sure you are in contact with other people who may be working on the same item. Once you selected the project, find an existing discussion related to it. Either follow the link to discussion thread in the project item (if it is enabled), or search Discussions page for a thread about this item. If there&amp;#39;s no existing thread, then start a new one - set the title to match the item title. Post a message to this &lt;a href="http://irony.codeplex.com/discussions/264535" class="externalLink"&gt;discussion thread&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; announcing your intent to work on some item, with a link to item&amp;#39;s discussion.&lt;br /&gt;I will update the link to discussion thread on this page.&lt;br /&gt;&lt;br /&gt;
&lt;h2&gt;Scanning and Terminals&lt;/h2&gt; &lt;b&gt;P1: Create LineContinuationTerminal&lt;/b&gt;  (Discussion thread)&lt;br /&gt;A terminal class to handle continuation symbols like &amp;quot;_&amp;quot; in VB, use it in GWBasic. &lt;br /&gt;Note: MiniPython grammar in Samples uses CodeOutlineFilter that handles continuation symbol &amp;quot;\&amp;quot;. But for simpler case like GwBasic it seems overcomplicated, better have a simple terminal just for this.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P2: Handling embedded documentation (Xml comments)&lt;/b&gt;  (Discussion thread)&lt;br /&gt;A terminal to handle Xml comments or other types of embedded documentation (&amp;quot;=begin/=end&amp;quot; in Ruby, DocLines in Python). The terminal (TokenFilter?) should assemble documentation block from multiple lines and put it into ParseTreeNode.Documentation field (to be added) of the subsequent parse tree node.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P3: Implement IncludeText support&lt;/b&gt;  (Discussion thread)&lt;br /&gt;Facility to handle &amp;quot;include&amp;quot; statement, when you include text directly into the source (not reference external module). See discussion http://irony.codeplex.com/Thread/View.aspx?ThreadId=204640&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P4: Fancy string types&lt;/b&gt;  (Discussion thread)&lt;br /&gt;Either extend StringLiteral, or create a new terminal to handle the following:
&lt;ol&gt;&lt;li&gt;Lua: [[ ... ]] string type; note: fist newline is ignored. Also the start end pair might be with &amp;quot;=&amp;quot; added:   [===[ .... ]===] ; same for comment  --[[ ... ]] &lt;/li&gt;
&lt;li&gt;Ruby:  &amp;#39;%&amp;#39; notation (&lt;a href="http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals" class="externalLink"&gt;http://en.wikibooks.org/wiki/Ruby_Programming/Syntax/Literals&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;)&lt;/li&gt;&lt;/ol&gt;
&lt;pre&gt;
       myString = %&amp;amp;This is my String&amp;amp;
	%Q/This is the same as a double-quoted string./    # &amp;#39;%Q&amp;#39; is treated as double-quoted string  &lt;/pre&gt;&lt;br /&gt;Interesting case is &amp;#39;%w&amp;#39;: %w(foo bar baz) is equivalent to  [&amp;#39;foo&amp;#39;, &amp;#39;bar&amp;#39;, &amp;#39;baz&amp;#39;]  - maybe a separate terminal for handling this?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P5: Handling implied &amp;quot;+&amp;quot; between string literals.&lt;/b&gt;   (Discussion thread)&lt;br /&gt;Ruby allows missing &amp;quot;+&amp;quot; operator in concatenating strings:&lt;br /&gt;&lt;pre&gt;
		myString = &amp;quot;Welcome &amp;quot; &amp;quot;to &amp;quot; &amp;quot;Ruby!&amp;quot;
		=&amp;gt; &amp;quot;Welcome to Ruby!&amp;quot; &lt;/pre&gt;&lt;br /&gt;Add support for this to StringLiteral - new option flag; if it is set, the matching code tries to search beyond the ending quote and checks if it is followed by other literal; if yes - the string is joined in one token.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P6: Implement HereDoc terminal (Ruby)&lt;/b&gt; (Discussion thread)&lt;br /&gt;Implement a terminal class to handle embedded text like HereDoc in Ruby (similar things in other languages?).&lt;br /&gt;Ruby HereDoc element is treated as double-quoted string; &amp;#39;&amp;lt;&amp;lt;-&amp;#39; allows indenting ending tag; &amp;#39;&amp;lt;&amp;lt;&amp;#39; does not; &lt;br /&gt;Note that Ruby allows starting multiple HereDocs on a single line&lt;br /&gt;&lt;pre&gt;
		puts &amp;lt;&amp;lt;BEGIN + &amp;quot;&amp;lt;--- middle ---&amp;gt;\n&amp;quot; + &amp;lt;&amp;lt;END
		This is the beginning:
		BEGIN
		And now it is over!
		END
		
		# this equals this expression:
		puts &amp;quot;This is the beginning:\n&amp;lt;--- middle ---&amp;gt;\nAnd now it is over!&amp;quot;
&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P7: Create reduced Ruby grammar&lt;/b&gt;  (Discussion thread)&lt;br /&gt;To test all these fancy terminals mentioned in previous sections (Ruby variations) - would be nice to have some reduced version of Ruby grammar - call it MiniRuby?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P8: Add RegEx validation pattern to Identifier terminal; support for specific values&lt;/b&gt; (Discussion thread)&lt;br /&gt;Some languages have certain rules about identifiers; for ex, &amp;#39;Oneletter+OneDigit&amp;#39; in GwBasic. Add a property to IdentifierTerminal, Regex expression, to validate the identifier. &lt;br /&gt;On a similar theme: Scheme has a notion of &amp;quot;Peculiar identifier&amp;quot; in its syntax definition - identifier with a fixed list of values:&lt;br /&gt; Peculiar identifier = +|-|... &lt;br /&gt;See how this can be supported. Maybe Regex pattern listing all variations?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P9: Support for nested comments&lt;/b&gt; (Discussion thread)&lt;br /&gt;Examples:  {- and -} in Haskell, similar thing in Scheme with &amp;quot;&amp;#39;(...)&amp;quot; - commenting out blocks of code with nested parenthesis.&lt;br /&gt;Add support for this to CommentTerminal.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P10: Support for &amp;quot;special&amp;quot; treatment of the first line in code file&lt;/b&gt; (Discussion thread)&lt;br /&gt; Lua- first line in file ignored if it starts with #; similar in CSV files - the first line has field names&lt;br /&gt;One way to implement: add a LanguageFlag, and if it is set, Scanner calls some special overridable method in Grammar: HandleFirstLine(....)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P11: Implement BackgroundTextTerminal&lt;/b&gt;   (Discussion thread)&lt;br /&gt;A special terminal for grabbing everything that does not fall into other terminals. Will be used in Wiki and template parsers. &lt;br /&gt;Let&amp;#39;s look at Wiki terminals as an example. It has a bunch of terminals with certain start symbols, like &amp;quot;*&amp;quot; for bold, etc.&lt;br /&gt;Scanner select a terminal based on current input symbol, trying to match it to one of First symbols of registered terminals. If it fails to match to any, it should call Background terminal (this can be done probably by making it a &amp;quot;fallback&amp;quot; terminal - the one that does not declare any test symbols). Now the interesting stuff. The background terminal should &amp;quot;eat&amp;quot; the text until it hits any of the &amp;quot;First&amp;quot; symbols of other terminals.  At this point it stops, produces token and yields control to Scanner - which will try to select a terminal again. &lt;br /&gt;To be able to do this (stop at other&amp;#39;s firsts), the background terminal must be able to &amp;quot;spy&amp;quot; on other terminals and grab all their &amp;quot;first&amp;quot; symbols at initialization. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;P12: Terminal for handling inlined Xml&lt;/b&gt; (Discussion thread)&lt;br /&gt;A terminal to scan inlined Xml (Scala). &lt;br /&gt;
&lt;h2&gt;Miscellaneous projects (more challenging and requiring more effort)&lt;/h2&gt;&lt;b&gt;P21: Implement fast compiled delegate to create AST nodes&lt;/b&gt; (Discussion thread)&lt;br /&gt;AstNodes are created by Parser using reflection, which is slow. Implement creating dynamic compiled delegates calling AST node constructors. For an example, see Vita project, EntityClassBuilder class, method InstanceCreatorMethod - creates compiled method to create entity instances. Plan: NonTerminal should have a property Creator - pointer to delegate creating the Ast instance. If it is null (default), then the method is built by ParserDataBuilder. Then this method is used by Parser for creating node instances. Place all static creator methods in one static class generated at runtime. &lt;br /&gt;Note that there is already a method pointer for custom AST node creation. This new one is an addition, for the case when grammar provides AstNode type only.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P22: Switch to .NET big int, complex, rational in VS2010&lt;/b&gt;  (Discussion thread)&lt;br /&gt;BigInteger, Complex are supported in .NET 4.0. Implementation of ration numbers (BigRational) is available here: &lt;a href="http://bcl.codeplex.com" class="externalLink"&gt;http://bcl.codeplex.com&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;. &lt;br /&gt;A good place to test is Scheme grammar - Scheme supports all these data types.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P23: Console window for Grammar Explorer&lt;/b&gt;  (Discussion thread)&lt;br /&gt;Create and integrate Console control in Grammar Explorer, to show interactive console directly inside in the form, instead of read-only Runtime Output window.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P24: Pretty print facility&lt;/b&gt; (Discussion thread)&lt;br /&gt;Implement &amp;quot;pretty printer&amp;quot; - some way to output parse tree in a nice formatted form. The formatting options should be provided through some setup class (like indentation, etc)&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P25: Specifying custom infix operator precedence and associativity on per-file basis.&lt;/b&gt;  (Discussion thread)&lt;br /&gt;Haskell allows this: infix, infixl, infixr methods in Haskell.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P26: Finish LINQ syntax implementation in c# grammar.&lt;/b&gt;  (Discussion thread)&lt;br /&gt;This is mostly to explore additional twist - scoped reserved words. &lt;br /&gt;Extract from c# language spec, section 7.16.1:&lt;br /&gt;&lt;br /&gt;  &lt;i&gt;Query expressions contain a number of “contextual keywords”, i.e., identifiers that have special meaning in a given context. Specifically these are from, where, join, on, equals, into, let, orderby, ascending, descending, select, group and by. In order to avoid ambiguities in query expressions caused by mixed use of these identifiers as keywords or simple names, these identifiers are considered keywords when occurring anywhere within a query expression.&lt;/i&gt;&lt;br /&gt;  &lt;i&gt;For this purpose, a query expression is any expression that starts with “from identifier” followed by any token except “;”, “=” or “,”.&lt;/i&gt;&lt;br /&gt;&lt;br /&gt;This introduces a concept of &amp;quot;scoped&amp;quot; reserved words: some keywords are reserved words (in Irony&amp;#39;s meaning) only inside some scope/statement. Suggestions on implementation?&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P27: Refactor/rebuild unit tests projects.&lt;/b&gt;  (Discussion thread)&lt;br /&gt;This is a big one. The current state is a shameful mess. Existing unit tests make quick shortcuts to instantiate terminals and call TryParse directly. &lt;br /&gt;We need to implement more complete tests, with test grammars, systematically covering all aspects of functionality.&lt;br /&gt;
&lt;h2&gt;Advanced Research Projects&lt;/h2&gt;&lt;b&gt;P31: Survey popular languages&lt;/b&gt;&lt;br /&gt;Survey modern languages and identify which facilities are missing in Irony to build parsers for these languages (mainly terminals). Suggested languages to look at: Scheme, Python, Ruby, GwBasic, Lua, Tcl, JavaScript, Clojure, Scala, Boo,Haskell, Erlang, Groovy, Smalltalk, PHP, Go (new Google language). &lt;br /&gt;All these are modern and popular languages - but why not include older ones - like Cobol? Even if we never write Cobol compiler, somebody may need to write colorizer for Cobol editor.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;&lt;del&gt;P32: Token Preview -based Semi-Automatic Conflict Resolution.&lt;/del&gt;&lt;/b&gt; (DONE)&lt;br /&gt;This topic deserves its own page: &lt;a href="http://irony.codeplex.com/wikipage?title=Contrib_ConflictResolution&amp;referringTitle=ContribProjects"&gt;Automatic Conflict Resolution&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P33: Macro facilities&lt;/b&gt;&lt;br /&gt;See how to implement macro facilities, starting from plain c macros up to advanced stuff like Scheme Macro system.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P34: Template processor&lt;/b&gt;&lt;br /&gt;Parser for template files, which include &amp;quot;text&amp;quot; and embedded script commands (Ruby rhtml format as an example).&lt;br /&gt;Things to consider - embedded grammars or sub-grammars, a separate grammar attached to some terminal that will be used to parse sub-sections of the text.&lt;br /&gt;&lt;br /&gt;&lt;b&gt;P35: Basic code analysis algorithms&lt;/b&gt;&lt;br /&gt;Implement some basic code analysis - &amp;quot;Lattices&amp;quot; and all that stuff. Maybe not for this release, but more long-term. The goal is to implement algorithms for detecting loops, uninitialized variables, unused code, etc. The most approachable introduction to the subject I found in &amp;quot;Advanced Compiler Design Implementation&amp;quot; by Steven Muchnick.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt; &lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Tue, 02 Aug 2011 21:25:39 GMT</pubDate><guid isPermaLink="false">Updated Wiki: ContribProjects 20110802092539P</guid></item><item><title>Updated Wiki: Contrib_ConflictResolution</title><link>http://irony.codeplex.com/wikipage?title=Contrib_ConflictResolution&amp;version=15</link><description>&lt;div class="wikidoc"&gt;&lt;h2&gt;Token Preview -based Semi-Automatic Conflict Resolution&lt;/h2&gt;(first version completed, see here: &lt;a href="http://irony.codeplex.com/discussions/267217" class="externalLink"&gt;http://irony.codeplex.com/discussions/267217&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;)&lt;br /&gt;&lt;br /&gt;Suggested research/implementation project.&lt;br /&gt;&lt;br /&gt;There is one very common type of reduce/reduce conflict that comes up in languages like c# and java. &lt;br /&gt;I&amp;#39;ll show it using a simple language as an example. The language recognizes a list of declarations, for ex:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;readonly&lt;/span&gt; &lt;span style="color:Blue;"&gt;string&lt;/span&gt; SomeField;
    &lt;span style="color:Blue;"&gt;private&lt;/span&gt; &lt;span style="color:Blue;"&gt;int&lt;/span&gt; SomeProp {}; 
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;object&lt;/span&gt; SomeMethod(){};
&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;Here is an Irony grammar for this language:&lt;br /&gt;&lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
  &lt;span style="color:Blue;"&gt;public&lt;/span&gt; &lt;span style="color:Blue;"&gt;class&lt;/span&gt; ConflictResolutionTestGrammar : Grammar {
    &lt;span style="color:Blue;"&gt;public&lt;/span&gt; ConflictResolutionTestGrammar() : &lt;span style="color:Blue;"&gt;base&lt;/span&gt;(&lt;span style="color:Blue;"&gt;true&lt;/span&gt;) {
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; name = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; IdentifierTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;id&amp;quot;&lt;/span&gt;);

      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; stmt = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;Statement&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; stmtList = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;StatementList&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; fieldModifier = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;fieldModifier&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; propModifier = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;propModifier&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; methodModifier = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;methodModifier&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; fieldModifierList = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;fieldModifierList&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; propModifierList = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;propModifierList&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; methodModifierList = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;methodModifierList&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; fieldDef = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;fieldDef&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; propDef = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;propDef&amp;quot;&lt;/span&gt;);
      &lt;span style="color:Blue;"&gt;var&lt;/span&gt; methodDef = &lt;span style="color:Blue;"&gt;new&lt;/span&gt; NonTerminal(&lt;span style="color:#A31515;"&gt;&amp;quot;methodDef&amp;quot;&lt;/span&gt;);

      &lt;span style="color:Green;"&gt;//Rules&lt;/span&gt;
      &lt;span style="color:Blue;"&gt;this&lt;/span&gt;.Root = stmtList;
      stmtList.Rule = MakePlusRule(stmtList, stmt);
      stmt.Rule = fieldDef | propDef | methodDef;
      fieldDef.Rule = fieldModifierList + name + name + &lt;span style="color:#A31515;"&gt;&amp;quot;;&amp;quot;&lt;/span&gt;;
      propDef.Rule = propModifierList + name + name + &lt;span style="color:#A31515;"&gt;&amp;quot;{&amp;quot;&lt;/span&gt; + &lt;span style="color:#A31515;"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;;
      methodDef.Rule = methodModifierList + name + name + &lt;span style="color:#A31515;"&gt;&amp;quot;(&amp;quot;&lt;/span&gt; + &lt;span style="color:#A31515;"&gt;&amp;quot;)&amp;quot;&lt;/span&gt; + &lt;span style="color:#A31515;"&gt;&amp;quot;{&amp;quot;&lt;/span&gt; + &lt;span style="color:#A31515;"&gt;&amp;quot;}&amp;quot;&lt;/span&gt;;
      fieldModifierList.Rule = MakeStarRule(fieldModifierList, fieldModifier);
      propModifierList.Rule = MakeStarRule(propModifierList, propModifier);
      methodModifierList.Rule = MakeStarRule(methodModifierList, methodModifier);
      
      &lt;span style="color:Green;"&gt;// That&amp;#39;s the key of the problem: 3 modifiers have common members&lt;/span&gt;
      &lt;span style="color:Green;"&gt;//   so parser automaton has hard time deciding which modifiers list to produce - &lt;/span&gt;
      &lt;span style="color:Green;"&gt;//   is it a field, prop or method we are beginning to parse?&lt;/span&gt;
      fieldModifier.Rule = ToTerm(&lt;span style="color:#A31515;"&gt;&amp;quot;public&amp;quot;&lt;/span&gt;) | &lt;span style="color:#A31515;"&gt;&amp;quot;private&amp;quot;&lt;/span&gt; | &lt;span style="color:#A31515;"&gt;&amp;quot;readonly&amp;quot;&lt;/span&gt; | &lt;span style="color:#A31515;"&gt;&amp;quot;volatile&amp;quot;&lt;/span&gt;;
      propModifier.Rule = ToTerm(&lt;span style="color:#A31515;"&gt;&amp;quot;public&amp;quot;&lt;/span&gt;) | &lt;span style="color:#A31515;"&gt;&amp;quot;private&amp;quot;&lt;/span&gt; | &lt;span style="color:#A31515;"&gt;&amp;quot;readonly&amp;quot;&lt;/span&gt; | &lt;span style="color:#A31515;"&gt;&amp;quot;override&amp;quot;&lt;/span&gt;;
      methodModifier.Rule = ToTerm(&lt;span style="color:#A31515;"&gt;&amp;quot;public&amp;quot;&lt;/span&gt;) | &lt;span style="color:#A31515;"&gt;&amp;quot;private&amp;quot;&lt;/span&gt; | &lt;span style="color:#A31515;"&gt;&amp;quot;override&amp;quot;&lt;/span&gt;;

      MarkReservedWords(&lt;span style="color:#A31515;"&gt;&amp;quot;public&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;private&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;readonly&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;volatile&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;override&amp;quot;&lt;/span&gt;);   
    } 
&lt;/pre&gt;&lt;/div&gt;   &lt;br /&gt;Each statement type is defined the same way: modifiers list followed by typename, name, finally ending with either &amp;quot;;&amp;quot;, &amp;quot;{}&amp;quot;, or &amp;quot;(){}&amp;quot;.  The trouble is that modifiers are different for each statement type - share some keywords, but each is different. Naturally, we define different -List and -Modifier non-terminals for modifiers. And here comes the conflict: when parser sees the first word of a statement, like &amp;quot;public&amp;quot;, it cannot know which modifierList it belongs to, and which non-terminal to reduce, out of 3.   &lt;br /&gt;Here&amp;#39;s grammar error in S0, the same is in S1:&lt;br /&gt;    &lt;i&gt;Reduce-reduce conflict. State S0, lookaheads: id public private readonly override. Selected reduce on first production in conflict set.&lt;/i&gt;&lt;br /&gt;  &lt;br /&gt;Here are reeduce items in state S0 that are in conflict:&lt;br /&gt;&lt;pre&gt;
    fieldModifierList -&amp;gt; &amp;#183; [id public private readonly volatile]
    propModifierList -&amp;gt; &amp;#183; [id public private readonly override]
    methodModifierList -&amp;gt; &amp;#183; [id public private override]
&lt;/pre&gt;   &lt;br /&gt;The idea for the fix is simple: make Parser run ahead and check the first token it finds out of the set [ ; ( { ]. If it finds &amp;quot;;&amp;quot; first out of 3, it is field definition, if  {  then it is property, and so on. &lt;br /&gt;We need a way to provide parser with these hints, and let parser builder know that we&amp;#39;re OK, the conflict is resolved. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;(important: the implementation section was edited on 07/20/2011)&lt;/b&gt;&lt;br /&gt;Implementation suggestion: implement a grammar hint TokenPreviewHint, with two parameters:
&lt;ul&gt;&lt;li&gt;ComesFirst - a symbol to find first;&lt;/li&gt;
&lt;li&gt;BeforeSymbols - before these symbols; we can use either array (params array) or space-delimited list in a single string.&lt;/li&gt;&lt;/ul&gt;
When this hint is used in production in Shift position (not at the end), it is &amp;quot;shift-if&amp;quot; hint; correspondingly, when the hint is at the end of production, it is &amp;quot;reduce-if&amp;quot; instruction. &lt;br /&gt;Two helper methods can be added, that return this hint: 
&lt;ul&gt;&lt;li&gt;ShiftIf(comesFirst, beforeSymbols);   - to use in shift position.&lt;/li&gt;
&lt;li&gt;ReduceIf(comesFirst, beforeSymbols);  - to use in reduce position.&lt;/li&gt;&lt;/ul&gt;
Note that the example we just looked at (modifiers list) is in fact a special case. When we create lists using MakePlusRule or MakeStarRule, we do not form the productions explicitly, these methods do this for us. So for this case, we need some additional way to &amp;quot;inject&amp;quot; these hints. Probably, some helper method ReduceIf on non-terminal that adds this hint to all productions in a non-terminal:&lt;br /&gt;     &lt;br /&gt;&lt;div style="color:Black;background-color:White;"&gt;&lt;pre&gt;
     fieldModifierList.ReduceIf(&lt;span style="color:#A31515;"&gt;&amp;quot;;&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;; { (&amp;quot;&lt;/span&gt;); 
     propModifierList.ReduceIf(&lt;span style="color:#A31515;"&gt;&amp;quot;{&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;; { (&amp;quot;&lt;/span&gt;); 
     methodModifierList.ReduceIf(&lt;span style="color:#A31515;"&gt;&amp;quot;(&amp;quot;&lt;/span&gt;, &lt;span style="color:#A31515;"&gt;&amp;quot;; { (&amp;quot;&lt;/span&gt;); 
&lt;/pre&gt;&lt;/div&gt;The first parameter is a symbol to find first, out of symbols/terminals listed in the second parameter (as a space delimited string). Note that we need different ways to specify terminals - as string literals like shown above, or as references to terminal variables used in grammar definitions.&lt;br /&gt;Another thing - we may need to provide extra symbol(s) marking when to stop searching so that preview does not go too far - in case we are parsing source with errors. Example: user is typing text in editor, missed one symbol, while highlighter is parsing the text - we do not want parser to run too far. In our case, the termination symbols might be &amp;quot; or &amp;quot;)&amp;quot;; &lt;br /&gt;Implementing this behavior is step one - when user knows how to resolve the conflict, and he provides explicit instructions. More difficult is next step: actually verifying that with provided hints the conflict is gone for all cases. And finally, it would be nice to have automatic advice: when user runs into conflict like this the first time, Irony automatically discovers the way to resolve it using this technique, and give an advise to the user, including the symbols to use in resulution. &lt;br /&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Tue, 02 Aug 2011 21:24:07 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Contrib_ConflictResolution 20110802092407P</guid></item><item><title>Updated Wiki: Home</title><link>http://irony.codeplex.com/wikipage?version=76</link><description>&lt;div class="wikidoc"&gt;&lt;b&gt;Irony&lt;/b&gt; is a development kit for implementing languages on .NET platform. Unlike most existing yacc/lex-style solutions Irony does not employ any scanner or parser code generation from grammar specifications written in a specialized meta-language. In Irony the target language grammar is coded directly in c# using operator overloading to express grammar constructs. Irony&amp;#39;s scanner and parser modules use the grammar encoded as c# class to control the parsing process. See the &lt;a href="http://irony.codeplex.com/wikipage?title=expression%20grammar%20sample&amp;referringTitle=Home"&gt;expression grammar sample&lt;/a&gt; for an example of grammar definition in c# class, and using it in a working parser. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Initial Release&lt;/b&gt;&lt;br /&gt;The initial release contains implementation of compiler front-end modules - scanner and LALR(1) parser. We provide several test grammars and parser implementations based on them: a grammar for simple arithmetic expressions and simplified grammars for c#, Scheme, SQL, GwBasic, JSON and others. &lt;br /&gt;Sample expression grammar allows evaluation of arithmetic expressions using Irony&amp;#39;s built-in AST interpreter.&lt;br /&gt;&lt;br /&gt;&lt;img src="http://i3.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=irony&amp;DownloadId=126418" alt="irony_GrammarExplorer.jpg" title="irony_GrammarExplorer.jpg" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;System Requirements&lt;/b&gt;&lt;br /&gt;Windows 7, .NET Framework 4.0, Visual Studio 2010&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Project News&lt;/b&gt;
&lt;ul&gt;&lt;li&gt;&lt;a href="http://www.codeproject.com/KB/recipes/YourFirstDSL.aspx" class="externalLink"&gt;Writing your first Domain-Specific Language&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - two articles by Daniel Flower at CodeProject.com. An excellent introduction to using Irony for parsing &amp;quot;little&amp;quot; application-specific languages - DSLs. &lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.sqlservercentral.com/articles/Full-Text+Search+(2008)/64248/" class="externalLink"&gt;A Google-like Full Text Search&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; - an article by Michael Coles about Google-to-SQL Server full-text search query converter based on Irony. &lt;/li&gt;
&lt;li&gt;02/10/2009 - new article on CodeProject: &lt;a href="http://www.codeproject.com/KB/recipes/VSLanguageService.aspx" class="externalLink"&gt;Writing your first Visual Studio Language Service&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; by Ben Morrison about using Irony for language integration into Visual Studio.&lt;/li&gt;
&lt;li&gt;April 20, 2009 - Recordings of presentations at &lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;2009 Lang.NET symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; are available online. I&amp;#39;ve made a couple of presentations there, the first one about Irony. Watch it, come back with comments. Watch other recordings - very interesting stuff!   &lt;/li&gt;
&lt;li&gt;May 2, 2009. Started a &lt;b&gt;blog about Irony: &lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;http://irony-roman.blogspot.com/&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/b&gt;. The first post is about changes in April code update. Enjoy it!&lt;/li&gt;
&lt;li&gt;Oct 12, 2009. Updated the release download version&lt;/li&gt;
&lt;li&gt;June 6, 2010. A wikibook for documenting Irony : &lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt; (http://en.wikibooks.org/wiki/Irony&lt;i&gt;-&lt;/i&gt;Language&lt;i&gt;Implementation&lt;/i&gt;Kit). Everybody is welcome to contribute!&lt;/li&gt;
&lt;li&gt;Oct 25 2010. &lt;b&gt;Irony is on hold.&lt;/b&gt; More details &lt;a href="http://irony.codeplex.com/Thread/View.aspx?ThreadId=230812" class="externalLink"&gt;here&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;.&lt;/li&gt;&lt;/ul&gt;
&lt;br /&gt;&lt;br /&gt;&lt;b&gt;More information&lt;/b&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Contributors&amp;referringTitle=Home"&gt;Contributors&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=ContribProjects&amp;referringTitle=Home"&gt;Willing to Contribute&amp;#63;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Demo%20Running%20Instructions&amp;referringTitle=Home"&gt;Demo Running Instructions&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony.codeplex.com/wikipage?title=Expression%20Grammar%20sample&amp;referringTitle=Home"&gt;Expression Grammar sample&lt;/a&gt;&lt;br /&gt;&lt;a href="http://langnetsymposium.com/" class="externalLink"&gt;Irony presentation at LangNET 2009 symposium&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://irony-roman.blogspot.com/" class="externalLink"&gt;Irony blog&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://en.wikibooks.org/wiki/Irony_-_Language_Implementation_Kit" class="externalLink"&gt;Wikibook: Irony - Language Implementation Kit&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://vita.codeplex.com" class="externalLink"&gt;My other project: VITA - ORM done right&lt;span class="externalLinkIcon"&gt;&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="ClearBoth"&gt;&lt;/div&gt;</description><author>rivantsov</author><pubDate>Mon, 01 Aug 2011 03:22:42 GMT</pubDate><guid isPermaLink="false">Updated Wiki: Home 20110801032242A</guid></item></channel></rss>