CMSC Compiler Theory and Design
Project Skeleton
UMGC CITE
Summer
Project Parser
#include
using namespace std;
#include "listing.h
int yylex;
void yyerrorconst char message;
define parse.error verbose
token IDENTIFIER INTLITERAL CHARLITERAL REALLITERAL
token ADDOP MULOP ANDOP RELOP ARROW OROP NOTOP BEGIN CASE CHARACTER
END ENDSWITCH FUNCTION INTEGER IS LIST OF OTHERS RETURNS SWITCH WHEN
ELSE ELSIF ENDFOLD ENDIF FOLD IF LEFT REAL RIGHT THEN REMOP EXPOP
NEGOP PUNC
function:
functionheader optionalvariable body ;
functionheader:
FUNCTION IDENTIFIER RETURNS type ; ;
type:
INTEGER
CHARACTER
REAL ; Modified to include REAL type
optionalvariable:
variable
empty ;
variable:
IDENTIFIER : type IS statement ;
IDENTIFIER : LIST OF type IS list ; ;
list:
expressions ;
expressions:
expressions expression
expression ;
body:
BEGIN statement END ; ;
statement:
statement ;
error ; ;
statement:
expression
WHEN condition expression : expression
SWITCH expression IS cases OTHERS ARROW statement ; ENDSWITCH ;
cases:
cases case
empty ;
case:
CASE INTLITERAL ARROW statement ; ;
condition:
condition ANDOP relation
relation ;
relation:
condition
expression RELOP expression ;
expression:
expression ADDOP term
term ;
term:
term MULOP primary
primary ;
primary:
expression
INTLITERAL
CHARLITERAL
REALLITERAL Added REALLITERAL
IDENTIFIER expression
IDENTIFIER ;
void yyerrorconst char message
appendErrorSYNTAX message;
int mainint argc, char argv
firstLine;
yyparse;
lastLine;
return ;
Please fix this within this grammar