week 6(10.7): the tiny sample language and it ’ s compiler the tiny + extension of tiny

35
Week 6(10.7): The TINY sample language and it’s compiler The TINY + extension of TINY Week 7 and 8(10.14 and 10.21): The lexical of TINY + Implement of TINY + scanner To be determined Syntax of TINY + and Implement the parser of TINY + Semantic of TINY + Implement of semantic analyzer and intermedi ate code generator for TINY +

Upload: nyssa-tillman

Post on 15-Mar-2016

143 views

Category:

Documents


0 download

DESCRIPTION

Week 6(10.7): The TINY sample language and it ’ s compiler The TINY + extension of TINY Week 7 and 8(10.14 and 10.21): The lexical of TINY + Implement of TINY + scanner To be determined Syntax of TINY + and Implement the parser of TINY + Semantic of TINY + - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

Week 6(10.7): The TINY sample language and it’s compiler The TINY+ extension of TINY

Week 7 and 8(10.14 and 10.21): The lexical of TINY+ Implement of TINY+ scanner

To be determined Syntax of TINY+ and Implement the parser of TINY+ Semantic of TINY+ Implement of semantic analyzer and intermediate code generator for TINY+

Page 2: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

Time Week 6,7,8

Tuesday: section 3,4 venue

Week 6,7,8 Computer Bilingual: B3-230 Network Engineering: B3-231

Page 3: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

Due date Experiment 1 Implementing a Scanner

for TINY+: by the end of week 10(11.09)

Page 4: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

The TINY sample language and it’s compiler

Page 5: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 6: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

1 The TINY Sample Language and Compiler

Page 7: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 8: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 9: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

1.1 The TINY Language Syntax description

A program is a sequence of statements separated by semicolons

DeclarationsNo procedures and no declarations

Data TypeAll variables are integer variables, and variables are declared by assigning values to them

Page 10: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

ExpressionBoolean and integer arithmetic expressions

CommentComments are allowed within curly bracket

Page 11: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

{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

Page 12: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 13: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 14: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 15: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

2. Implementation of a TINY Scanner

Page 16: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

2.1 Implementing a Scanner for the Sample Language TINY

The lexical structure of TINYReserved Words Special Symbols Otherif then else endrepeat untilread write

+ - * /= < ( ) ; :=

numberidentifier

Page 17: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

Construct a DFA for the scanner directly

Page 18: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 19: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

3 Syntax of the TINY Language

Page 20: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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 endrepeat-stmt->repeat stmt-seq until expassign-stmt-> id:= expread-stmt -> read idwrite-stmt -> write exp

Page 21: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 22: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 23: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

3 A repeat-statement 4 An assign-statement

5 A write-statement 6 An operator-expression

Page 24: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

{sample program in TINY language- computes factorial}

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

fact:=1;repeatfact:=fact*x;x:=x-1until x=0;write fact{output factorial of x}

end

Page 25: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY
Page 26: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

4 A Recursive-Descent Parser for TINY

Page 27: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 28: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

5 A Semantic Analyzer for the TINY Language

Page 29: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 30: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 31: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 32: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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 postorder traversal Each is processed in a separate pass over the syntax tree

Page 33: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

6 A Runtime Environment for the TINY Language

Page 34: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

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

Page 35: Week 6(10.7): The TINY sample language and it ’ s compiler The TINY +  extension of TINY

temp1temp2temp3free

memorywzyx

bottom of memory

top of memory

top of temp stack

0123

Runtime environment of TINY