Welcome to our compiler! We've worked very hard to make your experience with our langauge a positive
one. ViPER is a functional langauge and each of the directories above holds a progressively more
developed compiler. Our implementation culminates in our capstone project, which was the open ended
implementation of a new feature. We proposed, designed, and completed the implementation of
try-catch and check-expect style functionality.
Feel free to check out the different iterations of the compiler, each assignment building off all of the previous ones. As the assignments build on eachother, the final project has the most functionality. A brief overview of what each assignment focused on, starting in Assignment 2 is:
Adder(*.adder): Basic compiler foundation with basic arithmeticBoa(*.boa): More binary operators and arithmetic with the addition ofletandifstatementsCobra(*.cobra): Implementation of coded binary representations of valuesDiamondback(*.diamond): Function definitionsEgg-eater(*.egg): Tuples, sequencing, recursive tuplesFer-de-lance(*.fdl): Anonymous first-class functionsGarter(*.garter): Garbage collectionRacer(*.racer): Register allocationFinal(*.viper):check-expectandtry-catch
To view the concrete syntax for each of the langauge iterations, check out the README in each
directory. To learn more about our final project, check out the README in that directory.
Additionally, there are numerous example programs in each assignment's input folder.
To run your own programs:
- Write program files in the input directory under
do_passin the desired assignment directory- The file extension should match the corresponding file extension for that directory listed above
- Run the
runscript in that assignment's root directory to compile your program - Run the compiled
*.runfile atoutput/do_pass/YOUR_PROG_NAME.run
Thank you for using our language! We hope your programs execute right!
- Jacob Kline and Emery Jacobowitz, Northeastern University Khoury College of Computer Science class of '25