Project Description
Yalgol compiler for the .NET platform

Additional Information
Yalgol language consists of two parts: mixed object-oriented imperative language (based on Yalgol/02 syntax) and meta-language extension. The goal is to create a language that is able to extend itself with a new constructs such as statements, expressions, etc, as well as to create completely new languages. Object-oriented approach to the language definition was described in two articles published in 2003 (see references section below). In short, one should be able to extend the language by creating a subclass of Yalgol grammar and re-writing certain productions such as Expression or Statement providing rules to generate syntax tree (AST) for the new costructs. The generated AST is then translated to executable code as usual. Using the same approach one could write a grammar for some completely different language that is compiled like ordinal Yalgol program. In Yalgol it is possible to create reusable grammar library (as opposed to reusable class libraries in modern object-oriented languages) as well as handle projects written in several programming languages.

Project history
This is a reincarnation for my Yalgol/02 project started back in 2002 as a semantic base for an extensible object-oriented meta-language, planned as my PhD thesis. Sadly enough, I didn't known anything about old meta-language experiments like Imp (1965-1969) and Lithe (1982). My project constisted of a bootstrapping compiler for Win32 platform with a couple of articles in Russian (published in 2003). I decided to quit my PhD project when I moved to Moscow and found a good job. Yalgol/02 project was frozen in 2004 due to lack of spare time.

Yalgol.NET Features
  • TODO

Yalgol/02 features
  • imperative statically-typed object-oriented programming language
  • clean minimalistic syntax
  • bootstrapping compiler (written in Yalgol/02 and x86 assembly)
  • compiles to x86 assembly for Win32 and DOS/32rtm platforms (Borland Turbo Assembler syntax)
  • smart linking technology support (unused routines are stripped out from the output binary)

Code Sample
class Hello = (
  public (
    proc Main =
      Puts("Hello, World!")


Last edited Feb 18, 2009 at 11:36 PM by yallie, version 33