Source texts of compilers
    Most stuff listed here is written by rare enthusiasts for educational purposes or even for amusement. Due to numerous causes (laziness or lack of spare time, possibly) most of these projects were abandoned half done or even at the very beginning. Thatís why many of them lack functionality and capabilities. Nevertheless, they are suitable as good examples for education.
    Apropos some particularities. The majority of developers had solved the output format problem enough easy; not wanting to deal with object and executable filesí specifications, they had changed the output to simple and plain assembler text listing. Due to that youíll need any other assembler and, possibly, a linker. To my mind itís the most suitable solution, cause one can do with this listing whatever he wants.
    Almost all archives contain the compiled executables (if the contrary is not affirmed).

    Basic (~17kb) QuickBasic to Nasm compatible compiler v1.13 (c) 2003 by Nicholas Dark
    A tiny toy-compiler from QuickBasic compatible language to Nasm opcodes. The capabilities are not impressive. An example program is applied. No .exe compiled.
    Source text: .bas (QuickBasic v7.1)
    Output laguage: .asm (16-bit => Nasm => .com, mz .exe)
    Home page: (~81kb) Basic compiler for MenuetOS (c) by Jarek Pelczar
    As you can judge by name, itís a Basic compiler. Actually, this one is included to distribution package of alternative 32-bit operating system named Menuet, but let it be here for safety. It produces 32-bit machine code for protected addressing mode (of Menuet, not Dos), but one can make even a .com executable. Also remark: while evaluating the mathematical expression this program emits greatly unoptimized asm instructions, identically to the ďstudentĒ compilers do (look below).
    Source text: .c (GNU C)
    Output language: .asm (32 bit => Nasm, Fasm => .bin, .com)
    Documentation: none, few comments in English (~797kb) The BASIC to 286 Assembly Language Translator v6.50 (c) 1998 by Kevin Diggins.
    Another ďBasicĒ clone. This zip is one of a multitude findable in Internet and is thought to be the last version. An IDE with the help files and an Arrowsoft assembler are added. Also one can find a bunch of examples. Just as Sphinx C--, Basm286 evaluates mathematical expressions left to right, regardless of operation precedence.
    Source text: .bas (Power Basic 3.2)
    Output language: .asm (16 bit => Arrowsoft asm => mz .exe, .com)
    Documentation: in English (~120kb) Blunt Axe Basic v1.052a (c) 2001-2004 by Sarbayo
    This is a QuickBasic/RapidQ subset. Yet Bxbasm can compile Win32 console-mode executables only. Note that Bxbasm in its assembler output uses many inner Masm32 macros such as invoke, .if-.else-.endif etc. The full package (with Masm32 Ė about 2.5Mb) can be downloaded from the home page.
    Source text: .c (Lcc-Win32)
    Output: .asm (32-bit => Masm32 => pe .exe)
    Home page:
    Documentation: in English (~410kb) GABasic v0.30 Beta 2(Public) (c) 2000 by Gabriel Fernandez
    This one was intended to be QuickBasic compatible but failed, there are no operation precedence! GaBasic generates 32-bit asm listing to be run under WDosX extender. Unfortunately, this projects is abandoned but it was a few steps to reach self-recompilation!
    Source text: .bas (QuickBasic v4.5 v7.1)
    Output language: .asm (32 bit => Nasm => WDosX .exe)
    Home page:
    Documentation: in English (~551kb) MoonRock Basic Compiler v0.50 (c) 1994-1998 by Rowan Crowe
    This was created as an alternative to QuickBasic. This compiler generates rather compact asm listing and, as a result, small executables. In opposite to other languages, expressions are evaluated left to right, regardless of operation precedence (as in Sphinx C--).
    Source text: .bas (QuickBasic v4.5 v7.1)
    Output language: .asm (16-bit => Tasm, Masm => mz .exe, .com)
    Home page:
    Documentation: in English (~138kb) Free QuickBasic compatible compiler (c) 1998 by Marcel Smolenaars
    Itís a very cute implementation of Basic-like compiler. The syntax is close to that of QuickBasic. Supported: subroutines/functions, local/global data, whole types (arrays partially), almost all program flow constructs. But it lacks standard libraries and such keywords as PRINT, DRAW canít be used. Though this compiler handles complex expressions like ďn=(x*(20-b/a)-function1(a*b,x*(z-y),b))Ē with all priorities and emits enough optimized code (without that spaghetti pushs and pops!) The output format is plain asm listing.
    Source text: .bas (MS QuickBasic PDS v7.1)
    Output Language: .asm (16-bit => Tasm, Masm => mz .exe)
    Home page:
    Documentation: comments in English (~60kb) SBasic 2.0 (C) 1989-91 DMV Widuch GmbH & Co.KG; Autor: Wolfgang Lorenz (ASCII-/LABEL-BASIC-Preprocessor: Peter Knappe)
    Have you ever seen a compiler written in GW-Basic? You think itís impossible? Turn on your imagination! Not working? Then take a look at this stuff and let it be your everlasting nightmare!.. This compiler accepts an input language similar to GW-Basic, moreover itís written in it itself! A little IDE is also included with its own sources (of course in GW-Basic).
    Source text: .bas (à la GW-Basic, compiles itself)
    Output format: mz .exe
    Documentation: none (~167kb) Steiniís Mini Compiler (c) 2002 by Sebastian Steinhauer
    Another toy-compiler for language very close to Pascal and Basic.
    Source text: .bas (PowerBasic)
    Output language: .asm (16-bit => Nasm => mz .exe)
    Documentation: comments in German and English (~440kb) UltraBasic v 0.31a (c) 2000 by Gabriel Fernandez, 2004 by Angelo Rosina
    The successor of GaBasic. It is compatible with QuickBasic as closely as itís possible in protected mode: all math expression are evaluated according to operation priorities. The support for Win32 console executables is added! (Probably the creation of windowed exeís is possible). The libraries are tuned greatly, the sources of them are included. As can be guessed, the new author is busy expanding the capabilities of the compiler, the latest news are posted on his homepage.
    Source text: .bas (QuickBasic v4.5 v7.1)
    Output language: .asm (32 bit => Nasm => WDosX .exe, pe .exe)
    Documentation: in English
    Home page:

    C (~206kb) BCC (Ů) 1992 by Bruce Evans
    Unfortunately, thereís no any complete documentation, so nothing can be said apropos. Itís clear only that it is a C-like compiler which can emit an asm listing for Motorola 6809 and Intel 8086/386 processors (16 and 32 bit). There are several examples attached. Youíll need also an assembler (~125kb) and a linker (~26kb) (the latter isnít compiled though). The full sources with MS-DOS binaries can be found on home page.
    Source text: .c (GNU C)
    Output language: .asm (16, 32-bit => AS=> mz, pe .exe)
    Documentation: comments in English
    Home page: (~310kb) B-flat "C" Compiler v0.50 (c) 1998, 2000 by Ken Martwick
    A C-like language called with the adequate shortness as ďBĒ. Possibly, due to the fact that itís only a subset of the previous. It can emit 32-bit code for WDosX extender though.
    Source text: .c (GNU C)
    Output language: .asm (32-bit =>Nasm, Fasm => WDosX .exe)
    Documentation: in English (~249kb) C to ASM Compiler (c) 2003 by Muhammad Owais Khan Afridi
    Minimalistic C-like compiler created by some Pakistani student as his project on a compiler construction course. The outputted code is non optimized greatly. Some examples and a detailed description of intrinsic routines are included. One remark: use MSVC++ 6.0 only to recompile (since Watcom and Mingw did not succeed).
    Source text: .cpp (MS Visual C++ 6.0 only)
    Output language: .asm (16-bit => Tasm, Masm => mz .exe)
    Documentation: in English (~149kb) 68000 and i386 C Compiler v3.1 (c) by Christoph van Wuellen
    As the name say, this compiler produces asm listings for Motorola 68000 and Intel 386 (32-bit code) processors. No compiled .exe. It seems that this stuff is written for SunOS. But Iím not completely sure. If someone figure out, let me know!
    Source text: .c (ANSI C)
    Output language: .asm (GNU GAS assembler) ???
    Documentation: in English (~71kb) Draak the 16-bit multi-language compiler (c) 2000 by Jon Gentle
    Itís a multi-language compiler, the input language and code generation of which can be defined in external .def scripts. The given version is tuned to compile C-like language. The capabilities are not wide though. This project has been revived on The last version 0.82 is pretty more handy, the full description is lacking though.
    Source text: .pas (Free Pascal)
    Output Language: .asm (16-bit => Nasm => mz .exe)
    Documentation: in English
    Home page: (~1.35Mb) LCC Compiler v3.5 (c) 1991-1995 by AT&T, Christopher W. Fraser and David R. Hanson
    It is an ANSI C compiler, described in ďA Retargetable C Compiler: Design and ImplementationĒ (Benjamin/Cummings, 1995, ISBN 0-8053-1670-1). Itís intended to run under Unix or Win32 and can generate an asm listing for MIPS, SPARC and Intel 386 (AT&T or Intel syntax).
    Source text: .c (GNU C, Borland C)
    Output language: .asm (32-bit => Masm => ??? .exe)
    Documentation: in English (~74kb) Byte Small C V1.0 (c) 1986 by Rick Grehan
    An integer C subset.
    Source text: .c (ANSI C) compiles itself?...
    Output language: .asm (16 bit => Tasm => .com)
    Documentation: in English (~86kb) Scc c Compiler v1.0 beta (c) 2001 Rodney McConnell
    A little experimental compiler though undone. The outputted asm text is for Sasm which could be taken from the authorís page.
    Source text: .c (GNU C)
    Output language: .asm (32-bit => Sasm => DJGPP .exe)
    Home page:
    Documentation: in English (~345kb) SDL Compiler v3.1 (c) 2000 by Artyom Samoylenko
    Itís a C clone. Uses the part of Borland C libraries.
    Source text: .cpp (Borland C++)
    Output language: .asm (16-bit => Tasm => mz .exe)
    Documentation: in Russian (~51kb) Simple Little Compiler v0.04 (c) 1999-2000 by Rowan Crowe
    The cross between C and Basic. In opposite of the previous work of this author, this one tries to evaluate expression mathematically. Not so fine as could be.
    Source text: .moo (MoonRock Basic Compiler, look above)
    Output language: .asm (16 bit => Tasm, Masm => .com)
    Home page:
    Documentation: in English (~133kb) Small C Compiler v2.2 (c) 1989 by James Hendrix
    Another cute and tiny C compiler.
    Source text: .c (compiles itself!)
    Output language: .asm (16 bit => Tasm, Masm => .com, mz .exe)
    Documentation: in English

    C-- (~82kb) Sphinx C-- Clone for Win32 (c) 2000 by A. Halimovsky
    Source text: .c-- (Sphinx Cóv0.238)
    Output format: pe .exe
    Documentation: in Russian (~655kb) Sphinx C-- v2.0 (c) 1994, 1995 by Peter Cellik
    When Peter Cellik had retired, heíd presented to public the sources of his unforgettable creation Ė Sphinx C--. This is the version 2.0, the last, as Peter (and many of us) thought. Yeah, piece of cake. This project was resurrected by Michael Shecker (donít let this name confuse you, heís Russian!) Wanna see how far heíd pulled it? Take this outdated stuff then go there: and compare. The compiler is written in C, for successful recompilation youíll need Microsoft C v6.0. The sources of the Workbench are also included (.pas for Borland Pascal). For those who doesnít know one particularity, I remind: Sphinx evaluates all expressions left to right, regardless of operation precedence.
    Source text: .c (Microsoft C 6.0)
    Output format: .com, .obj
    Documentation: in English

    Context (~82kb) Context v1.0 (c) 1995-2002 by Andrey Khokhlov
    The compiler as it was thought to be in Wirth times Ė tiny, clear, able to compile itself. Pity that the worshippers of this idea are almost gone... The Context programming language looks quite like Modula with some C elements. A little assembler (written in Context) is included. The emitted code is not optimized but so did the early versions of Turbo Pascal! The newer version with some samples: (~57kb)
    Source text: .ctx (compiles itself!)
    Output language: .asm (16 bit => asm8086 => .com)
    Home page:
    Documentation: in Russian (~54.7kb) Context for Windows v2.0 (c) 1995-2003 by Andrey Khokhlov
    The version of Context rewritten from scratch for Win32 platform. The method of compilation used here is different from those of its Dos predecessor.
    Source text: .ctx (compiles itself)
    Output language: .asm (32 bit => Tasm => pe .exe)
    Home page:
    Documentation: none, few comments in Russian

    Pascal (~184kb) Cabezon Pascal Compiler v0.08 (C) 1990, 1993 Hiroshi Tokumaru / Ockeghem
    This archive was downloaded from some Japanese site via the French link. Cabezon must be quite compatible with Borland Pascal, as can be said while viewing the given examples. All the info is in Japanese and you wonít be even allowed to see the hieroglyphs, you shall see some two-byte stuff like Unicode :-) Librariesí sources are also included.
    Source text: .pas (Borland Pascal, possibly...)
    Output language: .asm (16 bit => Tasm, Masm => mz .exe)
    Home page:
    Documentation: in Japanese 8-/ (~27kb) Mini-Pascal 8086 primitive compiler (c) 1997 by Rolland Roessler
    A tiny Pascal-subset compiler. This one tries to optimize expressions but not very successful. Tuned a little by me to be compiled with Free Pascal. Doesnít have procedures/functions so itís not completely usable.
    Source text: .pas (Borland Pascal, Free Pascal).
    Output language: .asm (16 bit => Tasm, Masm => mz .exe, .com)
    Documentation: none, comments in German (~400kb) Inno Pascal v0.1.5 (c) 2000 by Jordan Russell
    Itís a Pascal compiler integrated with IDE and debugger. Generated executables (very small!) will need ipsupport.dll, which is included (but with no sources). The output code is not optimized though.
    Source text: .pas (Delphi)
    Output format: pe .exe
    Home page:
    Documentation: in English (~108kb) Milan Compiler (c) 2002 by Serghey Gotsulyak
    This tiny Pascal-like compiler is made as the university project on the course ďThe principles of compiler constructionĒ. An archive contains small IDE.
    Source text: .c (Borland C)
    Output format: .com
    Home page:
    Documentation: in Russian (~830kb) P32, 32bit Pascal Compiler v0.4d (c) 1996-1998 Johan Prins (~572kb) P32, 32bit Pascal Compiler v0.5beta2 (c) 1996-1999 Johan Prins
    Another try to write a 32-bit Pascal, greatly worthy of attention. Some of the advantages: support of floating-point math, compatibility with Borland Pascal both in syntax and runtime library, code optimization for Pentium processors, ability to create Dos32, Wdosx and Win32 executables. Disadvantage: this project was dropped for some reason a couple of years ago. An IDE, brief doc and some samples are included.
    Source text: .pas (Borland Pascal)
    Output language: .asm (32-bit => Nasm, Tasm, Pass32 => Dos32 .exe, Wdosx .exe, pe .exe)
    Documentation: in English (~44kb) Power Pascal v0.002 (c) 1993 by Mike Warot
    Itís a very old OS2-oriented Pascal compiler.
    Source: .pas (Borland Pascal)
    Output: .asm (32-bit => Masm 6.0 + Link386 = > lx .exe)
    Documentation: comments in English (~359kb) PL/0 Compiler (c) 1998 by H. Weber
    Itís a language similar to Pascal. The compilation process is divided to several steps: scanner, parser to pseudo-code, asm generator.
    Source text: .c (Borland C 3.1 - 4.5, GNU C 2.7.1)
    Output language: .asm (16 bit => Tasm => mz .exe)
    Documentation: few comments in English (~303kb) S Compiler (c) by Henry Lesourd
    This compiler accepts mixed (Pascal-Basic) language but produces its own executables (the mixture of bytecode and i386 instructions). Nevertheless, itís able to create .com files.
    Source text: .pas (Borland Pascal)
    Output format: .pak, .com
    Documentation: few comments in English (~16kb) Pascal-clone based on PascalPro and P4
    Not compiled.
    Source text: .pas (Borland Pascal)
    Output language: .asm (Nasm???)
    Documentation: none (~193kb) Turbo Pascal v3.01A IDE + built-in compiler (c) 1983-1985 by Borland International
    In reality, itís a disassembled text stored in a very strange format. To gain its readable view just follow the instructions in ďreadmeĒ file. But beware, the resulting asm text wonít be compatible with modern assemblers! Use the ancient included to this archive to recompile successfully. The detailed description of compiler internals is included.
    Source text: .asm (AS)
    Output format: .com
    Documentation: in English (~290kb) Turbo Pascal v6.0 IDE + built-in compiler (c) 1993-1994 by Borland International
    I donít remember where Iíve got this stuff from, but these are the sources of Borland Pascal! Not all, actually, but IDE and built-in compiler only. For recompilation youíll need tpc.exe version six, all standard .tpu modules, tasm.exe (itís better not to take version 4.1, cause itís buggy!) and make.exe from the Tasm package.
    Source text: .pas, .asm
    Output format: mz .exe
    Documentation: none (~97kb) WinPascal 0.001b (c) 1999 by Colin Laplace
    Itís a very primitive compiler for Win32.
    Source: .pas (Borland Pascal)
    Output: .asm (32-bit => Pass32 => pe .exe)
    Documentation: comments in English

    "Student" compilers are grouped together, cause they have been created as a part of university studies and the aim of their authors was to pass the test successfully, but not to create an effective compiler. As a result, even an elementary optimization was thrown off. There can be exceptions though. Nearly all files listed below are taken from Almost all of these implement a Pascal-clone language. (~22kb) Language: Pascal clone
    Author: unknown
    Source text: .pas (Borland Pascal)
    Output format: .com
    Documentation: few comments in Russian (~103kb) Language: Pascal subset. As it was done according to lectures but not the rationality, the result is horrible. The optimization is far away.
    Authors: Alexey Popov, Maxim Lobenko, Inna Sedykh
    Source text: .pas (Borland Pascal)
    Output format: .com + detailed listing of algorithm
    Documentation: in Russian (54kb) Language: strange Pascal clone
    Author: unknown
    Source text: .pas (Borland Pascal)
    Output format: .com
    Documentation: few comments in Russian (~86kb) Language: Pascal subset
    Author: Serghey Rakhno
    Source text: .pas (Borland Pascal, Free Pascal)
    Output language: .asm (16 bit => Tasm => mz .exe)
    Documentation: few comments in Russian (~56kb) Language: Pascal clone
    Author: Igor Duyunov (read like this: ďeager do you knowĒ :-)
    Source text: .pas (Borland Pascal)
    Output format: .com
    Documentation: few comments in Russian (~62kb) Language: Pascal clone
    Author: Igor Semerenko
    Source text: .pas (Borland Pascal)
    Output format: mz .exe
    Documentation: in Russian (~22kb) Language: Pascal clone (updated version of Igor Duyunovís work)
    Author: unknown
    Source text: .pas (Borland Pascal)
    Output format: .com
    Documentation: few comments in Russian (~56kb) Language: russified clone of Pascal
    Author: unknown
    Source text: .pas (Borland Pascal)
    Output format: .com
    Documentation: in Russian (~90kb) Language: Pascal clone
    Author: Alexey Dribnokhod o Yevgheny Agheyev
    Source text:: .pas (Borland Pascal)
    Output format: .com
    Documentation: in Russian (280kb) Language: Pascal subset
    Author: Oleg Melnikov
    Source text: .pas (Borland Pascal)
    Output language: .asm (16-bit => Masm => mz .exe, .com)
    Documentation: in Russian (31kb) Language: ProLogic Local (resembles Pascal a little)
    Author: V. Y. Panirovsky
    Source text: .c (Borland C)
    Output format: .com
    Documentation: in Russian (~82kb) Language: resembles Pascal and Eiffel
    Author: Matvey Ralchik
    Source text: .pas (Borland Pascal)
    Output language: .asm (16-bit => Masm => mz .exe)
    Documentation: in Russian

    Other (~96kb) D2 Compiler (c) 2002 by Yevgheny Sazonov
    This language (resembling Pascal) is strange a little, cause the type of variables canít be defined!
    Source text: .pas (Borland Pascal)
    Output format: .com
    Home page:
    Documentation: in Russian (~560kb) T3X Procedural language (c) 1996-2000 by Nils M. Holm
    This language resembles Pascal and BCPL, but the variable type defining is off. (Forth?)
    Source text: .c (GNU C)
    Output format: mz .exe
    Home page:
    Documentation: in English
Hosted by uCoz