Project Spring 2011 Design a general purpose programming language. It does not need to be over-stuffed with features, but must include the following required features: The basic Arithmetical and Logical operators Functions Conditionals and Loops Assignments Blocks (or "Compound Statements") Basic Input and Output capabilities Declarations of Local Variables More than one basic non-trivial Data Type; Integers are required, and at least one more Strings, Floats, whatever Objects with Members and Methods The syntax of your language is up to you. Do not blindly follow the familiar patterns from C or C++ or Java, as they lead to unnecessary complexities. Implement and thoroughly test a Lexical Analyser and informative error reporting system. Implement and thoroughly test a Parser and Tree Printer (preferably a "pretty printer", for your own sake when debugging). You should do this incrementally. First pick on one simple self-contained part of the language (perhaps just expressions, excluding function calls) and completely implement and test that. Then pick on another part of the language that only requires what you have already got (perhaps assigments) and completely implement and test that. Carry on in that way, and progress is fast. You choose which style of parser to write, but for the sake of getting it to work without too much pain, I recommend the recursive descent style. Implement and thoroughly test a basic type checker. It should at least check that variables are declared and used properly, and functions are called with the right types of parameters. It should add to the parse tree and type conversion operations that are needed. Implement a code generator for your language, so that programs can actually be run and produce the correct results. You choose the target system (i.e. what assembly language to produce). You may use your own virtual machine, Or you may use the emulator used in the opreating systems class, (see http://rabbit.eng.miami.edu/class/een521/111index.html, under the heading "documentation") Or (if you are experienced with assembly level programming), you may generate code for a real computer, such as an intel PC/mac system or some microprocessor that you are familiar with. (I wonder if the ever-popular arduino is feasible?). But DO make sure that you can produce a basic assembly language program by hand that actually works and produces visible results before choosing this third path. Your implementation may be in C++ or Java. If you want to try using some other language instead, discuss it with me first.