Einfhrung in die Programmierung Introduction to Programming Prof. - - PowerPoint PPT Presentation

einf hrung in die programmierung introduction to
SMART_READER_LITE
LIVE PREVIEW

Einfhrung in die Programmierung Introduction to Programming Prof. - - PowerPoint PPT Presentation

Chair of Software Engineering Einfhrung in die Programmierung Introduction to Programming Prof. Dr. Bertrand Meyer Michela Pedroni Lecture 11: Describing the Syntax Goals of todays lecture Learn about languages that describes other


slide-1
SLIDE 1

Chair of Software Engineering

Einführung in die Programmierung Introduction to Programming

  • Prof. Dr. Bertrand Meyer

Michela Pedroni

Lecture 11: Describing the Syntax

slide-2
SLIDE 2

2

Goals of today’s lecture

Learn about languages that describes other languages Read and understand the syntax description for Eiffel Write simple syntax descriptions

slide-3
SLIDE 3

3

Syntax: Conditional

A conditional instruction consists, in order, of: An “If part”, of the form if condition. A “Then part” of the form then compound. Zero or more “Else if parts”, each of the form elseif condition then compound. Zero or one “Else part” of the form else compound The keyword end. Here each condition is a boolean expression, and each compound is a compound instruction.

slide-4
SLIDE 4

4

Why describe the syntax formally?

We know syntax descriptions for human languages:

  • e.g. grammar for German, French, …
  • Expressed in natural language
  • Good enough for human use
  • Ambiguous, like human languages themselves
slide-5
SLIDE 5

5

The power of human mind

I cdnoult blvelee taht I cluod aulacity uesdnatnrd waht I was rdgnieg. The Paomnnehal Pweor of the Hmuan Mnid Aoccdrnig to a rscheearch at Cmabrigde Uinervtisy, is deosn't mttaer in waht oredr the ltteers in a wrod are, the olny iprmoatnt tihng is taht the frist and lsat ltteer be in the rghit pclae. The rset can be a taotl mses and you can sitll raed it wouthit any porbelm. Tihs is bcuseae the huamn mnid deos not raed ervey lteter by istlef, but the wrod as a wlohe. Ptrety Amzanig Huh?

slide-6
SLIDE 6

6

Why describe the syntax formally?

Programming languages need better descriptions:

  • More precise: must tell us unambiguously whether

given program text is legal or not

  • Use formalism similar to mathematics
  • Can be fed into compilers for automatic processing
  • f programs
slide-7
SLIDE 7

7

Why describe the syntax formally?

Compilers use algorithms to Determine if input is correct program text (parser) Analyze program text to extract specimens for abstract syntax tree Translate program text to machine instructions Compilers need strict formal definition of programming language

slide-8
SLIDE 8

8

Formal Description of Syntax

Use formal language to describe programming languages. Languages used to describe other languages are called Meta-Languages Meta-Language used to describe Eiffel: BNF-E (Variant of the Backus-Naur-Form, BNF)

slide-9
SLIDE 9

9

History

1954 FORTRAN: First widely recognized programming language (developed by John Backus et Al.) 1958 ALGOL 58: Joint work of European and American groups 1960 ALGOL 60: Preparation showed a need for a formal description  John Backus (member of ALGOL team) proposed Backus-Normal-Form (BNF) 1964: Donald Knuth suggested acknowledging Peter Naur for his contribution  Backus-Naur-Form Many variants since then, e.g. graphical variant by Niklaus Wirth

slide-10
SLIDE 10

10

Formal description of a language

BNF lets us describe syntactical properties of a language Remember: Description of a programming language also includes lexical and semantic properties  other tools

slide-11
SLIDE 11

11

Formal Description of Syntax

A language is a set of phrases A phrase is a finite sequence of tokens from a certain “vocabulary” Not every possible sequence is a phrase of the language A grammar specifies which sequences are phrases and which are not BNF is used to define a grammar for a programming language

slide-12
SLIDE 12

12

Example of phrases

class PERSON feature age: INTEGER

  • - Age

end class age: INTEGER

  • - Age

end PERSON feature

slide-13
SLIDE 13

13

Grammar

Definition A Grammar for a language is a finite set of rules for producing phrases, such that:

  • 1. Any sequence obtained by a finite number of

applications of rules from the grammar is a phrase

  • f the language.
  • 2. Any phrase of the language can be obtained by a

finite number of applications of rules from the grammar.

slide-14
SLIDE 14

14

Elements of a grammar: Terminals

Terminals Tokens of the language that are not defined by a production of the grammar. E.g. keywords from Eiffel such as if, then, end

  • r symbols such as the semicolon “;” or the

assignment “:=”

slide-15
SLIDE 15

15

Elements of a grammar: Nonterminals

Nonterminals Names of syntactical structures or substructures used to build phrases.

slide-16
SLIDE 16

16

Elements of a grammar: Productions

Productions Rules that define nonterminals of the grammar using a combination of terminals and (other) nonterminals

slide-17
SLIDE 17

