The
second project involves writing the syntactic analyzer for the compiler that
was begun in the previous project. The grammar of the language is the
following:program:{function}function:FUNCTION IDENTIFIER [parameters]
RETURNS type; bodyparameters:parameter{ parameter}parameter:IDENTIFIER: typetype:INTEGER |REAL |BOOLEANbody:{variable}BEGIN statementEND;variable:IDENTIFIER:typeISstatementstatement:expression ; |IF expression THEN statement ELSE statement ENDIF ;expression:IDENTIFIER |IDENTIFIER (expression{ expression}) |INT_LITERAL | REAL_LITERAL
| BOOLEAN_LITERALexpression operator
expression |(expression)operator: ADDOP
| MULOP | RELOP
| AND | OR | NOTIn
the above grammar the red symbols are nonterminals the blue symbols are
terminals and the black punctuation are EBNF metasymbols. The braces denote
repetition 0 or more times and the brackets denote optional.The
grammar must be rewritten to eliminate the EBNF brace and bracket metasymbols
and to incorporate the significance of parentheses operator precedence and
left associativity for all operators. Among arithmetic operators the
multiplying operators have higher precedence than the adding operators. All
relational operators have the same precedence. Among the binary logical
operatorsand has higher precedence thanor. Of the categories
of operators the unary logical operator has highest precedence the arithmetic
operators have next highest precedence followed by the relational operators
and finally the binary logical operators.The directives to specify
precedence and associativity such as%prec and%left may not be usedThe
syntactic analyzer should be created using bison. It should detect and recover
from syntax errors to the extent possible. The semicolon should be used as the
primary synchronization token. The compiler should produce a listing of the
program with error messages included after the line in which they occur. A
count of the number of lexical and syntactic errors and the number of total
errors should follow the compilation listing.Your
parser should however be able to correctly parse any syntactically correct
program without any problem.You
will lose points from the design portion of your grade if your bison input
produces any shift/reduce or reduce/reduce errors.The
70 points that you will receive for the functionality portion of your grade on
this project will be based two criteria shown below:Parses
all syntactically correct programs40
pointsDetects
and recovers from errors in the function header5
pointsDetects
and recovers from errors in variable declarations5
pointsDetects
and recovers from errors in conditional expressions5
pointsDetects
and recovers from errors in arithmetic expressions5
poinstDetects
and recovers from errors in the function body5
pointsDetects
and recovers from multiple errors5
points