Write a LEX program that does the following: 1. Reads a C++ program, numbers all lines. 2. Finds all identifiers in the program. 3. Lists all identifiers that are NOT C++ keywords, and the line or lines on which each identifier appears. NOTES: - Each identifier name should appear only once in the list. - Anything inside a comment (// or /* ... */) should be ignored. - Although not mandatory, a sorted list of identifiers is easier to check. - You do not have to check for correct C++ syntax; however text that does not match the definition should be ignored (e.g. numbers, bad variable names, garbled text). OUTPUT: 1. Program listing with line numbers. 2. List of identifiers with line(s) on which each identifier appears. DELIVERABLES: Program source code, with internal documentation Test results After that I want to make three different version .