Abstract Syntax Trees .fr

Apr 2, 2005 - A Simple C++ Implementation ..... the code for a < b depends on the types of a and b ...... will be able to work with C++ programs without the.
2MB taille 37 téléchargements 320 vues
Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

Abstract Syntax Trees Akim Demaille

[email protected]

EPITA  École Pour l'Informatique et les Techniques Avancées April 2, 2005

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

Abstract Syntax Trees

1

Structured Data for Input/Output: Trees AST Generators Simple Implementation of ast in C++

2

A Simple C++ Implementation Algorithms on trees: Traversals Supporting the

operator
LValue { cons (" Subscript " )} IntConst -> Exp { cons (" Int " )} StrConst -> Exp { cons (" String " )} " nil " -> Exp { cons ( " NilExp " )} LValue -> Exp Var "(" { Exp " ," }* ")" -> Exp { cons ( " Call " )} Id "=" Exp -> InitField { cons (" InitField " )} TypeId "{" { InitField " ," }* "}" -> Exp { cons ( " Record " )} TypeId "[" { Exp " ," }+ "]" " of " Exp -> Exp { cons ( " Array " )}

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

AST Generators Simple Implementation of ast in C++ A Simple C++ Implementation

Communication of trees: ASN.1

Abstract Syntax Notation number One (ASN.1) [Consortium, 2003, Dubuisson, 2003]: an international standard specifying data used in communication protocols powerful and complex language describe accurately and eciently communications between homogeneous or heterogeneous systems

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

AST Generators Simple Implementation of ast in C++ A Simple C++ Implementation

Communication of trees: ASN.1

Abstract Syntax Notation number One (ASN.1) [Consortium, 2003, Dubuisson, 2003]: an international standard specifying data used in communication protocols powerful and complex language describe accurately and eciently communications between homogeneous or heterogeneous systems

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

AST Generators Simple Implementation of ast in C++ A Simple C++ Implementation

Communication of trees: ASN.1

Abstract Syntax Notation number One (ASN.1) [Consortium, 2003, Dubuisson, 2003]: an international standard specifying data used in communication protocols powerful and complex language describe accurately and eciently communications between homogeneous or heterogeneous systems

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

AST Generators Simple Implementation of ast in C++ A Simple C++ Implementation

Communication of trees: ASN.1

Abstract Syntax Notation number One (ASN.1) [Consortium, 2003, Dubuisson, 2003]: an international standard specifying data used in communication protocols powerful and complex language describe accurately and eciently communications between homogeneous or heterogeneous systems

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

AST Generators Simple Implementation of ast in C++ A Simple C++ Implementation

Communication of trees: ASN.1

Example DEFINITIONS ::= BEGIN AddressType ::= SEQUENCE { name OCTET STRING , number INTEGER , street OCTET STRING , apartNumber INTEGER OPTIONAL , postOffice OCTET STRING , state OCTET STRING , zipCode INTEGER } END

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

AST Generators Simple Implementation of ast in C++ A Simple C++ Implementation

Communication of trees: ASN.1

Tags to avoid problems similar to matching

Example DEFINITIONS ::= BEGIN Letter ::= SEQUENCE opening body closing receiverAddr senderAddr } END

a*a*.

{ OCTET STRING , OCTET STRING , OCTET STRING , [0] AddressType OPTIONAL , [1] AddressType OPTIONAL

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

AST Generators Simple Implementation of ast in C++ A Simple C++ Implementation

Communication of trees

SGML/XML YAXX: YAcc eXtension to XML [Yu and D'Hollander, 2003]

CORBA

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

AST Generators Simple Implementation of ast in C++ A Simple C++ Implementation

Communication of trees: ATerms: Grammar

t

::= bt | bt { t } bt ::= C | C(t1 ,... , tn ) | (t1 ,... , tn ) | [t1 ,... , tn ] | " ccc " | int | real | blob

-----------

basic term annotated term constant n - ary constructor n - ary tuple list quoted string integer floating point number binary large object

Here C is a constructor name, which is either an identier or a quoted string [Centrum voor Wiskunde en Informatica, 2004].

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

AST Generators Simple Implementation of ast in C++ A Simple C++ Implementation

Communication of trees: ATerms: Examples

constants numerals literals lists functions annotations

abc 42 "asdf" [], [1, "abc" 2], [1, 2, [3, 4]] f("a"), g(1,[]) f("a") {"remark"}

Akim Demaille

Abstract Syntax Trees

Structured Data for Input/Output: Trees Algorithms on trees: Traversals Applications

AST Generators Simple Implementation of ast in C++ A Simple C++ Implementation

Simple Implementation of ast in C++

1

Structured Data for Input/Output: Trees AST Generators Simple Implementation of ast in C++

2

A Simple C++ Implementation Algorithms on trees: Traversals Supporting the

operator