17

An example production

Terminal Nonterminal Production Conditional: if else end then Condition Instruction Instruction

slide-18
SLIDE 18

18

BNF Elements: Concatenation

Graphical representation: BNF: A B Meaning: A followed by B

A B

slide-19
SLIDE 19

19

Graphical representation: BNF: [ A ] Meaning: A or nothing

BNF Elements: Optional A

slide-20
SLIDE 20

20

Graphical representation: BNF: A | B Meaning: either A or B

BNF Elements: Choice A B

slide-21
SLIDE 21

21

Graphical representation: BNF: { A }* Meaning: sequence of zero or more A

BNF Elements: Repetition A

slide-22
SLIDE 22

22

Graphical representation: BNF: { A }+ Meaning: sequence of one or more A

BNF Elements: Repetition, once or more A

slide-23
SLIDE 23

23

BNF elements: Overview A

Repetition (at least once): { A }+ Repetition (zero or more): { A }*

A

Choice: A | B

A B A

Optional: [ A ]

A B

Concatenation: A B

slide-24
SLIDE 24

24

A simple example

digit digit float_number: digit: Example phrases: .76

  • .76

1.56 12.845

  • 1.34

13.0 Translate it to written form! 1 2 3 4 5 6 7 8 9

  • .
slide-25
SLIDE 25

25

A simple example

written in BNF:

[ ] { }* { }+

float_number digit

| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

  • digit

. digit

= =

slide-26
SLIDE 26

26

BNF Elements Combined

written in BNF: Conditional: if else end then condition instruction instruction

[

instruction instruction else end if then condition

]

Conditional

=

slide-27
SLIDE 27

27

BNF: Conditional with elseif elseif

Conditional Then_part_list Else_part Then_part_list if end

[ ]

