Please read this file before starting the parsing assignment: File: tokenizer_new.pl ====================== The tokenizer (or scanner) we have written for the assignment will recognize some basic , , constructs. You have to write rules using the provided grammar for the missing ones. We have to input the program to be parsed to the scanner as a list of characters by surrounding it with ` marks. That is, typing ?- tokenize(A, `x = y + 2;`, Z). OR ?- phrase(tokenize(A), `x = y + 2;`). produces the list A = [x, =, y, +, 2, ;] in which you can recognize the string literal using the grammar rule above. A string constant within the input program must be delimited (on input) by 2 \` marks. For example, ?- tokenize(A, `x = \`this is a string literal\``,Z). produces the list A = [x, =, '`', this, is, a, string, literal, '`'] Note that the grammar given in file does not recognize some operators !=, >= etc. However, it contains rule for recognizing == operator. Similar to the == operator rule, you have to write rules for the other comparative operators. For example, the following rule will recognize >= operator tokenize(Z) --> ">=", tokenize(Y), {Z = [>= | Y]}. Now, after adding rules for >=, if you type the following ?- phrase(tokenize(A), `if x >= y + 2 then y = x + 1;`). then this goal will succeed and Z will be instantiated to Z = [if, x, >=, y, +, 2, then, y, =, x, +, 1, ;]