$29
For this assignment, we will be writing a parser that is able to parse an input file written in our “Tiny” grammar. You should finish writing the “Parser” class that I’ve provided. Your Parser class should print:
• Each time it enters or leaves a rule and what the rule is
• Each time it recognizes a token and what the token was
• Something, everytime it catches an error
• Whether or not the parse completed successfully (no errors) and how many errors were found
Parser.rb extends Scanner.rb (The lexer that you wrote for your last assignment) and provides a framework for a top-down, recursive-descent parser of the TINY language. The parser stays one token ahead in the Token stream (@lookahead) and uses the Token to predict how to continue parsing the current instruction and which method to call next.
The consume() method calls nextToken() in the scanner. The current @lookahead Token is discarded, and the next Token in the stream is retrieved. Whitespace Tokens are discarded.
The match(dtype) method tries to match the @lookahead Token with the provided type (dtype). If a match is found, consume() is called to retrieve the next Token. Otherwise an error is raised.
The program() method is first called to parse a TINY program. Since a TINY program consists of a sequence of statements, program() calls statement() repeatedly until it encounters the EOF token.
Complete the parser by providing methods for the appropriate BNF rules in TINY.
I have given you my lexer and token ruby classes. I have also partially written the parser for you and have written a main.rb file that can run your ruby parser.
I have also included 5 sample input files that you can use to test your program once you’ve finished writing it.
input[1-3].txt should complete with no parse errors.
input[4-5].txt should have parse errors.
Below are screenshots of what your output should look like, based on the input files I’ve provided.
Deliverables
Submit ONLY your Parser.rb file.
input3.txt
input4.txt
input5.txt