©j.tiberghien - ulb-vub version 2003-2004 1 troisième partie chapitre 1 les supports à la...

Post on 29-Dec-2015

214 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 1

Troisième Partie

Chapitre 1

Les supports à la programmation

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 2

Programming languages

Machine Language

Assembler

C++

Source

code

Objectcode

High LevelLanguage

Low Level

Languages

HARDWARE

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 3

Data Memory

Arithmetic Unit

Control Unit

Program Memory (from 11)

100: ND

102: SC

1:KFL

2:KDA

3:DDA

4 5 6

1 2 3

* 0 #

7 8 9

10 10 0 10011 10 0 10212 40 1 0 1213 22 102 10 10214 20 102 2 102

16 20 101 1 10117 41 101 3 1218 41 2 321 1019 10 1 3

15 10 0 1

20 47 10

Machine Language

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 4

Assembler LanguageLabel Operation Operands Comments

ORG 100 First address of data memory

ND DAT 2 Number of entered digits, 2 bytes

SC DAT 2 Secret Code as entered, 2 bytes

KFL EQU 1 Keyboard flag

KDA EQU KFL+1 Keyboard data

DDA EQU 3 Door data

ORG 10 First address of program memory

BGN COPY #0,ND Initialise number of entered digits

COPY #0,SC Initialise secret code

TFL EQ? KFL,#0,TFL Test continuously for key stroke

MUL SC,#10,SC Shift SC one digit to the left

ADD SC,KDA,SC Add newly entered digit to SC

COPY #0,KFL Reset Keyboard flag

ADD ND,#1,ND Increase number of entered digits

NE? ND,#3,TFL Any more digits needed ?

NE? SC,#321,BGN Is the entered secret code correct ?

COPY #1,DDA Open the door

JMP BGN Restart everything

END

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 5

KFL =

KDA =

DDA =

4 5 6

1 2 3

* 0 #

7 8 9

Main(){int sc = 0; const int Key = 321; bool *KFL = 1; int *KDA = KFL+1; bool *DDA = 3; while (true) {for (int nd=1;nd<=3;++nd) {while (*KFL == 0); sc = sc*10+*KDA; } if (sc == Key) *DDA = 1; }}

High Level language

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 6

HARDWARE

INTERPRETER

Source Code (LLL or HLL)

Translator

Object Code

Transforming Source Code

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 7

Translators vs. Interpreters

• Translators– Translate the entire program at once– Program execution very fast– Poor run-time error messages

• Interpreters– Translate and execute statement after

statement– Very slow execution– Good run-time error messages

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 8

Macros

…LDA +7,ULDB +5,UMULSTD +2,ULDA +6,ULDB +5,UMULADD +1,USTD +1,ULDA +6,ULDB +5,UMULADD +1,U...

MULB MDEFLDA &1LDB &2MULMEND…MULB+7,U;+5,USTD +2,UMULB+6,U;+5,UADD +1,USTD +1,UMULB+6,U;+5,UADD +1,U...

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 9

Macros in HLL

