Lexical Analysis all done in c languge part (A) In this assignment you will improve the lexical analyser described in section 4.2 of the textbook (Sebesta). The improved version of the lexical analyser should be able to (i) report errors in the identifiers and integer literals, (ii) it should be able to recognize assignment operator and certain keywords. First get the code (in C language) for the lexical analyser described in the textbook working. Try it out on simple examples, e.g. (sum + 47) / total. It is not be able to report errors in identifiers and integer literals. (The rules for identifiers and literals are described in the book.) For example, how does it handle an illegal identifier 2sum or an illegal integer literal 23b2? Make appropriate changes to the state transition diagram and the code to enable the lexical analyser report the above mentioned errors. Second change is to enable the lexical analyser handle assignment operators and certain key words. After this change it should be able to handle assignment statements and keywords: if, then and else. Test your analyser on the following input file: x = 5 sum = x * 3 / 5 if sum > 1 then sum = sum + 1 else sum = sum 1 Rubrics: Marks 10/10 if the lexical analyser recognizes all the tokens correctly and reports illegal identifiers such as 2sum, or illegal operators part (B) In this assignment you will extend the work that you did in Assignment 1 on lexical analysis. You will now add a syntax analyser (parser) to it. The syntax analyser will handle expressions described by the EBNF given as an example in section 4.4.1 of the textbook. The parser will be based on a recursive-descent parsing algorithm, and the outline C code for the parser is already given in the textbook. You will improve it by adding error handling capability. First get the code for the recursive-descent parser described in the textbook working. Try it out on simple examples, e.g. (sum + 47) / total. This example should produce the trace given in section 4.4.1 (page 184-185 of 10th edition). To handle the error-handling you will have to implement the error() function. This function should report errors and also indicate what is expected by the parser in case a wrong token is found at the input. Rubrics: Marks 10/10 if missing operator error, missing right bracket, missing left bracket is detected and reported. if you need anything just text me thanks you a lot.