66
CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

Embed Size (px)

Citation preview

Page 1: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB 314

Programming Language

Department of Software Engineering

College of IT

Universiti Tenaga Nasional

Chapter 3

Describing Syntax and Semantics

Page 2: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-2

Chapter 3 Topics

• Introduction• The General Problem of Describing

Syntax• Formal Methods of Describing Syntax• Attribute Grammars• Describing the Meanings of Programs:

Dynamic Semantics

Page 3: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-3

Introduction

• Syntax: the form or structure of the expressions, statements, and program units

• Semantics: the meaning of the expressions, statements, and program units

• Syntax and semantics provide a language’s definition– Users of a language definition

• Other language designers• Implementers• Programmers (the users of the language)

Page 4: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-4

The General Problem of Describing Syntax: Terminology

• A sentence is a string of characters over some alphabet

• A language is a set of sentences• A lexeme is the lowest level syntactic unit

of a language (e.g., *, sum, begin)• A token is a category of lexemes (e.g.,

identifier)

Page 5: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-5

e.g. lexemes & token

index = 2 * count + 17;

Lexemes TokenIndex identifier= equal_sign2 int_literal* mult_opcount identifier+ plus_op17 int_literal; semicolon

Page 6: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-6

Formal Definition of Languages

• In general, language can be defined in 2 distinct ways– Recognizers

• A recognition device reads input strings of the language and decides whether the input strings belong to the language

• R(∑)= L?• Example: syntax analysis part of a compiler• Detailed discussion in Chapter 4

– Generators• A device that generates sentences of a language• One can determine if the syntax of a particular

sentence is correct by comparing it to the structure of the generator

Page 7: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-7

Formal Methods of Describing Syntax• Backus-Naur Form and Context-Free

Grammars– Most widely known method for describing

programming language syntax

• Extended BNF– Improves readability and writability of BNF

• Grammars and Recognizers

Page 8: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-8

BNF and Context-Free Grammars

• Context-Free Grammars– Developed by Noam Chomsky in the mid-

1950s– Language generators, meant to describe the

syntax of natural languages– Define a class of languages called context-free

languages

Page 9: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-9

Backus-Naur Form (BNF)

• Backus-Naur Form (1959)– Invented by John Backus to describe Algol 58– BNF is equivalent to context-free grammars – BNF is a metalanguage used to describe another

language– In BNF, abstractions are used to represent

classes of syntactic structures--they act like syntactic variables (also called nonterminal symbols) e.g. :

abstraction of a JAVA statement : <assign>actual definition :

<assign> -> <var> = <expression>

Page 10: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-10

BNF Fundamentals

• Non-terminals: BNF abstractions• Terminals: lexemes and tokens• Grammar: a collection of rules

– Examples of BNF rules:<ident_list> → identifier | identifier, <ident_list>

<if_stmt> → if <logic_expr> then <stmt>

* Symbol | meaning logical OR

Page 11: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-11

BNF Rules

• A rule has a left-hand side (LHS) and a right-hand side (RHS), and consists of terminal and nonterminal symbols

• A grammar is a finite nonempty set of rules

• An abstraction (or nonterminal symbol) can have more than one RHS

<stmt> <single_stmt> | begin <stmt_list> end

Page 12: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-12

Describing Lists

• Syntactic lists are described using recursion ( a rule is recursive if LHS appears in RHS)

<ident_list> ident | ident, <ident_list>

• A derivation is a repeated application of rules, starting with the start symbol and ending with a sentence (all terminal symbols)

Page 13: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-13

An Example Grammar

<program> begin <stmt_list> end<stmts_list> <stmt>

| <stmt>; <stmt_list>

<stmt> <var> = <expression><var> A | B | C <expression> <var> + <var>

| <var> - <var>

| <var>

Page 14: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-14

Derivation

• Every string of symbols in the derivation is a sentential form

• A sentence is a sentential form that has only terminal symbols

