The parser should interact with the lexical analyzer to retrieve tokens as needed.
The parser may terminate execution if a syntax error is detected. No error recovery needed.
If the source program has no syntax errors, the result of the parse should be a source program
listing (e.g., this can be printed by the lexical analyzer as the program is read) and a statement
that parsing was successful.
The layout of the parser should conform to the EBNF grammar of TinyQ# given in the files.