Then_part elseif

}* {

Then_part Then_part Boolean_expression then Compound Else_part else Compound

= = = =

slide-28
SLIDE 28

28

Different Grammar for Conditional

Conditional If_part Then_part Else_list Elseif_part Boolean_expression if If_part Then_part Else_list end Compound then Boolean_expression Then_part elseif Elseif_part Compound

{ ]

else

}* [

= = = = =

slide-29
SLIDE 29

29

Simple BNF example

Sentence I [ don’t ] Verb Names Quant Names Name {and Name}* Name tomatoes | shoes | books | football Verb like | hate Quant a lot | a little Which of the following phrases are correct? I like tomatoes and football I don’t like tomatoes a little I hate football a lot I like shoes and tomatoes a little I don’t hate tomatoes, football and books a lot Rewrite the BNF to include the incorrect phrases

= = = = =

slide-30
SLIDE 30

30

Simple BNF example (Solution)

Which of the following phrases are correct?

  • I like tomatoes and football

 I don’t like tomatoes a little  I hate football a lot  I like shoes and tomatoes a little

  • I don’t hate tomatoes, football and books a lot

Rewrite the BNF to include the incorrect phrases Sentence I [ don’t ] Verb Names [ Quant ] Names Name [{, Name}* and Name] Name tomatoes | shoes | books | football Verb like | hate Quant a lot | a little

= = = = =

slide-31
SLIDE 31

31

BNF-E

Used in official description of Eiffel. Every Production is one of Concatenation A B C [ D ] Choice A B | C | D Repetition A { B terminal ... }* (also with +)

= = =

A [ B { terminal B }* ]

=

slide-32
SLIDE 32

32

BNF-E Rules

  • Every nonterminal must appear on the left-hand side
  • f exactly one production, called its defining

production

  • Every production must be of one kind:

Concatenation, Choice or Repetition

slide-33
SLIDE 33

33

Conditional with elseif elseif (BNF)

Conditional Then_part_list Else_part Then_part_list if end

[ ]

Then_part elseif

}* {

Then_part Then_part Boolean_expression then Compound Else_part else Compound

= = = =

slide-34
SLIDE 34

34

BNF-E: Conditional

Conditional Then_part_list Else_part Then_part_list if end

[ ]

Then_part Boolean_expression then Compound Else_part else Compound elseif

}+ {

Then_part

...

= = = =

slide-35
SLIDE 35

35

Recursive grammars

Constructs may be nested Express this in BNF with recursive grammars Recursion: circular dependency of productions

slide-36
SLIDE 36

36

Conditionals can be nested within conditionals:

Recursive grammars

Else_part else Compound Compound Instruction Instruction

…}* {

... Call Conditional Loop

| | |

;

= = =

slide-37
SLIDE 37

37

Production name can be used in its own definition Definition of Then_part_list with repetition: Recursive definition of Then_part_list:

Recursive grammars

Then_part_list

…}* { Then_part

Then_part_list Then_part elseif

] [

Then_part_list elseif

= =

slide-38
SLIDE 38

38

Conditional

if a = b then a := a - 1 b := b + 1 elseif a > b then a := a + 1 else b := b + 1 end

Conditional Then_part_list Else_part Then_part_list if end [ ] Then_part Boolean_expression then Compound Else_part else Compound elseif }+ { Then_part ...

= = = =

slide-39
SLIDE 39

39

BNF for simple arithmetic expressions

Expr Term { Add_op Term }* Term Factor { Mult_op Factor}* Factor Number | Variable | Nested Nested ( Expr ) Add_op + | – Mult_op * | /

Assume Number is defined as a positive integer number, and Variable is a one-letter alphabetical word. Is this a recursive grammar? How would the same grammar in BNF-E look like? Which of the following phrases are correct? a a + b

  • a + b

a * 7 + b 7 / (3 * 12) – 7 (3 * 7) (5 + a ( 7 * b))

= = = = = =

slide-40
SLIDE 40

40

BNF for simple arithmetic expressions (Solution)

Expr {Term Add_op …}+ Term { Factor Mult_op …}+ Factor Number | Variable | Nested Nested ( Expr ) Add_op + | – Mult_op * | /

Is this a recursive grammar? Yes (see Nested) How would the same grammar in BNF-E look like? (see yellow box below) Which of the following phrases are correct? a  a + b 

  • a + b -

a * 7 + b  7 / (3 * 12) – 7  (3 * 7)  (5 + a ( 7 * b)) -

= = = = = =

slide-41
SLIDE 41

41

Guidelines for Grammars

Keep productions short. easier to read better assessment of language size Conditional if Boolean_expression then Compound { elseif Boolean_expression then Compound }* [ else Compound ] end

=

slide-42
SLIDE 42

42

Guidelines for Grammars

Treat lexical constructs like terminals Identifiers Constant values Identifier Letter {Letter | Digit | "_”}* Integer_constant [-]{Digit}+ Floating_point [-] {Digit}* “." {Digit}+ Letter "A" | "B" | ... | "Z" | "a" | ... | "z" Digit "0" | "1" | ... | "9“

= = = = =

slide-43
SLIDE 43

43

Guidelines for Grammars

Use unambiguous productions. Applicable production can be found by looking at one lexical element at a time Conditional if Then_part_list [ Else_part ] end Compound { Instruction }* Instruction Conditional | Loop | Call | ...

= = =

slide-44
SLIDE 44

44

One more exercise

Define a recursive grammar in BNF-E for boolean expressions with the following description: Simple expressions limited to the variable identifiers x, y,

  • r z, that contain operations of unary not, and binary and,
  • r, and implies together with parentheses.

Valid phrases would include not x and not y (x or y implies z) y or (z) (x)

slide-45
SLIDE 45

45

Solution binary expressions

B_expr ::= With_par | Expr With_par ::= “(” Expr “)” Expr ::= Not_term | Bin_term | Variable Bin_term ::= B_expr Bin_op B_expr Bin_op ::= “implies”| “or” | “and” Not_term ::= “not” B_expr Variable ::= “x” | “y” | “z” Note: Here we are using ::= instead of “x” to denote terminals

=

slide-46
SLIDE 46

46

Writing a Parser

One feature per Production Concatenation: Sequence of feature calls for Nonterminals, checks for Terminals Choice: Conditional with Compound per alternative Repetition: Loop

slide-47
SLIDE 47

47

Writing a Parser: EiffelParse

Automatic generation of abstract syntax tree for phrase Based on BNF-E One class per production Classes inherit from predefined classes AGGREGATE, CHOICE, REPETITION, TERMINAL Feature production defines Production

slide-48
SLIDE 48

48

Writing a Parser: Tools

Yooc: Translates BNF-E to EiffelParse classes Yacc / Bison: Translates BNF to C parser

slide-49
SLIDE 49

49

BNF alike syntax descriptions

DTD: Description of XML documents

<!ELEMENT collection (recipe*)> <!ELEMENT recipe (title, ingredient*,preparation)> <!ELEMENT title (#PCDATA)> <!ELEMENT ingredient (ingredient*,preparation)?> <!ATTLIST ingredient name CDATA #REQUIRED amount CDATA #IMPLIED unit CDATA #IMPLIED> <!ELEMENT preparation (step*)> <!ELEMENT step (#PCDATA)>

slide-50
SLIDE 50

50

BNF alike syntax descriptions

Unix/Linux: Synopsis of commands SYNOPSIS man [-acdfFhkKtwW] [--path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-S section_list] [section] name ...

slide-51
SLIDE 51

51

Eiffel syntax

http://se.ethz.ch/teaching/2007-F/eprog-0001/slides/ eiffel_syntax.pdf http://www.gobosoft.com/eiffel/syntax/

slide-52
SLIDE 52

52

What we have seen

A way to describe syntax: BNF Three variants: BNF, BNF-E, graphical A glimpse into recursion

slide-53
SLIDE 53

53

Exercise

Describe BNF-E with the help of BNF-E. Assume that the lexical constructs Keyword and Symbol (for Terminals) and Identifier (for Nonterminals) are given: Terminal ::= Keyword | Symbol Nonterminal ::= Identifier