Please implement the following extensions to your interpreter:
- identifiers longer than one character
- floating point numbers
To do this, you have to implement a simple scanner, as demonstrated in the lecture. Create a Token class which contains information about a word. Tokens are created by the scanner using a finite automaton and then interpreted by the parser. As usual, create tests first!
I was asked what the criteria for evaluation of the homeworks are. The tests are very important, as is a consistent and readable code style. If the functionality is complete and working, and the tests make sense and cover most of the implementation, you will get full score. Comments are welcome, but not required, and I prefer meaningful method and variable names. In extreme cases, I may deduct points for code I’m not able to comprehend, so keep it simple 🙂
Just a reminder: starting Friday, Oct. 30th, the lecture will be held c.t., which means at 10:15! The exercise will still be starting at 12:30. See you!
There is now a weekly consultation hour beginning Monday, Oct. 26th, 14:00 to 15:00. You can meet me in my office, room 1337 and ask questions about homeworks or other lecture topics.
Requirements for the second homework:
- parse variables
- interpret assignments and keep a symbol table
- treat assignments as expressions, i.e. handle statements such as “x = y = 5”
As usual, follow a test-driven programming style, and write unit test for each feature of your interpreter.
Hint: use the grammar given in the lecture to check your interpreter logic.
block ::= stat* stat ::= expr | assign assign ::= name '=' expr expr ::= term ('+'|'-' term)* term ::= factor ('*'|'/' factor)* factor ::= number | '(' expr ')' | name number ::= '0'...'9' name ::= 'a'...'z' | 'A'...'Z'
When handling assignments like expressions, you have to extend this grammar in some way.
A student has asked me how repository folders should be named to avoid confusion. I suggest the following:
- Call the Eclipse project exactly as the CVS module name, e.g. “compilerbau” or something similarly short, no blanks please
- Create a normal Java project with a src and a bin folder!
- Inside the source folder, put your homework in a Java package, e.g. “de.uniks.compilerbau.homework01” for your first homework
Remember, this is only a suggestion, but you should really use Java packages. If you haven’t, you can use Eclipse’s refactoring tools to move your code into a package.
For those who joined the GForge project, your CVS repositories should be ready by now!
Check your GForge account, you should be member of your own project whose name ends with your initials. E.g. with my initials “JS”, my project would be called “Compilerbau WS09/10 (JS)”. This project would have a CVS called “cc09js”. To access it, create a CVS repository location in Eclipse, like this (but replacing my initials with your own, of course):
After creating the location, you can use it to submit your homework.
For clarification, here is a what you need to do to complete your first homework assignment:
- Write unit tests for
- parsing single digits
- interpreting an addition of those digits and computing the correct result
- interpreting subtraction, multiplication, and division
- correctly computing order of operations (“Punkt vor Strich”)
- parsing parentheses and interpreting them recursively (hint: separate parsing of factors, terms, and expressions)
- Once your tests are in place (and you have a red bar), start to implement the functionality required for each test. Start with the simple tests and approach the complicated ones from there, just as it was shown in the lecture.
- A GUI for the interpreter is not required, but you may add one if you like.
- To submit your homework, join the GForge project (see my previous entry on this page). I will contact you once your CVS is ready. Commit your project to CVS from Eclipse using Team/Share project.
Feel free to ask me if you have any questions. If the CVS doesn’t work or you have problems using it, you can submit your homework via Email.
The GForge project of the lecture is now online at https://gforge.cs.uni-kassel.de/projects/compilerbau09/.
Please create a GForge account (if you don’t already have one) and join the project as well as the discussion mailing list. Please note that this project is not intended for submissions of your homework. After you join the project, you will receive your own, separate GForge project and CVS repository to commit your homeworks to!
Please be patient, it may take a few days until your project is set up. Until then, you can submit the current homework to me via Email. Please export your Eclipse project as a ZIP file (using File/Export…/General/Archive File) and attach it to the mail. The deadline for homework submission is Friday before the lecture.