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.
		
		
		
		
		
			| 
				
					
						 | 
			3 years ago | |
|---|---|---|
| .gitattributes | 7 years ago | |
| .gitignore | 3 years ago | |
| AwesomePascal.cpp | 3 years ago | |
| AwesomePascal.vcxproj | 3 years ago | |
| InsertionSort.pas | 3 years ago | |
| LICENSE | 7 years ago | |
| NumericExpr.pas | 3 years ago | |
| README.md | 3 years ago | |
		
			
				
				README.md
			
		
		
			
			
		
	
	AwesomePascal
Another PL/0 language (https://en.wikipedia.org/wiki/PL/0) compiler and debugger that is written in C++.
Introduction
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.
Architecture
- 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 ininitStates()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. 
 - A lexer (
 
Build
Supported Environments:
- MSVC project: AwesomePascal.vcxproj
 - GNU C++/Clang: compile AwesomePascal.cpp directly
 
Examples
- 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.
 
Usage
$ g++ -O3 -DNDEBUG AwesomePascal.cpp -o BP
$ ./BP InsersionSort.pas