Upload
esma
View
42
Download
1
Embed Size (px)
DESCRIPTION
Programming Languages Fundamentals. Cao Hoaøng Truï Khoa Coâng Ngheä Thoâng Tin Ñaïi Hoïc Baùch Khoa TP. HCM. Contact. Trần Giang Sơn [email protected] http://www.cse.hcmut.edu.vn/~tgson. References. - PowerPoint PPT Presentation
Citation preview
1
Programming Languages Fundamentals
Cao Hoaøng Truï
Khoa Coâng Ngheä Thoâng TinÑaïi Hoïc Baùch Khoa TP. HCM
2
Contact
• Trần Giang Sơn
• http://www.cse.hcmut.edu.vn/~tgson
3
References
• Ngôn ngữ lập trình – các mô hình và nguyên lý, Cao Hoàng Trụ, Khoa Khoa học máy tính, Đại học Bách Khoa, 1992
• Programming languages: design and implementation, second edition, Terrence W.Partt, 1990. Printice - Hall International Editions
• Fundamentals of programming languages, Ellis Horowits, 1983, Computer Science Press
4
Contents
• Evolution and classification
• Formal syntax and semantics
• Compilation and interpretation
5
Machine Language
CPU
I/O
Memory
0101001001101011
1101111001001001
0001101010101010
6
Machine Language
Operation Code Operands
Instruction:
10110011010010010011010110110001
7
Assembly Language
A := B + Cif A = 0 then body
MOV r0, B ; move B into register r0ADD r0, C ; addMOV A, r0 ; storeBNE L1 ; branch if result not equal 0body
L1:
8
Language Levels
Natural Language
Machine Language
Low-Level
High-Level
9
What Makes a Good Language?
• Clarity, simplicity, unity of language concepts
• Clarity of program syntax
• Naturalness for the application
• Support for abstraction
• Ease of program verification
10
What Makes a Good Language?
• Programming environment
• Portability of programs
• Cost of use program execution program translation program creation, testing, use program maintenance
11
Language Classification
• Imperative von Neumann Fortran, Pascal, Basic, C object-oriented Smalltalk, Eiffel, C++, Java
• Declarative functional Lisp, ML, Haskell dataflow Id, Val logic Prolog, VisiCalc
12
Von Neumann Languages
• Most familiar and successful
• Imperative statements
• Modification of variables
Fortran, Pascal, Basic, C, …
13
Object-Oriented Languages
• Imperative statements
• Message passing among objects
Smalltalk, Eiffel, C++, Java
14
Functional Languages
• Recursive definition of functions (lambda calculus)
• Expressions of function composition
Lisp, ML, Haskell
15
Logic Languages
• Logical facts and rules (predicate logic)
• Computation as theorem proving
Prolog, VisiCalc
16
Dataflow Languages
• Computation as token flow among nodes
• Inherently parallel model
Id, Val
17
Contents
• Evolution and classification
• Formal syntax and semantics
• Compilation and interpretation
18
Formal Syntax and Semantics
• Computer languages must be precise
• Both their form (syntax) and meaning (semantics) must be specified without ambiguity
• Both programmers and computers can tell what a program is supposed to do
19
Formal Syntax
• Abstract syntax
• Context-free grammars
• Backus-Naur formalism (BNF)
• Syntax diagrams
• Derivations and parse trees
20
Abstract Syntax
• Syntactic class
• Syntactic form
21
Example: Expressions
• Syntactic class:E expressionI identifierC constantO operator
• Syntactic form:E = I | C | E O E | (E)
22
Example: Expressions
a * (2 + b)
E O E
23
Example: Expressions
a - b - c
E O E
24
Abstract Syntax
• Advantage: simple
• Disadvantages:No terminal symbols definedAmbiguous
25
Context-Free Grammars
• Start symbol
• Non-terminals
• Terminals
• Productions A 1 | 2 | … | n
(Noam Chomsky, 1959)
26
Example: Unsigned Integers
6 2 5 7 3
<digit> <unsigned_integer>
27
Example: Unsigned Integers
• Start symbol <unsigned_integer> • Non-terminals <unsigned_integer>, <digit>
• Terminals 0, 1, 2, 3, 4, 5, 6, 7, 8, 9
• Productions<unsigned_integer> <digit> |
<digit> <unsigned_integer>
28
Backus-Naur Formalism
<unsigned_integer> ::= <digit> | <digit> <unsigned_integer>
(John Backus, 1960)
29
Example: Expressions
<factor>
12 * 3 + 4
<term>
30
Example: Expressions
• Start symbol <expression>
• Non-terminals <expression>, <term>, <factor>,
<unsigned_integer>, <term_op>,
<factor_op>
• Terminals 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, +, , *, /
31
Example: Expressions
• Productions:
<expression> <term> | <expression> <term_op> <term>
<term> <factor> | <term> <factor_op> <factor>
<factor> <unsigned_integer> | (<expression>)
<term_op> + |
<factor_op> |
32
Syntax Diagrams
term
expression term_op term
expression
33
Derivations
<expression> <expression> <term_op> <term> <term> + <factor> <term> <factor_op> <factor> + <unsigned_integer> <factor> <unsigned_integer> + 4 <unsigned_integer> 3 + 4 12 3 + 4
34
Parse Trees
<expression>
<expression>
<term_op>
<term>
<term>
<unsigned_integer>
<factor>
<factor_op>
<factor>
<term>
<unsigned_integer>
<unsigned_integer>
<factor>
+
12
3 4
*
35
Parse Trees
<expression>
<expression>
<term_op>
<term>
<term>
<unsigned_integer>
<factor>
<factor_op>
<factor>
<term>
<unsigned_integer>
<unsigned_integer>
<factor>
+
12
3 4
*
36
Formal Semantics
• Operational semantics
• Denotational semantics
• Axiomatic semantics
37
Operational Semantics
• A virtual computer to execute a program.
• A set of formally defined operations to specify how the internal state of the virtual computer may change.
38
Denotational Semantics
• Each program construct is a function that maps an input to an output.
• A program is a composition of functions.
39
Axiomatic Semantics
• The effect of a statement is defined via its precondition and postcondition.
• A set of axioms and rules to define the effect of program constructs.
40
Axiomatic Semantics
{P} S {Q}
precondition
statement
postcondition
41
Axiomatic Semantics
{PxE} x := E {P}
• Axiom:
42
Axiomatic Semantics
{x 2} x := x + 1 {x 3}
E = x + 1P = x > 3PxE = x + 1 > 3 = x > 2
43
Axiomatic Semantics
if ({P} S1 {Q}) ({Q} S2 {R})
then {P} S1 ; S2 {R}
• Rule:
44
Contents
• Evolution and classification
• Formal syntax and semantics
• Compilation and interpretation
45
Compilation and Interpretation
CompilerSource program
Target program
Target programInput Output
InterpreterSource program
Output
Input
46
Compilation and Interpretation
• Interpreter: better flexibility and diagnostics
• Compiler: better performance
47
Phases of CompilationScanner (lexical analysis)
Parser (syntactic analysis)
Semantic analysis
Machine-independentcode optimisation
Target code generation
Machine-specificcode optimization
Character stream
Token stream
Parse tree
Intermediate code
Optimised intermediate code
Target code
Optimised target code
48
Phases of Compilation
Scanner (lexical analysis)
Parser (syntactic analysis)
c := a + b 7
id1 := id2 + id3 7
49
Phases of Compilation
Parser (syntactic analysis)
id1 := id2 + id3 7
:=
id1
id2
id3
+
7
50
Phases of Compilation
Semantic analysis
CNV (7, , t1)
(id3, t1, t2)
+ (id2, t2, t3)
ASS (t3, , id1)
:=
id1
id2
id3
+
7
51
Phases of Compilation
CNV (7, , t1)
(id3, t1, t2)
+ (id2, t2, t3)
ASS (t3, , id1)
Machine-independentcode optimisation
(id3, 7.0, t1)
+ (id2, t1, id1)
52
Phases of Compilation
MOV reg, id3
MUL reg, 7.0
ADD reg, id2
MOV id1, reg
(id3, 7.0, t1)
+ (id2, t1, id1)Target code generation
53
Exercises
• Define a formal syntax for a simple language supporting only the assignment statement and arithmetic expressions.
• Write the derivation and draw the parse tree of ‘c := (a + b) 7’ using the defined syntax.