Group Assignment: Compiler design Compiler design is a complex and essential field of study for computer science students. With the increasing reliance on programming languages, it is crucial to understand the inner workings of a compiler to create efficient and error-free software. To have deep insight into the compilation process and to tackle real-world programming challenges, discuss in-depth on the following assignment questions and don’t forgot to provide appropriate example for each questions. Part I: Discuss the following basic techniques used in compiler construction: 1. Discuss lexical analysis, and also a. Discuss how to break the input program into tokens, and discuss any lexical errors as well as how to fix them. b. Explain different components of lexical analysis, such as regular expressions and finite automata, and their role in effectively designing a lexical analyzer. 2. Discuss Syntax analysis including a. Deals with implementing the process of a parser that recognizes the syntactic structure of the input program according to the defined grammar. b. Explain how to construct parse trees, different parsing techniques including top down and bottom-up as well as LL(1), LR(1)), and recursive descent parsing c. Explain ambiguity grammar and how to handle ambiguous 3. Discuss Semantic analysis or context-sensitive analysis as well as a. Type checking according to type expressions and the types of variables and mismatch errors 4. Intermediate code generation and code optimization. Part II: Discuss the following basic data structures used in compiler construction: 5. abstract syntax trees, 6. symbol tables, 7. three-address code, and 8. stack machines Part III: Discuss the following basic software tools used in compiler construction 9. lexical analyzer generators 10. parser generators