specifying languages
Download
Skip this Video
Download Presentation
Specifying Languages

Loading in 2 Seconds...

play fullscreen
1 / 17

Specifying Languages - PowerPoint PPT Presentation


  • 68 Views
  • Uploaded on

CS 480/680 – Comparative Languages. Specifying Languages. Specifying a Language. Informal methods Textbooks, tutorials, etc. Formal definitions Needed for exactness Compiler writers, etc. Like technical specifications for design Syntax – what expressions are legal?

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

PowerPoint Slideshow about 'Specifying Languages' - pink


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
specifying a language
Specifying a Language
  • Informal methods
    • Textbooks, tutorials, etc.
  • Formal definitions
    • Needed for exactness
      • Compiler writers, etc.
    • Like technical specifications for design
  • Syntax – what expressions are legal?
  • Semantics – what should they do?

Language Specification

context free grammars
Context Free Grammars
  • Definition: A context-free grammar (CFG) is a 4-tuple, G = (V, , R, S)
    • V = variables, non-terminal symbols
    •  = terminal symbols (alphabet)
    • R = production rules
    • S = start symbol, S  V
  • V, , R, S are all finite

Language Specification

a context free grammar
A Context Free Grammar
  • V = A, B
  •  = (a, b)
  • R = A  aAa A  B B  bBb B  A B  
  • S = A

A  aAa A  aAa

 aaAaa A  aAa

 aaBaa A  B

 aabBbaa B  bBb

 aabbBbbaa B  bBb

 aabbbba B  

What language does this grammar specify?

Language Specification

another example cfg
Another Example CFG
  • V = A
  •  = (a, b)
  • R = A  aAa A  bAb A  a A  b A  
  • S = A

What language does this grammar specify?

Language Specification

more examples
More examples
  • Write a CFG for the following languages:“All strings consisting of one or more a’s, followed by twice as many b’s.”“Strings with more a’s than b’s.”
  • There is an entire class devoted to formal specifications of languages: CS 466/666 – Introduction to Formal Languages

Language Specification

a cfg for integer arithmetic expressions
A CFG for Integer Arithmetic Expressions
  • V = <num>, <digit>, <op>, <expr>
  •  = [(, ), 0…9, , , , ]
  • R = <expr>  <num>  <expr> <op> <expr> (<expr>) <num>  <digit><num> | <digit> <digit>  0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <op>   |  |  | 
  • S = <expr>

Language Specification

derivation of an expression
Derivation of an Expression
  • <expr>  <expr> <op><expr>  (<expr>) <op><expr>  (<expr>) + <expr>  (<expr> <op> <expr>) + <expr>  (<expr>  <expr>) + <expr>  (<num>  <expr>) + <expr>  (<digit><num>  <expr>) + <expr>  (<digit><digit>  <num>) + <expr>  (7<digit>  <num>) + <expr>  (73 <num>) + <expr>  (73 <digit>) + <expr>  (73 4) + <expr> (73 4) + <num> (73 4) + <digit>  (73 4) + 9

Language Specification

parse trees
Parse Trees
  • The derivation of an expression can also be expressed as a tree
  • This parse tree can help to resolve the interpretation of an expression
  • A compiler reads in the source code, and produces a parse tree before generating code.

Language Specification

example parse tree
Example Parse Tree
  • A simple CFG: E  E  E | 0 | 1
  • E  E  E  E  E  E  1 E  E  1 0 E  1 0 1

E

E

E

E

E

E

E

E

E

E

1

1

0

1

0

1

(1 – 0) – 1

1 – (0 – 1)

Since there aretwo parse trees for this expression, the grammar is ambiguous.

(Note: the order of substitution is not the issue.)

Language Specification

ambiguity
Ambiguity
  • If there are two parse trees for any expression, the grammar is syntactically ambiguous
  • Programming languages should be specified by unambiguous grammars
    • Otherwise it is difficult to determine the semantics of a syntactically correct statement
    • a = b + c * d;
    • Conventions (like operator precedence) can be used to clarify syntactically ambiguous grammars

Language Specification

disambiguating a grammar
Disambiguating a grammar
  • We can disambiguate our simple grammar by adding explicit parentheses: E  (E  E) | 0 | 1
  • E  E  E  (E  E) E  (1 E) E  (1 0) E  (1 0) 1
  • In general, you can remove ambiguity in a grammar by imposing state in the derivation.

Language Specification

an ambiguous grammar
An ambiguous grammar
  • S  aSb | aSbb | 
  • Language: L = {anbm | 0  n  m  2n}
    • The number of b’s is between the number of a’s and twice the number of a’s
  • aabbb can be generated two ways
  • Disambiguating:
    • Step 1: Produce all a’s with matching b’s
    • Step 2: Produce all extra b’s.
  • S  aSb | A | A  aAbb | abb

Language Specification

slide14
BNF
  • Backus-Naur Form
  • A standard notation for CFG’s, often used in specifying languages
    • Non-terminals (variables) are enclosed in <>
      • <expression>, <number>
      • <empty> = 
    •  is the production symbol ()
    • | is used for “or”

Language Specification

bnf example
BNF Example
  • <real-number> ::= <integer-part> . <fraction>
  • <integer-part> ::= <digit> | <integer-part> <digit>
  • <fraction> ::= <digit> | <digit><fraction>
  • <digit> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

Can we generate the number “.7” from this grammar?

Language Specification

extended bnf
Extended BNF
  • Makes some constructs easier to specify
  • No more powerful than BNF
  • Rules:
    • { } = “zero or more”
    • [ ] = “optional” or, equivalently “zero or one”
    • | = “or”
    • ( ) are used for grouping

Language Specification

arithmetic expressions
Arithmetic Expressions
  • <expression> ::= <expression> + <term> | <expression> – <term> | <term>
  • <term> ::= <term> * <factor> | <term> / <factor> | <factor>
  • <factor> ::= number | name | | (<expression>)
  • <expression> ::= <term> { (+| – ) <term> }
  • <term> ::= <factor> { (*| / ) <factor> }
  • <factor> ::= ‘(’ <expression> ‘)’ | number | name

Language Specification

ad