• A leftmost derivation is one in which the leftmost nonterminal in each sentential form is the one that is expanded

• A derivation may be neither leftmost nor rightmost

Page 15: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-15

An Example Derivation

<program>

=> begin <stmt_list> end

=> begin <stmt>; <stmt_list> end

=> begin <var> = <expression>; <stmt_list> end

=> begin A = <expression>; <stmt_list> end

=> begin A = B + <var>; <stmt_list> end

=> begin A = B + C; <stmt> end

=> begin A = B + C; <var> = <expression> end

=> begin A = B + C; B = <expression> end

=> begin A = B + C; B = <var> end

=> begin A = B + C; B = C end

Page 16: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-16

Exercise

• Create a derivation from this grammar

<assign> -> <id> = <expr>

<id> -> A | B | C

<expr> -> <id> + <expr>

|<id> * <expr>

| ( <expr> )

|<id>

Page 17: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-17

Leftmost derivation

<assign> => <id> = <expr>=> A = <expr>=> A = <id> * <expr>=> A = B * <expr>=> A = B * ( <expr>)=> A = B * (<id> + <expr>)=> A = B * ( A + <expr>)=> A = B * ( A + <id>)=> A = B * ( A + C )

Page 18: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-18

Parse Tree

• A hierarchical representation of a derivation

• Every internal node of a parse tree is labeled with a nonterminal symbol; every leaf is labeled with a terminal symbol

• Every subtree of a parse tree describes one instance of an abstraction in the sentence

Page 19: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-19

Parse Tree

Page 20: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-20

Ambiguity in Grammars

• A grammar is ambiguous if and only if it generates a sentential form that has two or more distinct parse trees

Page 21: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-21

Ambiguity in Grammars

Page 22: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-22

An Ambiguous Expression Grammar

<expr> <expr> <op> <expr> | const<op> / | -

<expr>

<expr> <expr>

<expr> <expr>

<expr>

<expr> <expr>

<expr> <expr>

<op>

<op>

<op>

<op>

const const const const const const- -/ /

<op>

Page 23: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-23

An Unambiguous Expression Grammar

• If we use the parse tree to indicate precedence levels of the operators, we cannot have ambiguity

<expr> <expr> - <term> | <term><term> <term> / const| const

<expr>

<expr> <term>

<term> <term>

const const

const/

-

Page 24: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-24

Page 25: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-25

Associativity of Operators

• Operator associativity can also be indicated by a grammar

<expr> -> <expr> + <expr> | const (ambiguous)<expr> -> <expr> + const | const (unambiguous)

<expr><expr>

<expr>

<expr> const

const

const

+

+

Page 26: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-26

Extended BNF

• Optional parts are placed in brackets [ ]<proc_call> -> ident [(<expr_list>)]

• Alternative parts of RHSs are placed inside parentheses and separated via vertical bars <term> → <term> (+|-) const

• Repetitions (0 or more) are placed inside braces { }<ident> → letter {letter|digit}

Page 27: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-27

BNF and EBNF

• BNF <expr> <expr> + <term> | <expr> - <term> | <term> <term> <term> * <factor> | <term> / <factor> | <factor>

• EBNF <expr> <term> {(+ | -) <term>} <term> <factor> {(* | /) <factor>}

Page 28: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-28

Attribute Grammars

• Context-free grammars (CFGs) cannot describe all of the syntax of programming languages

• Additions to CFGs to carry some semantic info along parse trees

• Primary value of attribute grammars (AGs)– Static semantics specification– Compiler design (static semantics checking)

Page 29: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-29

Attribute Grammars : Definition

• An attribute grammar is a context-free grammar G, with the following additions:– For each grammar symbol x there is a set A(x)

of attribute values– Each rule has a set of attribute computation

functions which associated with grammar rules, used to specify how attribute values are computed.

– Each rule has a (possibly empty) set of predicates function to check for attribute consistency – static semantic rules of the language

Page 30: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-30

Attribute Grammars: Definition

• A(X) is a set of attributes that associated with grammar symbol X. A(X) consist of S(X) and I(X)

• Let X0 X1 ... Xn be a grammar rule

• Functions of the form S(X0) = f(A(X1), ... , A(Xn)) define synthesized attributes

• Functions of the form I(Xj) = f(A(X0), ... , A(Xn)), for i <= j <= n, define inherited attributes

• Initially, there are intrinsic attributes on the leaves

• Predicate function has the form of Boolean expression

Page 31: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-31

Attribute Grammars: An Example

• Syntax<assign> -> <var> = <expr>

<expr> -> <var> + <var>

| <var>

<var> -> A | B | C

• actual_type: synthesized for <var> and <expr>

• expected_type: inherited for <expr>

Page 32: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-32

Attribute Grammar (continued)

• Syntax rule: <expr> <var>[1] + <var>[2]Semantic rules: <expr>.actual_type <var>[1].actual_type

Predicate: <var>[1].actual_type == <var>[2].actual_type

<expr>.expected_type == <expr>.actual_type

• Syntax rule: <var> id Semantic rule:<var>.actual_type lookup (<var>.string)

Page 33: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-33

Attribute Grammars (continued)

<var>.actual_type look-up(A) (rule 4)

<expr>.expected_type <var>.actual_type (rule 1)

<var>[2].actual_type lookup (A) (rule 4)

<var>[3].actual_type lookup (B) )(rule 4)

<expr>.actual_type either int or real (rule 2)

<expr>.expected_type == <expr>.actual_type is either TRUE or FALSE (rule 2)

Page 34: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-34

Attribute Grammars: An Example

Page 35: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-35

Attribute Grammars (continued)

• How are attribute values computed?– If all attributes were inherited, the tree could

be decorated in top-down order.– If all attributes were synthesized, the tree

could be decorated in bottom-up order.– In many cases, both kinds of attributes are

used, and it is some combination of top-down and bottom-up that must be used.

Page 36: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-36

Attribute Grammars (continued)

<assign>

<var> <var>[2] <var>[3]

A A=B+

<expr>

actual_type actual_type actual_type

actual_typeexpected_type

Page 37: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-37

Attribute Grammars (continued)

<assign>

<var> <var>[2] <var>[3]

A A=B+

<expr>

actual_type= real_type actual_type actual_type

actual_typeexpected_type

actual_type= real_type

actual_type= int_type

expected_type=real_typeactual_type= real_type

Page 38: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-38

Dynamic Semantics(Semantics)

• Describing syntax is relatively simple • There is no single widely acceptable notation or

formalism for describing semantics• If there were a precise semantics specification of a

programming language, programs written in the language potentially could be proven correct without testing, correctness of compilers could be verified.

• Operational Semantics– Describe the meaning of a program by executing its

statements on a machine, either simulated or actual. The change in the state of the machine (memory, registers, etc.) defines the meaning of the statement

• Axiomatic Semantics– Using mathematical and logic approach.

Page 39: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-39

Operational Semantics

• To describe the meaning of a statement or program by specifying the effects of running it on a machine.

• Machine language shows sequence of changes in state, but problems to be used as formal description:– Too small and too numerous of individual

steps in machine language– Too large and complex storage architecture

Page 40: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-40

Operational Semantics (continued)

• A better alternative: A complete computer simulation using intermediate language (machine language is too low level, high level langauge is obviously not suitable)

• The process:– Build a translator (translates source code to the

machine code of an idealized computer)– Build a simulator for the idealized computer

• Evaluation of operational semantics:– Good if used informally (language manuals, etc.)– Extremely complex if used formally (e.g., VDL), it

was used for describing semantics of PL/I.

Page 41: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-41

Operational Semantics (continued)• Provides an effective means of describing

semantics for language users and language implementers – as long as the descriptions are kept simple and informal.

• Depends on programming language of lower level, not mathematics – the statement of one programming language are described in terms of the statements of a lower-level programming language.

