The TINY sample language and it ’ s compiler Notes by Liu Xinxin, Peng Shaowu swpeng@scut.edu.cn

Preview:

Citation preview

The TINY sample language and it’s compiler

Notes by Liu Xinxin, Peng Shaowu swpeng@scut.edu.cn

1 The TINY Sample Language and Compiler2 Implementation of a TINY Scanner3 Syntax of the TINY Language4 A Recursive-Descent Parser for TINY5 A Semantic Analyzer for the TINY

Language6 A runtime environment for the TINY

Language

1 The TINY Sample Language and Compiler

• TINY Compiler

– The construction of TINY compiler uses the techniques studied in each chapter and show how all the parts of a compiler fit together.

– Using experiment language TINY as source language– Using TM(the assembly language for a simple

hypothetical processor) as the target language– Compiler is written in C

• The construction of compiler for a concrete language– Familiar with the source language (lexical, syntax,

semantic)– Familiar with the target language (addressing

mode, the number of register, data representation )

– Determine the structure of compiler

1.1 The TINY Language

• Syntax description – A program is a sequence of statements separated by

semicolons– Declarations

No procedures and no declarations– Data Type

All variables are integer variables, and variables are declared by assigning values to them

– StatementTwo control statements: if-statement and repeat-statement, read and write statements

– ExpressionBoolean and integer arithmetic expressions

– CommentComments are allowed within curly bracket

{sample program in TINY language- computes factorial}

read x; { input an integer }if 0<x then { don’t compute if x<=0 }

fact:=1;repeat

fact := fact*x;x := x-1

until x=0;write fact{output factorial of x}

end

Example

1.2 The TINY Compiler

• Components of the TINY Compiler– It has the following components: Scanner, parser, semantic

analyzer, and code generator phases together with a symbol table

– Following components are absentNo optimization phases and separate error handler or literal table

Structure of TINY Compiler

• Four-pass compiler– The first pass consists of the scanner and parser, which

construct the syntax tree;– The second and third passes undertake semantic analysis• The second pass constructs the symbol table• The third pass performs type checking

– The forth pass is the code generator

The code that drives these passes:syntaxTree=parse();buildSymtab(syntaxTree);typeCheck(syntaxTree);codeGen(syntaxTree,codefile);

2. Implementation of a TINY Scanner

2.1 Implementing a Scanner for the Sample Language TINY

• The lexical structure of TINY

Reserved Words Special Symbols Otherif then else endrepeat untilread write

+ - * /= < ( ) ; :=

numberidentifier

Construct a DFA for the scanner directly

Explanation:All accepting states are collected into one

state “DONE”, the different token recognized is saved in a variable

Construct a table of reserved words, reserved words are considered only after an identifier has been recognized, and then to look up the identifier in the table

The implementation of the DFA uses the doubly nested case analysis

3 Syntax of the TINY Language

3.1 A Context-Free Grammar for TINY

program -> stmt-seqstmt->seq -> stmt-seq;stmt | stmtstmt -> if-stmt|repeat-stmt|assign-

stmt|read-stmt | write-stmtif-stmt ->if exp then stmt-seq end

| if exp then stmt-seq else stmt-seq end

repeat-stmt->repeat stmt-seq until expassign-stmt-> id:= expread-stmt -> read idwrite-stmt -> write exp

exp -> simp-exp cop simp-exp |simp-exp

cop -> < | =simp-exp -> simp-exp addop term |termterm -> term mulop factor | factorfactor -> (exp) |num |id

3.2 Syntax Tree Structure for the TINY Compiler

Basic syntax tree structures1 A sequence of statements

2 An if-statement;

; s

s ssyntax tree of s;s;s

seq

s s s

3 A repeat-statement 4 An assign-statement

5 A write-statement 6 An operator-expression

{sample program in TINY language- computes factorial}

read x;{input an integer}if 0<x then {don’t compute if x<=0}

fact:=1;repeat

fact:=fact*x;x:=x-1

until x=0;write fact{output factorial of x}

end

4 A Recursive-Descent Parser for TINY

• TINY Grammar in EBNF …

stmt->seq -> stmt {;stmt}exp -> simp-exp [cop simp-exp]simp-exp -> term {addop term}term -> factor {mulop factor}……

5 A Semantic Analyzer for the TINY Language

• We separate the discussion of the TINY semantic analyzer into two parts– The structure of the symbol table and its associated

operations– The operations of the semantic analyzer itself, including

the construction of the symbol table and type checking

5.1 A Symbol Table for TINY

• What information needs to be held in the table

– It does not need to contain scope information, and data type

– It contains locations for variables for code generation– It also contains a cross-reference listing of line numbers

where variables are accessed

For example5: read x;6: if x>0 then7: fact:=1;8: repeat9: fact:=fact*x;10: x:=x-111: until x=0;12: write fact13:endThe symbol table for this program

Variable Name

Location Line numbers

x 0 5,6,9,10,10,11fact 1 7,9,9,12

5.2 A Semantic Analyzer for TINY

• The symbol table is an inherited attribute, while the data type of an expression is a synthesized attribute

• Thus, the symbol table can be built by a preorder traversal of the syntax tree, and type checking can be performed by a post-order traversal

• Each is processed in a separate pass over the syntax tree

6 A Runtime Environment for the TINY Language

• The structure of a runtime environment for the TINY language – Place the variables in absolute addresses at the bottom

end of program memory– Allocate the temporary (dynamic storage during

expression evaluation) stack at the top end

temp1temp2temp3

free memory

wzyx

bottom of memory

top of memory

top of temp stack

0

1

2

3

Runtime environment of TINY

Recommended