syntax and grammars
play

Syntax and Grammars 1 / 21 Outline What is a language? Abstract - PowerPoint PPT Presentation

Syntax and Grammars 1 / 21 Outline What is a language? Abstract syntax and grammars Abstract syntax vs. concrete syntax Encoding grammars as Haskell data types What is a language? 2 / 21 What is a language? Language : a system of


  1. Syntax and Grammars 1 / 21

  2. Outline What is a language? Abstract syntax and grammars Abstract syntax vs. concrete syntax Encoding grammars as Haskell data types What is a language? 2 / 21

  3. What is a language? Language : a system of communication using “words” in a structured way Natural language English, Chinese, Hindi, • used for arbitrary communication Arabic, Spanish, ... • complex, nuanced, and imprecise Programming language Haskell, Java, C, Python, • used to describe aspects of computation SQL, XML, HTML, CSS, ... i.e. systematic transformation of representation • programs have a precise structure and meaning We use a broad interpretation of “programming language” What is a language? 3 / 21

  4. Object vs. metalanguage Important to distinguish two kinds of languages : • Object language : the language we’re defining • Metalanguage : the language we’re using to define the structure and meaning of the object language! A single language can fill both roles at different times! (e.g. Haskell) What is a language? 4 / 21

  5. Syntax vs. semantics Two main aspects of a language : • syntax : the structure of its programs • semantics : the meaning of its programs Metalanguages for defining syntax: grammars, Haskell, ... Metalanguages for defining semantics: mathematics, inference rules, Haskell, ... What is a language? 5 / 21

  6. Outline What is a language? Abstract syntax and grammars Abstract syntax vs. concrete syntax Encoding grammars as Haskell data types Abstract syntax and grammars 6 / 21

  7. Programs are trees! Abstract syntax tree (AST) : captures the essential structure of a program • everything needed to determine its semantics + * if 2 * + + true + 5 3 4 5 6 7 8 2 3 2 + 3 * 4 (5 + 6) * (7 + 8) if true then (2+3) else 5 Abstract syntax and grammars 7 / 21

  8. Grammars Grammars are a metalanguage for describing syntax The language we’re defining is called the object language syntactic category nonterminal symbol  s ∈ Sentence n v n | s and s ::=  n ∈ Noun cats | dogs | ducks  production rules ::= v ∈ Verb chase | cuddle ::= terminal symbol Abstract syntax and grammars 8 / 21

  9. Generating programs from grammars How to generate a program from a grammar 1. start with a nonterminal s 2. find production rules with s on the LHS 3. replace s by one possible case on the RHS A program is in the language if and only if it can be generated by the grammar! Animal behavior language s ⇒ n v n s ∈ Sentence n v n | s and s ::= ⇒ cats v n n ∈ Noun cats | dogs | ducks ::= ⇒ cats v ducks v ∈ Verb chase | cuddle ::= ⇒ cats cuddle ducks Abstract syntax and grammars 9 / 21

  10. Exercise Animal behavior language s ∈ Sentence n v n | s and s ::= n ∈ Noun cats | dogs | ducks ::= v ∈ Verb chase | cuddle ::= Is each “program” in the animal behavior language? • cats chase dogs • cats and dogs chase ducks • dogs cuddle cats and ducks chase dogs • dogs chase cats and cats chase ducks and ducks chase dogs Abstract syntax and grammars 10 / 21

  11. Abstract syntax trees Grammar (BNF notation) Example ASTs not t ∈ Term true ::= true if | false not | not t true false true false | if t t t Language generated by grammar: set of all ASTs not if Term = { true , false } ∪ { | t ∈ Term } ∪ { | t 1 , t 2 , t 3 ∈ Term } t t 1 t 2 t 3 Abstract syntax and grammars 11 / 21

  12. Exercise 1. Draw two different ASTs for the expression: 2+3+4 Arithmetic expression language 2. Draw an AST for the expression: i ∈ Int 1 | 2 | . . . ::= -5*(6+7) e ∈ Expr add e e ::= | mul e e 3. What are the integer results of | neg e evaluating the following ASTs: | i neg add add neg 3 5 3 5 Abstract syntax and grammars 12 / 21

  13. Outline What is a language? Abstract syntax and grammars Abstract syntax vs. concrete syntax Encoding grammars as Haskell data types Abstract syntax vs. concrete syntax 13 / 21

  14. Abstract syntax vs. concrete syntax Abstract syntax : captures the essential structure of programs • typically tree-structured • what we use when defining the semantics Concrete syntax : describes how programs are written down • typically linear (e.g. as text in a file) • what we use when we’re writing programs in the language Abstract syntax vs. concrete syntax 14 / 21

  15. Parsing Parsing : transforms concrete syntax into abstract syntax source code abstract Parser (concrete syntax) syntax tree Typically several steps: • lexical analysis : chunk character stream into tokens • generate parse tree : parse token stream into intermediate “concrete syntax tree” • convert to AST : convert parse tree into AST Not covered in this class ... (CS 480) Abstract syntax vs. concrete syntax 15 / 21

  16. Pretty printing Pretty printing : transforms abstract syntax into concrete syntax Inverse of parsing! abstract source code Pretty syntax tree Printer (concrete syntax) Abstract syntax vs. concrete syntax 16 / 21

  17. Abstract grammar vs. concrete grammar Abstract grammar Concrete grammar t ∈ Term true t ∈ Term true ::= ::= | false | false | not t | not t if t t t if t then t else t | | | ( t ) Our focus is on abstract syntax • we’re always writing trees , even if it looks like text • use parentheses to disambiguate textual representation of ASTs but they are not part of the syntax Abstract syntax vs. concrete syntax 17 / 21

  18. Outline What is a language? Abstract syntax and grammars Abstract syntax vs. concrete syntax Encoding grammars as Haskell data types Encoding grammars as Haskell data types 18 / 21

  19. Encoding abstract syntax in Haskell defines set Abstract grammar Abstract syntax trees b ∈ Bool true | false not ::= true if linear t ∈ Term not t not ::= encoding | if t t t true false true false | b Haskell data type definition Haskell values • Lit True data Term = Not Term | If Term Term Term • If (Lit True) | Lit Bool (Lit False) (Lit True) defines set • Not (Not (Lit False)) Encoding grammars as Haskell data types 19 / 21

  20. Translating grammars into Haskell data types Strategy: grammar → Haskell 1. For each basic nonterminal, choose a built-in type, e.g. Int , Bool 2. For each other nonterminal, define a data type 3. For each production, define a data constructor 4. The nonterminals in the production determine the arguments to the constructor Special rule for lists: • in grammars, s ::= t ∗ is shorthand for: s ::= ǫ | t s or s ::= ǫ | t , s • can translate any of these to a Haskell list: data Term = ... type Sentence = [Term] Encoding grammars as Haskell data types 20 / 21

  21. Example: Annotated arithmetic expression language Abstract syntax Haskell encoding type Comment = String (natural number) n ∈ Nat ::= (comment string) c ∈ Comm data Expr = Neg Expr ::= | Annot Expr Comment negation e ∈ Expr neg e ::= | Add Expr Expr | e @ c comment | Mul Expr Expr | Lit Int | e + e addition | e * e multiplication | n literal Encoding grammars as Haskell data types 21 / 21

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend