21
Syntax and Grammars 1 / 21

Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

  • Upload
    others

  • View
    27

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Syntax and Grammars

1 / 21

Page 2: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

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

Page 3: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

What is a language?

Language: a system of communication using “words” in a structured way

Natural language• used for arbitrary communication• complex, nuanced, and imprecise

English, Chinese, Hindi,Arabic, Spanish, . . .

Programming language• used to describe aspects of computationi.e. systematic transformation of representation

• programs have a precise structure and meaning

Haskell, Java, C, Python,SQL, XML, HTML, CSS, . . .

We use a broad interpretation of “programming language”

What is a language? 3 / 21

Page 4: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Object vs. metalanguage

Important to distinguish two kinds of languages:

• Object language: the language we’re defining• Metalanguage: the language we’re using to definethe 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

Page 5: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

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

Page 6: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

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

Page 7: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Programs are trees!

Abstract syntax tree (AST): captures the essential structure of a program• everything needed to determine its semantics

+

2 *

3 4

2 + 3 * 4

*

+

5 6

+

7 8

(5 + 6) * (7 + 8)

if

true +

2 3

5

if true then (2+3) else 5

Abstract syntax and grammars 7 / 21

Page 8: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

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 production rulesn ∈ Noun ::= cats | dogs | ducks

v ∈ Verb ::= chase | cuddle

terminal symbol

Abstract syntax and grammars 8 / 21

Page 9: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Generating programs from grammars

How to generate a program from a grammar1. start with a nonterminal s2. find production rules with s on the LHS3. 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 ∈ Sentence ::= n v n | s and sn ∈ Noun ::= cats | dogs | ducksv ∈ Verb ::= chase | cuddle

s⇒ n v n⇒ cats v n⇒ cats v ducks⇒ cats cuddle ducks

Abstract syntax and grammars 9 / 21

Page 10: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Exercise

Animal behavior language

s ∈ Sentence ::= n v n | s and sn ∈ Noun ::= cats | dogs | ducksv ∈ 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

Page 11: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Abstract syntax trees

Grammar (BNF notation)

t ∈ Term ::= true| false| not t| if t t t

Example ASTs

true if

true false true

not

not

false

Language generated by grammar: set of all ASTs

Term = {true, false} ∪ {not

t| t ∈ Term} ∪ {

if

t1 t2 t3

| t1, t2, t3 ∈ Term}

Abstract syntax and grammars 11 / 21

Page 12: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Exercise

Arithmetic expression language

i ∈ Int ::= 1 | 2 | . . .e ∈ Expr ::= add e e

| mul e e| neg e| i

1. Draw two different ASTs for theexpression: 2+3+4

2. Draw an AST for the expression:-5*(6+7)

3. What are the integer results ofevaluating the following ASTs:

neg

add

5 3

add

neg

5

3

Abstract syntax and grammars 12 / 21

Page 13: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

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

Page 14: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

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

Page 15: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Parsing

Parsing: transforms concrete syntax into abstract syntax

Parser  source code(concrete syntax)

abstractsyntax 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

Page 16: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Pretty printing

Pretty printing: transforms abstract syntax into concrete syntax

Inverse of parsing!

PrettyPrinter

source code(concrete syntax)

abstractsyntax tree

Abstract syntax vs. concrete syntax 16 / 21

Page 17: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Abstract grammar vs. concrete grammar

Abstract grammar

t ∈ Term ::= true| false| not t| if t t t

Concrete grammar

t ∈ Term ::= true| false| not 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 ASTsbut they are not part of the syntax

Abstract syntax vs. concrete syntax 17 / 21

Page 18: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

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

Page 19: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Encoding abstract syntax in Haskell

Abstract grammar

b ∈ Bool ::= true | false

t ∈ Term ::= not t| if t t t| b

Abstract syntax trees

true if

true false true

not

not

false

Haskell data type definitiondata Term = Not Term

| If Term Term Term| Lit Bool

Haskell values• Lit True• If (Lit True)

(Lit False)(Lit True)

• Not (Not (Lit False))

Encoding grammars as Haskell data types 19 / 21

defines set

defines set

linearencoding

Page 20: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Translating grammars into Haskell data types

Strategy: grammar→ Haskell

1. For each basic nonterminal, choose a built-in type, e.g. Int, Bool2. For each other nonterminal, define a data type3. For each production, define a data constructor4. 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

Page 21: Syntax and Grammars - College of Engineeringweb.engr.oregonstate.edu/.../cs381-wi21/slides/2.Syntax.pdf · 2021. 1. 20. · Abstract syntax vs. concrete syntax 13 / 21. Abstract syntax

Example: Annotated arithmetic expression language

Abstract syntax

n ∈ Nat ::= (natural number)

c ∈ Comm ::= (comment string)

e ∈ Expr ::= neg e negation| e @ c comment| e + e addition| e * e multiplication| n literal

Haskell encodingtype Comment = String

data Expr = Neg Expr| Annot Expr Comment| Add Expr Expr| Mul Expr Expr| Lit Int

Encoding grammars as Haskell data types 21 / 21