The following regular expression (0|1) (0|1)* (.|) (0|1)* (where means epsilon, the empty regular expression, and . means a literal .) matches the strings "101" and "10.1", but not "10.1.1". Spend up to 30 minutes, alone or in groups, on the following four questions: 1) Using Thompson's Construction (preferably as discussed in lecture), draw a diagram of an NFA for this regular expression 2) Using ad-hoc techniques, make the result smaller and cleaner (for example, for (0|1) my presentation would have a start state that went, via two epsison productions, into the start states of the machines for just "0" and just "1", and each of these machines would have a non-epsilon arc to it's end state, and those would then come together in a final accept state --- simpler than this would be to have one start and one end state, with a 0 arc and a 1 arc between them). (If you want to do #2 for each component of #1 as you go along, that's o.k. too, as long as you could have done #1 by itself.) 3) For the result of #2, give a number to each state and draw a state transition _table_ (indexed by state along one axis and input symbol on the other). 4) Use the result of #3, and the non-deterministic matching algorithm given in lecture, to show the steps in matching or not matching the three example strings at the top of this assignment. Bring the result (even if it's just a note about what you looked at for half an hour, trying to figure this out) to the start of class this Thursday, 1/31.