/
Abstract Syntax Abstract Syntax

Abstract Syntax - PowerPoint Presentation

jane-oiler
jane-oiler . @jane-oiler
Follow
376 views
Uploaded On 2016-07-24

Abstract Syntax - PPT Presentation

Different Levels of Syntax Lexical syntax Basic symbols names values operators etc Concrete syntax Rules for writing expressions statements programs Input to compilersinterpreters Abstract syntax ID: 418476

lambda env cs784 define env lambda define cs784 exp expression list empty syntax sym syms vals environment datum var extend apply abstract

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "Abstract Syntax" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

Abstract SyntaxSlide2

Different Levels of Syntax

Lexical syntax

Basic symbols (names, values, operators, etc.)

Concrete syntaxRules for writing expressions, statements, programsInput to compilers/interpretersAbstract syntax“Internal” representationCaptures semantics

CS784(PM)

2Slide3

3

Overview

Parse-expression

Unparse-expression

Interpreter

Concrete

Syntax

Abstract

Syntax

Results

CS784(PM)Slide4

Concrete vs. Abstract Syntax

Expressions with common meaning (should) have the same abstract syntax

.

C: a+b*cAssumes certain operator precedence (why?)Forth: bc*a+ (reverse Polish)

This expression tree represents the

meaning

of expression

Not the same as parse tree (why?)

Does

the value depend on traversal order?

abc

*+ (or is this it?)

CS784(PM)

4Slide5

5

Parse tree vs. AST

+

expr

1

2

+

3

expr

expr

(

)

(

)

expr

expr

1

2

+

3

+

expr

expr

CS784(PM)Slide6

6

Abstract Syntax Tree

More useful representation of syntax tree

Less clutterActual level of detail depends on your designBasis for semantic analysisLater annotated with various informationType informationComputed values

CS784(PM)Slide7

7

Compilation in a Nutshell

Source code

(character stream)

Lexical analysis

Parsing

Token stream

Abstract syntax tree

(AST)

Semantic Analysis

if (b == 0) a = b;

if

(

b

)

a

=

b

;

0

==

if

==

b

0

=

a

b

if

==

int

b

int

0

=

int

a

lvalue

int

b

boolean

Decorated AST

int

;

;

CS784(PM)Slide8

λ-expressions

<exp> ::=

<identifier>

| (lambda (<identifier> ) <exp>) | (<exp> <exp>) Compare with Scheme S-expressions.

EOPL3 p52: Lc-exp

CS784(PM)

8Slide9

Lc-exp ::=

Identifier

var

-exp (var)(lambda (Identifier) Lc-exp)

lambda-exp (bound-var

body)

(

Lc

-exp

Lc

-exp)app-exp (rator

rand)Abstract syntaxCS784(PM)

9Slide10

EOPL3 Scheme: define-datatype

Syntax definition:

(define-

datatype type-name type-predicate-name {(variant-name {(field

-name predicate)}* )} + )An Example:

(define-

datatype

environment

environment

?

(empty-

env-record) (extended-env-record (syms (list-of symbol?))

(vals (list-of scheme-value?)) (env environment?)))

Data types built by define-datatype may be mutually recursive.CS784(PM)

10Slide11

Syntax Driven Representation

(define-datatype expression expression?

(var-exp

(id symbol?))

(lambda-exp

(id symbol?)

(body expression?))

(app-exp

(rator expression?)

(rand expression?)))

11

CS784(PM)Slide12

Figure 2.2: (lambda (x) (f (f x)))

CS784(PM)

12Slide13

Concrete to Abstract Syntax

(define parse-expression

(lambda (datum)

(

cond

((symbol? datum) (

var

-exp datum))

((pair? datum)

(if (

eqv

? (car datum) 'lambda)

(lambda-exp (caadr datum) (parse-expression (

caddr datum))) (app-exp

(parse-expression (car datum))

(parse-expression (cadr datum)))) )

(else (eopl:error

'parse-expression

"Invalid concrete syntax ~s" datum)) )))CS784(PM)13Slide14

14

DrRacket

CS784(PM)Slide15

Unparse: Abstract to Concrete Syntax

(define

unparse

-expression (lambda (exp)

(cases expression exp

(

var

-exp (id)

id

)

(lambda-exp (id body)

(list 'lambda (list id) (

unparse-expression body))

) (app-exp (rator

rand)

(list (

unparse-expression

rator) (unparse-expression rand)) ))))

CS784(PM)15Slide16

