A note on parsing with string literals: The tokenizer (or scanner) we have written for the assignment will recognize and constructs, but you will have to recognize float and string literals and comments using the following grammar rules: --> . --> " " --> /* */ (where is a sequence of non-" tokens returned by the scanner and is a sequence of non-* and non-/ tokens returned by the scanner). Because we have to input the program to be parsed to the scanner as a string (by surrounding it with " marks), a string constant within the input program must be delimited (on input) by 2 double quote marks. That is, typing ?- tokenize(A, "X = ""this is a string literal"" ",Z). produces the list A = [X, =,'"',this,is,a,string,literal, '"'] in which you can recognize the string literal using the grammar rule above. Similarly, if you use a quote mark inside your string constant it must be input as 2 double quote marks. (Let's not worry about comments containing extra */ but just disallow them.)