Specifying languages
Download
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


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