Design a compiler for the language whose grammar is given below. The minimum requirement is to design the lexer, parser, and generate intermediate code in the intermediate language .Please also implementing error recovery, some simple optimizations, like reducing the number of temporaries etc. program ::= PROGRAM identifier; {declarations} BEGIN statement-list END declaration-list::= VAR variable-decl { , variable-decl } ; variable-decl ::= identifier [ := constant ] statement ::= IF "(" condition ")" THEN statement [ ELSE statement ] | WHILE "(" condition ")" DO statement | BEGIN statement-list END | ASKFOR identifier | DISPLAY write-item { , write-item } | identifier := expression statement-list ::= statement ; { statement ; } write-item ::= expression | string string ::= " any characters except " ..." condition ::= expression relational-op expression relational-op ::= < | > expression ::= term { (+ | - ) term } term ::= factor { ( * | / ) factor } factor ::= [ + | - ] ( constant | identifier ) constant ::= a number Integers only identifier ::= A-Z { A-Z _ 0-9 ? } Usual Identifier syntax plus ?