Update

The simple title of this blog entry indicates that nothing much has happened in the last few months. Well, at least not much I thought was worth telling you.

I finished an alpha version of my build system as a proof of the feasibility to inject script like C# code in the .NET framework (see my blog entry C# Script).

After that I started a new properties core framework (the basic ideas are discussed in my previous blog entry MVC at the property granularity).

After two rewrites, I got the basic updating mechanisms working and the C# integration was not looking bad. It made sense to create some more test cases and I ended up designing a complete Tao and OpenGL based application framework in .NET.

Well, progress is slower as projects get bigger. After porting my math library from the previous 3D engine, I managed to implement half of a scene graph and a simple rendering engine. All in all it is working perfectly. The updating mechanism is completely hidden and the computations are incremental and only invoked when required. I even managed to implement incremental sets and maps. Well, incremental ordered lists seem to be much more difficult because iterator logic is required … and sorting will surely burn my brain, but I will try as soon the requirements are popping up.

And for fun I tried to create a generic LR top down parser, of which my first attempt sadly failed, nevertheless I created a nice syntax for specifying BNF grammars. My intention was to implement a Lexer for JavaScript.

Here is an example fragment that shows how C# may get close to the JavaScript specification with a little operator overloading

(from ECMA-262 7.4 Comments):

        Comment.Rule
            = MultiLineComment
            | SingleLineComment;
 
        MultiLineComment.Rule
            = "/*" + MultiLineCommentChars.opt + "<strong>/";
 
        MultiLineCommentChars.Rule
            = MultiLineNotAsteriskChar + MultiLineCommentChars.opt
            | '</strong>' + PostAsteriskCommentChars.opt;
 
        PostAsteriskCommentChars.Rule
            = MultiLineNotForwardSlashOrAsteriskChar + MultiLineCommentChars.opt
            | '<strong>' + PostAsteriskCommentChars.opt;
 
        MultiLineNotAsteriskChar.Rule
            = SourceCharacter.butNot('</strong>');
 
        MultiLineNotForwardSlashOrAsteriskChar.Rule
            = SourceCharacter.butNot((Rule)'/' | '*');
 
        SingleLineComment.Rule
            = "//" + SingleLineCommentChars.opt;
 
        SingleLineCommentChars.Rule
            = SingleLineCommentChar + SingleLineCommentChars.opt;
 
        SingleLineCommentChar.Rule
            = SourceCharacter.butNot(LineTerminator);

So, hopefully I can present some more finished work in one of my next posts. Writing framework components and parser algorithms is a wonderful work but very time consuming.

yours
Armin