Loading in 5 sec....

Chapter 3 Syntax Part 1PowerPoint Presentation

Chapter 3 Syntax Part 1

- 114 Views
- Uploaded on
- Presentation posted in: General

Chapter 3 Syntax Part 1

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Chapter 3Syntax Part 1

CMSC 331

Shon Vick

- Syntax - the form or structure of the expressions – whether an expression is well formed
- Semantics – the meaning of an expression

- Syntax almost always expressed using some variant of a notation called a context-free grammar (CFG) or simply grammar
- BNF
- EBNF
- Syntax Graph

- A set of tokens (lexemes), known as terminal symbols
- A set of non-terminals
- A set of rules (productions) where each production consists of a left-hand side (LHS) and a right-hand side (RHS) The LHS is a non-terminal and the RHS is a sequence of terminals and/or non-terminal symbols.
- A special non-terminal symbol designated as the start symbol

<r> ::= <ds> . <ds>

<ds> ::= <d> | <d> <ds>

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

< > encloses non-terminal symbols

::= 'is' or 'is made up of ' or 'derives'

(sometimes denoted with an arrow ->)

| or

- On the example from the previous slide:
- What are the tokens?
- What are the lexemes?
- What are the non terminals?
- What are the productions?

- A non terminal can have more than RHS or an OR can be used
- Lists or sequences are expressed via recursion
- A derivation is just a repeated set of production (rule) applications
- Examples

<program> -> <stmts>

<stmts> -> <stmt> | <stmt> ; <stmts>

<stmt> -> <var> = <expr>

<var> -> a | b | c | d

<expr> -> <term> + <term> |

<term> - <term>

<term> -> <var> | const

<program> => <stmts> => <stmt>

=> <var> = <expr> => a = <expr>

=> a = <term> + <term>

=> a = <var> + <term>

=> a = b + <term>

=> a = b + const

- Alternative representation for a derivation
- Example parse tree for the previous example

stmts

stmt

expr

var

=

term

term

+

a

var

const

b

PS -> P |

P PS

P -> e |

'(' PS ')' |

'<' PS '>' |

'[' PS ']'

What’s the parse

tree for this statement ?

< [ ] [ < > ] >

- Two parse trees for the same expression
- Consider the following grammar

string -> string + string |

string - string

digit -> 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

What are the two trees for 9 - 5 + 2

- Like BNF except that
- Non-terminals start w/ uppercase
- Parens are used for grouping terminals
- Braces {} represent zero or more occurrences (iteration )
- Brackets [] represent an optional construct , that is a construct that appears either once or not at all.

Exp -> Term { ('+' | '-') Term }

Term -> Factor { ('*' | '/') Factor }

Factor -> '(' Exp ')' | variable | constant

- EBNF and BNF are equivalent
- How can {} be expressed in BNF?
- How can ( ) be expressed?
- How can [ ] be expressed?

Terminal in circles

nonterminals in rectangles;

Syntax Graphs - put the terminals in circles or

ellipses and put the nonterminals in rectangles;

connect with lines with arrowheads

e.g., Pascal type declarations

type_identifier

( identifier )

,

constant .. constant

- An easy way to build a parser
- Example
- Does work in the face of left recursion
- Purge left recursion