©j.tiberghien - ulb-vub version 2003-2004 1 troisième partie chapitre 1 les supports à la...
Post on 29-Dec-2015
214 Views
Preview:
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