parent
							
								
									7565bcbde4
								
							
						
					
					
						commit
						b133373471
					
				@ -1,27 +1,25 @@
 | 
				
			|||||||
	const a=10;
 | 
						const a=10;
 | 
				
			||||||
	var b,c;
 | 
						var b,c,e;
 | 
				
			||||||
	procedure p;
 | 
						procedure p;
 | 
				
			||||||
		var d;
 | 
							var d;
 | 
				
			||||||
		begin
 | 
							begin
 | 
				
			||||||
			d:=20;
 | 
								d:=20;
 | 
				
			||||||
write(d);
 | 
					 | 
				
			||||||
			c:=d/a;
 | 
								c:=d/a;
 | 
				
			||||||
write(c);
 | 
					 | 
				
			||||||
			c:=c+b;
 | 
								c:=c+b;
 | 
				
			||||||
write(c);
 | 
					 | 
				
			||||||
			if a<c then c:=c*2;
 | 
								if a<c then c:=c*2;
 | 
				
			||||||
write(c);
 | 
								write(c);
 | 
				
			||||||
                end;
 | 
							end;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	begin
 | 
						begin
 | 
				
			||||||
		read (b);
 | 
							read (b);
 | 
				
			||||||
		while b#0 do
 | 
							while b#0 do
 | 
				
			||||||
			begin
 | 
								begin
 | 
				
			||||||
 | 
									e := b;
 | 
				
			||||||
 | 
									e := 4*e/2/3+(3*1);
 | 
				
			||||||
				call p;			
 | 
									call p;			
 | 
				
			||||||
				write(c);
 | 
									write(e);
 | 
				
			||||||
				read(b);
 | 
									read(b);
 | 
				
			||||||
				b := 4*b/2/3+(3*1);
 | 
					 | 
				
			||||||
write(b);
 | 
					 | 
				
			||||||
			end;
 | 
								end;
 | 
				
			||||||
		b:=1;
 | 
							b:=999999999;
 | 
				
			||||||
write(b);
 | 
							write(b);
 | 
				
			||||||
	end.
 | 
						end.
 | 
				
			||||||
@ -1,12 +1,31 @@
 | 
				
			|||||||
# BadassPascal
 | 
					# AwesomePascal
 | 
				
			||||||
### This code came from my undergrad course project for compiler principles in 2015, although I did minimum bug fixes on this recently, this code still can not be considered as efficient nor even readible by any means because a lot of hacks were used to make it work and the writing doesn't confrom to a stable coding style either. However, it is something that I was proud of at that time.
 | 
					
 | 
				
			||||||
 | 
					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 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.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					##  Build 
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Another PL/0 language (https://en.wikipedia.org/wiki/PL/0) compiler and debugger written in C++.   
 | 
					 | 
				
			||||||
  
 | 
					 | 
				
			||||||
Supported Environments:   
 | 
					Supported Environments:   
 | 
				
			||||||
MSVC project: BadassPascal.sln  
 | 
					- MSVC project: AwesomePascal.vcxproj 
 | 
				
			||||||
GNU C++/Clang: compile BadassPascal.cpp directly  
 | 
					- GNU C++/Clang: compile AwesomePascal.cpp directly  
 | 
				
			||||||
>e.g.  
 | 
					
 | 
				
			||||||
>`$ g++ -O3 BadassPascal.cpp -o BP`  
 | 
					## 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`  
 | 
					>`$ ./BP InsersionSort.pas`  
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
					Loading…
					
					
				
		Reference in new issue