You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Bill b133373471
2 years ago
.gitattributes Changed git attributes. 6 years ago
.gitignore update 2 years ago
AwesomePascal.cpp update 2 years ago
AwesomePascal.vcxproj update 2 years ago
InsertionSort.pas update 2 years ago
LICENSE Create LICENSE 5 years ago
NumericExpr.pas update 2 years ago update 2 years ago


Another PL/0 language ( compiler and debugger that is written in C++.


This code came from my undergrad course project for compiler principles in 2015. The code quality is beyond horrible but it's some of my earliest big projects.


  • The compiler uses SLR(1) parsing. The grammar is hard-coded in the form of an LR parsing table (states) and the FOLLOW set (follows) which is initialized in initStates() function.
  • The compiler was written from the ground up without any third-party libraries except the standard C++ library.
  • It contains:
    • A lexer (GETSYM() function) that processes the input into tokens and literals while constructing a symbol table
    • A parser (BLOCK() function) that uses shift/reduce-parsing to generate the target code (pseudo-assembly)
    • An interpreter (INTERPRET() function) that executes the pseudo-assembly code.


Supported Environments:

  • MSVC project: AwesomePascal.vcxproj
  • GNU C++/Clang: compile AwesomePascal.cpp directly


  • InsertionSort.pas: A simple program that takes 5 integers and sorts them in descending order.
  • NumericExpr.pas: A simple program that contains numerical expressions and control flow.


$ g++ -O3 -DNDEBUG AwesomePascal.cpp -o BP
$ ./BP InsersionSort.pas