CSC 645 - Compiler Construction

Dr. R. M. Siegfried

Term Project - A Pascal Subset Compiler

You will be implementing part of a compiler for the language specified below. The language is a subset of Turbo Pascal, lacking its arrays and records for purposes of simplicity.

The project will include a scanner, symbol table, parser and (time permitting) type checker and intermediate code generator. The specifications for the language's syntax are as follows:

Lexical Conventions

Comments are surrounded by { and }

Blanks between tokens are optional, except reserved words must be surrounded 
by blanks, newlines, the beginning of the program or the final period.

Token id matches a letter or a letter followed by letters and digits"
        letter  [a-zA-Z]
        digit  [0-9]
        id  letter (letter | digit)*

Token num matches unsigned integers
        digits  digit digit*
        optional_fractional   . digits | ε
        optional_exponent   ( E | (+ | - | e ) digits) | ε
        num  digits optional_fraction optional_exponent

Keywords are reserved and appear in boldface in the grammar

The relational operators (relops) are =,  >,  <,  >=,  <=,  <>

The addops are +, -, OR

The mulops are *, /, DIV, MOD, AND
The lexeme for token assignop is :=

Pascal Subset Syntax

Program  Header Declarations Block .
Header  program id ;
Declarations  VariableDeclarationSection   ProcedureDeclarations
VariableDeclarationSection    VAR VariableDeclarations 
                                        | ε
VariableDeclarations   VariableDeclarations  VariableDeclaration
                                         | VariableDeclaration
VariableDeclaration  IdentifierList : Type ;
IdentifierList   IdentifierList , id
                         | id
Type  integer 
        | real

ProcedureDeclarations  ProcedureHeader Declarations Block ;
ProcedureHeader  procedure id ;
Block    begin Statements end
Statements     Statements Statement | Statement
Statement  id := Expression
                        | id ()
                        | Block
                        | if Expression then Statement ElseClause
                        | while Expression do Statement
                        | ε

ElseClause  else Statement | ε
ExpressionList  ExpressionList , Expression | Expression

Expression  SimpleExpression relop SimpleExpression
                | SimpleExpression

SimpleExpression  Term
                        | addop Term
                        | SimpleExpression addop Term
Term  Term mulop Factor
                | Factor
Factor  id
        | num
        | ( Expression )
        | not  Factor 

[Back to the Assignments Index]