Consider the following statements, taken from three different Jack programs. In each one of these programs, the identifier foo represents a different thing: let x = 5 + foo - a // program 1. Here foo represents a simple variable. let y = foo[12] - 3 // program 2. Here foo represents an array. let z = 2 * foo.val() // program 3. Here foo represents an object. Suppose that we are parsing any one of these statements (we don’t know which), and that the current token is foo. What kind of parser do we need to determine if we have a simple variable, an array reference or a method call?