Chapter 3 Syntax Part 1

1 / 17

Chapter 3 Syntax Part 1 - PowerPoint PPT Presentation

Chapter 3 Syntax Part 1. CMSC 331 Shon Vick. Syntax and Semantics. Syntax - the form or structure of the expressions – whether an expression is well formed Semantics – the meaning of an expression. Syntactic Structure.

I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.

PowerPoint Slideshow about ' Chapter 3 Syntax Part 1' - calix

An Image/Link below is provided (as is) to download presentation

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 - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript

Chapter 3Syntax Part 1

CMSC 331

Shon Vick

Syntax and Semantics
• Syntax - the form or structure of the expressions – whether an expression is well formed
• Semantics – the meaning of an expression
Syntactic Structure
• Syntax almost always expressed using some variant of a notation called a context-free grammar (CFG) or simply grammar
• BNF
• EBNF
• Syntax Graph
A CFG has 4 parts
• 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
An example of BNF syntax for real numbers

<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

Example
• On the example from the previous slide:
• What are the tokens?
• What are the lexemes?
• What are the non terminals?
• What are the productions?
BNF Points
• 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
Example Grammar

<program> -> <stmts>

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

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

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

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

<term> - <term>

<term> -> <var> | const

Example Derivation

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

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

=> a = <term> + <term>

=> a = <var> + <term>

=> a = b + <term>

=> a = b + const

Parse Trees
• Alternative representation for a derivation
• Example parse tree for the previous example

stmts

stmt

expr

var

=

term

term

+

a

var

const

b

Parse Trees

PS -> P |

P PS

P -> e |

\'(\' PS \')\' |

\'<\' PS \'>\' |

\'[\' PS \']\'

What’s the parse

tree for this statement ?

< [ ] [ < > ] >

Ambiguity
• 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

EBNF - Extended BNF
• 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.
EBNF example

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

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

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

EBNF/BNF
• EBNF and BNF are equivalent
• How can {} be expressed in BNF?
• How can ( ) be expressed?
• How can [ ] be expressed?
Syntax Graphs

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

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