/* The Program: */ main(void){# include “one”}

/* file one */ printf(“ from 1.\n”);# include “two”

/* file two */ printf(“ from 2.\n”);

from 1. from 2.

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 10

Macro Expanders

Source

Object

Macro Expander

Main module Macro Library

AssemblerCompiler

Expanded Source Code

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 11

Macros vs. Functions

• MACROS

– Static Expansion

– Waste of memory

– Fast

– Powerful parameter

passing, even in

assembler

• FUNCTIONS

– Dynamic Expansion

– Save memory space

– Slow

– Programmer friendly

parameter passing not

available in assembler

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 12

HARDWARE

INTERPRETER

Source Code (HLL)

COMPILER

Object Code

Translating HLLs

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 13

Syntax and Semantics

• Syntax = form

• Semantics = meaning

• Example– My beer is on the table

• Syntax : OK

• Semantics : OK

– My table is on the beer• Syntax : OK

• Semantics : You had too many beers !!!

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 14

Syntax Definition :Backus Naur Formalism (BNF)

• Terminal Symbols– Appear literally in program text– Examples : “a”, “3”, “END”, “>”, “:=”

• Non-terminal Symbols– Name given to set of terminal symbols– Written between < and >– Defined by a metalinguistic expression– Examples : <Letter> , <Digit>,<Expression>,<ifstatement>

• Metalinguistic expression– Formal definition (::=) of a non-terminal symbol– Contains terminal and non-terminal symbols – Expresses juxtaposition or choice (the | operator)– Example : <Digit> ::= 0|1|2|3|4|5|6|7|8|9

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 15

BNF Examples (1)

<UpperCaseLetter> ::= A|B|C|D|E| |X|Y|Z

<LowerCaseLetter> ::= a|b|c|d|e| |x|y|z

<Letter> ::= <UpperCaseLetter> | <LowerCaseLetter>

<Digit> ::= 1|2|3|4|5|6|7|8|9|0

<CardinalNumber> ::= <Digit> | <Digit><CardinalNumber>

<IntegerNumber> ::= <CardinalNumber>

| + <CardinalNumber>

| - <CardinalNumber>

<Identifier> ::= <Letter> | <Identifier><Letter>| <Identifier> <Digit>

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 16

<CardinalNumber> ::= <Digit> | <Digit><CardinalNumber>

Is 123 a <CardinalNumber> ?

Is it a <Digit> ?

Certainly not

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 17

Is 123 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 23 a <CardinalNumber> ?

<CardinalNumber> ::= <Digit> | <Digit><CardinalNumber>

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 18

Is 123 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 23 a <CardinalNumber> ?

Is it a <Digit> ?

Certainly not

<CardinalNumber> ::= <Digit> | <Digit><CardinalNumber>

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 19

Is 123 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 23 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 3 a <CardinalNumber> ?

<CardinalNumber> ::= <Digit> | <Digit><CardinalNumber>

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 20

Is 123 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 23 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 3 a <CardinalNumber> ?

Is it a <Digit> ?

YES

<CardinalNumber> ::= <Digit> | <Digit><CardinalNumber>

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 21

Is 123 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 23 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 3 a <CardinalNumber> ?

Is it a <Digit> ?

YES

As a consequence, 3 is a <CardinalNumber>

<CardinalNumber> ::= <Digit> | <Digit><CardinalNumber>

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 22

Is 123 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 23 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 3 a <CardinalNumber> ?

Is it a <Digit> ?

YES

As a consequence, 3 is a <CardinalNumber>

As a consequence, 23 is a <CardinalNumber>

<CardinalNumber> ::= <Digit> | <Digit><CardinalNumber>

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 23

Is 123 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 23 a <CardinalNumber> ?

Is it a <Digit> followed by a <CardinalNumber> ?

Is 3 a <CardinalNumber> ?

Is it a <Digit> ?

YES

As a consequence, 3 is a <CardinalNumber>

As a consequence, 23 is a <CardinalNumber>

As a consequence, 123 is a <CardinalNumber>

<CardinalNumber> ::= <Digit> | <Digit><CardinalNumber>

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 24

<Identifier> ::= <Letter> | <Identifier><Letter> | <Identifier>

<Digit>

• Correct identifiers– Length, Width, Cost, ...– MySalary, NumberOfStudents, Year1, …– X1, Y2, A1, A5, …

• Incorrect identifiers– My Salary, Number-of-students, …

– 1stYear, ...

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 25

<Identifier> ::= <Letter> | <Identifier><Letter> | <Identifier>

<Digit>

• Correct identifiers– Length, Width, Cost, ...– MySalary, NumberOfStudents, Year1, …– X1, Y2, A1, A5, …

• Incorrect identifiers– My Salary, Number-of-students, …

– 1stYear, ...

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 26

Syntax Definition

BNFNon-recursive

BNFSyntax

diagram

Definition

Choice

0 or 1occurrence

0, 1 or manyoccurrences

::= ::= Diagram

[]

{}

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 27

Syntax Definition

BNFNon-recursive

BNFSyntax

diagram

Definition

Choice

0 or 1occurrence

0, 1 or manyoccurrences

::= ::= Diagram

[ ]

{}

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 28

<UpperCaseLetter> ::= A|B|C|D|E| |X|Y|Z

<LowerCaseLetter> ::= a|b|c|d|e| |x|y|z

<Letter> ::= <UpperCaseLetter> | <LowerCaseLetter>

<Digit> ::= 1|2|3|4|5|6|7|8|9|0

<CardinalNumber> ::= <Digit> {<Digit>}

<IntegerNumber> ::= [+|-]<CardinalNumber>

<Identifier> ::= <Letter> {<Letter>|<Digit>}

BNF Examples (2)

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 29

Backus Naur Formalism (BNF)

• Terminal Symbols

• Non-terminal Symbols

• Metalinguistic expression– Railroad diagrams with semaphores requiring specific

symbols to grant passage.– The defined non-terminal symbol leaves all its symbols, in

the order of occurrence, at appropriate semaphores and reaches the exit with none left.

Terminal symbol

Non-terminal symbol

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 30

Syntax Definition

BNFNon-recursive

BNFSyntax

diagram

Definition

Choice

0 or 1occurrence

0, 1 or manyoccurrences

::= ::= Diagram

[]

{}

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 31

Syntax DiagramsExamples

•UpperCaseLetter

A B C D E V W X Y Z

•Letter

•LowerCaseLetter

a b c d e v w x y z

UpperCaseLetter

LowerCaseLetter

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 32

Syntax DiagramsExamples

Digit

0 1 2 3 4 5 6 7 8 9

CardinalNumber<CardinalNumber> ::= <Digit> {<Digit>}

<Digit> ::= 0|1|2|3|4|5|6|7|8|9

Digit

Digit

Digit

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 33

Syntax DiagramsExamples

IntegerNumber

<IntegerNumber> ::= [ + | - ] <CardinalNumber>

CardinalNumber+

-

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 34

Syntax DiagramsExamples

Identifier

<Identifier> ::= <Letter> {<Letter>|<Digit>}

Letter

Digit

Letter

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 35

Source Code (HLL)

The COMPILER

Object Code

HARDWARE

COMPILER = Lexical analyzerSyntax analyzerCode generatorCode optimizer

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 36

The Lexical Analyzer

• Recognizes lexical tokens such as:

– Identifiers

– Numbers :

• -200, 6.3E23, …

– Reserved words :

• for; if;

– Multi-character symbols :

• /*; */; == ; != ; ...

• Prepares the symbol table with all identifiers

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 37

The Syntax Analyzer

(= syntax parser)• Recognizes non-terminal symbols such as:

– a program :– a variable declaration :– a function declaration :– an expression

• Can be generated automatically by a parser generator, starting from the BNF syntax definitions

• Represents a program by a syntactical tree and a symbol table.

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 38

Error detection and correction

• Both the lexical and syntactical analyzer should check the source code against syntax errors.

• When an error has been found, the syntax analyzer should– generate an error message and stopor– generate an error message – try to correct by guessing the programmers intentions– resume the syntax analysis

• A compiler should never generate any code as long as syntax errors are present in the source code, even if the syntax analyzer has corrected them in order to continue the analysis.

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 39

Multi-pass compiler

Source

Object

Lexical analysis

SymboltableInt.1

Int.1

Int.1

Syntax analysis

Code generation

Optimization

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 40

Single - pass compiler

Source

Object

SymboltableSyntax analysis

Code generation

Lexical analysis

©J.Tiberghien - ULB-VUB©J.Tiberghien - ULB-VUBVersion 2003-2004 41

Interpreters

Source

SymboltableSyntax analysis

Simulated code execution

Lexical analysis

top related