Role of Induction and Recursion

Define data structures (infinite values) by

induction

.Seed elements.Closure operations.Define functions (operations) by recursion.

Boundary/Basis case.Composite/Recursive case.

Prove properties using

structural induction

.

Basis case.

Inductive step.

CS784(PM)

16Slide17

The Environment

Environment:

table of variable-value pairs

Chronologically later var-value pair overridesConstructorsempty-env extend-env Observerapply-envCS784(PM)

17Slide18

The Environment Spec

(empty-

env

) = ∅(apply-env f

var) = f (var)

(extend-

env

var

v

 f] ) = g

,where g(var1 )= v, if var1 = var= f (var

1). otherwisefrom EOPL3 p36CS784(PM)

18Slide19

An Example Env e

(define e

(extend-

env ’d 6 (extend-env

’y 8 (extend-

env

’x 7

(extend-

env

’y 14

(empty-

env))))))e(d)=6, e(x)=7, e(y)=8

CS784(PM)19Slide20

Representing Environment

Many representations are possible

Speedy access

Memory frugalChange in the interface: Syms x Vals(define extend-env (lambda (

syms vals

env

) … ))

CS784(PM)

20Slide21

Alt-1: env is a List of Ribs

CS784(PM)

21

left rib: list of variables

right rib: corresponding list of values.

Exercise 2.11 EOPL3 (Ribcage)Slide22

Alt-1: List of Ribs (Ribcage)

(define empty-

env

(lambda () '()))

(define extend-env

(lambda (

syms

vals

env

) (cons (list syms

vals) env) ))

(define apply-env

(lambda (env sym)

(if (null? env)

(eopl:error 'apply-env

"No binding for ~s" sym) (let ((syms

(car (car env))) (vals (cadr (car env))) (env (cdr

env))) (let ((pos (rib-find-position sym

syms))) (if (number? pos)

(list-ref

vals

pos)

(apply-

env

env

sym)))))))

CS784(PM)

22Slide23

Alt-2: env

is a Unary Function

(define empty-env

(lambda () (lambda (sym)

(eopl:error 'apply-env "No binding for ~s" sym))

))

(define extend-env

(lambda (syms vals env)

(lambda (sym)

(let ((pos (list-find-position sym syms)))

(if (number? pos)

(list-ref vals pos) (apply-env env sym))))

))(define apply-env

(lambda (env sym) (env sym)

))CS784(PM)

23Slide24

Alt-3: Tagged Records

(define-

datatype

environment environment

?

(empty-

env

-record)

(extended-

env

-record

(syms (list-of symbol?)) (

vals (list-of scheme-value?)) (env

environment?)))(define scheme-value? (lambda (v) #t))

(define empty-env

(lambda ()

(empty-env

-record) ))(define extend-

env (lambda (syms vals env) (extended-env-record

syms vals

env)

))

CS784(PM)

24Slide25

Alt-3: Tagged records

(define apply-

env

(lambda (env sym)

(cases environment

env

(empty-

env

-record ()

(

eopl:error

'apply-env "No binding for ~s" sym))

(extended-env-record (

syms vals

env

) (let ((pos (list-find-position sym

syms))) (if (number? pos)

(list-ref vals pos) (apply-env env sym)))))))

CS784(PM)25Slide26

26

Queue

(define reset (lambda (q) (vector-ref q 0)))

(define empty? (lambda (q) (vector-ref q 1)))

(define enqueue (lambda (q) (vector-ref q 2)))

(define dequeue (lambda (q) (vector-ref q 3)))

(define Q (create-queue))

((enqueue Q) 55)

((empty? Q))

((dequeue Q))

((empty? Q))

((reset Q))

((dequeue Q))

CS784(PM)Slide27

27

(define create-queue

(lambda ()

(let ((q-in '()) (q-out '()))

(letrec

((reset-queue

(lambda ()

(set! q-in '()) (set! q-out '()))

)

(empty-queue?

(lambda () (and (null? q-in) (null? q-out)))

) (enqueue

(lambda (x)

(set! q-in (cons x q-in))) )

(dequeue (lambda ()

(if (empty-queue?)

(eopl:error 'dequeue "Not on an empty queue") (begin (if (null? q-out) (begin (set! q-out (reverse q-in)) (set! q-in '()))) (let ((ans (car q-out)))

(set! q-out (cdr q-out)) ans)))))

) (vector reset-queue empty-queue? enqueue dequeue))

)))

CS784(PM)