• At highest level, use with interest in the final result(natural ops. Semantics).

• At lowest level, to determine the precise meaning of program (structural ops. Semantics)

Page 42: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-42

Operational Semantics (continued)• C statement

for ( expr1; expr2; expr3) {…;…;

}

Meaning :expr1;

loop : if expr2 == 0 goto out…expr3;goto loop

out : …

Page 43: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-43

Axiomatic Semantics• Based on formal malogic (predicate calculus)• Original purpose: formal program verification – to

prove the correctness of programs.• The meaning of a program is based on

relationships among program variables and constants, which are same for every execution of the program.

• Axioms or inference rules are defined for each statement type in the language (to allow transformations of expressions to other expressions)

• The expressions are called assertions

Page 44: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-44

Axiomatic Semantics (continued)

• An assertion before a statement (a precondition) states the relationships and constraints among variables that are true at that point in execution

• An assertion following a statement is a postcondition

• A weakest precondition is the least restrictive precondition that will guarantee the postcondition

Page 45: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-45

Axiomatic Semantics Form

• Pre-, post form: {P} statement {Q}

• An example– a = b + 1 {a > 1}– One possible precondition: {b > 10}– Weakest precondition: {b > 0}

Page 46: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-46

Program Proof Process

• The postcondition for the entire program is the desired result– Work back through the program to the first

statement. If the precondition on the first statement is the same as the program specification, the program is correct.

Page 47: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-47

Axiomatic Semantics: Axioms

• Axiom – a logical statement that is assumed to be true

• Inference rule – a method of inferring the truth of on assertion on the basis of the values of other assertions.

• An axiom for assignment statements (x = E): {Qx->E} x = E {Q}

