Question: Can you fix the errors in the code for my assignment: ( scanner . l ) % { #include #include #include parser.tab.h extern int

Can you fix the errors in the code for my assignment: (scanner.l)%{
#include
#include
#include "parser.tab.h"
extern int line_num;
%}
%option noyywrap
%%// Lexer rules
[0-9]+{ yylval.num = atoi(yytext); return NUM; }
[A-Za-z_][A-Za-z0-9_]*{ yylval.id = strdup(yytext); return ID; }
"if"{ return IF; }
"while" { return WHILE; }
"else" { return ELSE; }
"int" { return INT; }
"float" { return FLOAT; }
"+"{ return AddOP; }
"-"{ return SubOP; }
"*"{ return MulOP; }
"/"{ return DivOP; }
"="{ return AsOP; }
"{"{ return OpenCurlyBracket; }
"}"{ return ClosedCurlyBracket; }
"("{ return OpenBracket; }
")"{ return ClosedBracket; }
";"{ return Semicolon; }
[\t]+{/* Skip whitespace */}
{ line_num++; return '
'; }
.{ fprintf(stderr, "Error: Unknown character '%s' at line %d
", yytext, line_num); exit(1); }
%%(parser.y)%{
#include
#include
#include "scanner.h"// Include the scanner header for token definitions
extern int line_num; // Track the line number for error reporting
%}
%token ID NUM INT FLOAT IF ELSE WHILE
%token OpenCurlyBracket ClosedCurlyBracket OpenBracket ClosedBracket OpenSquareBracket ClosedSquareBracket
%token AddOP SubOP MulOP DivOP AsOP Equal NotEqual LT LTE GT GTE Comma Semicolon
%left AddOP SubOP
%left MulOP DivOP
%nonassoc REL_OP
%%
program:
Program ID '{' declaration_list statement_list '}'
;
declaration_list:
declaration_list var_declaration
| var_declaration
;
var_declaration:
type_specifier ID ';'
| type_specifier ID '[' NUM ']'';'
;
type_specifier:
INT
| FLOAT
;
statement_list:
statement_list statement
|/* empty */
;
statement:
assignment_stmt
| compound_stmt
| selection_stmt
| iteration_stmt
;
assignment_stmt:
var '=' expression ';'
;
var:
ID
| ID '[' expression ']'
;
compound_stmt:
'{' statement_list '}'
;
selection_stmt:
IF '(' expression ')' statement
| IF '(' expression ')' statement ELSE statement
;
iteration_stmt:
WHILE '(' expression ')' statement
;
expression:
additive_expression
| additive_expression REL_OP additive_expression
;
additive_expression:
term additive_expression_tail
;
additive_expression_tail:
AddOP term additive_expression_tail
| SubOP term additive_expression_tail
|/* empty */
;
term:
factor term_tail
;
term_tail:
MulOP factor term_tail
| DivOP factor term_tail
|/* empty */
;
factor:
'(' expression ')'
| var
| NUM
;
%%
void yyerror(const char *s){
fprintf(stderr, "Syntax error: %s at line %d
", s, line_num);
exit(1);
}
int main(){
yyparse();
return 0;
}
Can you fix the errors in the code for my

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Programming Questions!