• The Rule of Consequence:

}{Q' S }{P'

Q' Q P, P' {Q}, S {P}

Page 48: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-48

Axiomatic Semantics: Axioms

• An inference rule for sequences{P1} S1 {P2}{P2} S2 {P3}

– antecedent - consequent

If antecedent are true, then truth of consequent can be inferred

{P3} S2 S1; {P1}{P3} S2 {P2} {P2}, S1 {P1}

Page 49: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-49

Axiomatic Semantics: Axioms

• An inference rule for selectionif B then S1 else s2

– antecedent - consequent

The selection statement must be proven for both when the boolean expression is true and false.

We need a precondition P that can be used in the precondition of both the then and else clause.

{Q} S2 else S1 then B if {P}{Q} S2 P} and B){(not {Q}, S1 P} and {B

Page 50: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-50

Axiomatic Semantics: Axioms

Exampleif X >0 then

y= y - 1else

y= y + 1

Suppose Q is {y > 0}

Page 51: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-51

Axiomatic Semantics: Axioms

• An inference rule for logical pretest loops

{P} while B do S end {Q}

where I is the loop invariant (the inductive hypothesis)

B)}(not and {I S do B while{I}

{I} S B) and (I

Page 52: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-52

Axiomatic Semantics: Axioms

• Characteristics of the loop invariant: I must meet the following conditions:– P => I -- the loop invariant must be true initially

– {I} B {I} -- evaluation of the Boolean must not change the validity of I

– {I and B} S {I} -- I is not changed by executing the body of the loop

– (I and (not B)) => Q -- if I is true and B is false, is implied

– The loop terminates

Page 53: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-53

Loop Invariant

• The loop invariant I is a weakened version of the loop postcondition, and it is also a precondition.

• I must be weak enough to be satisfied prior to the beginning of the loop, but when combined with the loop exit condition, it must be strong enough to force the truth of the postcondition

Page 54: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-54

Evaluation of Axiomatic Semantics

• Developing axioms or inference rules for all of the statements in a language is difficult

• It is a good tool for correctness proofs, and an excellent framework for reasoning about programs, but it is not as useful for language users and compiler writers

• Its usefulness in describing the meaning of a programming language is limited for language users or compiler writers

Page 55: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-55

Denotational Semantics

• Based on recursive function theory• The most abstract semantics description

method• Originally developed by Scott and

Strachey (1970)

Page 56: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-56

Denotational Semantics (continued)• The process of building a denotational

specification for a language Define a mathematical object for each language entity– Define a function that maps instances of the

language entities onto instances of the corresponding mathematical objects

• The meaning of language constructs are defined by only the values of the program's variables

Page 57: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-57

Denotation Semantics vs Operational Semantics

• In operational semantics, the state changes are defined by coded algorithms

• In denotational semantics, the state changes are defined by rigorous mathematical functions

Page 58: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-58

Denotational Semantics: Program State

• The state of a program is the values of all its current variables

s = {<i1, v1>, <i2, v2>, …, <in, vn>}

• Let VARMAP be a function that, when given a variable name and a state, returns the current value of the variable

VARMAP(ij, s) = vj

Page 59: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-59

Decimal Numbers

<dec_num> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9| <dec_num> (0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9)

Mdec('0') = 0, Mdec ('1') = 1, …, Mdec ('9') = 9

Mdec (<dec_num> '0') = 10 * Mdec (<dec_num>)

Mdec (<dec_num> '1’) = 10 * Mdec (<dec_num>) + 1…

Mdec (<dec_num> '9') = 10 * Mdec (<dec_num>) + 9

Page 60: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-60

Expressions

• Map expressions onto Z {error}• We assume expressions are decimal

numbers, variables, or binary expressions having one arithmetic operator and two operands, each of which can be an expression

Page 61: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-61

3.5 Semantics (cont.)Me(<expr>, s) = case <expr> of <dec_num> => Mdec(<dec_num>, s) <var> => if VARMAP(<var>, s) == undef then error else VARMAP(<var>, s) <binary_expr> => if (Me(<binary_expr>.<left_expr>, s) == undef OR Me(<binary_expr>.<right_expr>, s) = undef) then error

else if (<binary_expr>.<operator> == ‘+’ then Me(<binary_expr>.<left_expr>, s) + Me(<binary_expr>.<right_expr>, s) else Me(<binary_expr>.<left_expr>, s) * Me(<binary_expr>.<right_expr>, s)...

Page 62: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-62

Assignment Statements

• Maps state sets to state sets

Ma(x := E, s) = if Me(E, s) == error then error else s’ =

{<i1’,v1’>,<i2’,v2’>,...,<in’,vn’>}, where for j = 1, 2, ..., n,

vj’ = VARMAP(ij, s) if ij <> x

= Me(E, s) if ij == x

Page 63: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-63

Logical Pretest Loops

• Maps state sets to state sets

Ml(while B do L, s) =

if Mb(B, s) == undef

then error

else if Mb(B, s) == false

then s

else if Msl(L, s) == error

then error

else Ml(while B do L, Msl(L, s))

Page 64: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-64

Loop Meaning

• The meaning of the loop is the value of the program variables after the statements in the loop have been executed the prescribed number of times, assuming there have been no errors

• In essence, the loop has been converted from iteration to recursion, where the recursive control is mathematically defined by other recursive state mapping functions

• Recursion, when compared to iteration, is easier to describe with mathematical rigor

Page 65: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-65

Evaluation of Denotational Semantics

• Can be used to prove the correctness of programs

• Provides a rigorous way to think about programs

• Can be an aid to language design• Has been used in compiler generation

systems • Because of its complexity, they are of

little use to language users

Page 66: CCSB 314 Programming Language Department of Software Engineering College of IT Universiti Tenaga Nasional Chapter 3 Describing Syntax and Semantics

CCSB314 Programming Language 1-66

Summary

• BNF and context-free grammars are equivalent meta-languages– Well-suited for describing the syntax of

programming languages

• An attribute grammar is a descriptive formalism that can describe both the syntax and the semantics of a language

• Three primary methods of semantics description– Operation, axiomatic, denotational (others:

• Domain theory and fixed point, Algebraic, Action & Translational Semantics