The TXL Programming Language (2)

21
27/02/2007 The TXL Programming Language (2) 1 Mariano Ceccato ITC-Irst Istituto per la ricerca Scientifica e Tecnologica [email protected] The TXL Programming Language (2)

description

The TXL Programming Language (2). Mariano Ceccato ITC-Irst Istituto per la ricerca Scientifica e Tecnologica [email protected]. The three phases of TXL. Transformed parse tree. Output text. Input text. Parse tree. Parse. Transform. Unparse. [words]. [words]. “blue fish”. “marlin”. - PowerPoint PPT Presentation

Transcript of The TXL Programming Language (2)

27/02/2007 The TXL Programming Language (2)

1

Mariano Ceccato

ITC-Irst

Istituto per la ricerca Scientifica e Tecnologica

[email protected]

The TXL Programming Language (2)

27/02/2007 The TXL Programming Language (2) 2

The three phases of TXL

Parse Transform Unparse

Input text Parse treeTransformed parse tree Output text

“blue fish”[words]

[word] [words]

blue [word] [empty]

fish

[words]

[word]

marlin

[empty]

“marlin”

27/02/2007 The TXL Programming Language (2) 3

Anatomy of a TXL program

Base grammar

Grammar overrides

Transformation rules

The base grammar defines the lexical forms (tokens or terminals) and the syntactic forms (non-terminals).

The optional grammar overrides non-terminal of the base grammar.

The ruleset defines the set oftransformation rules and functions

27/02/2007 The TXL Programming Language (2) 4

Anatomy of a TXL program

Base Grammar

Grammar overrides

Transformation rules

Example:Expr grammar

include “Expr.Grammar”

redefine expr …| exp([number], [number]))

include “Expr-exp.Grammar”rule mainrule onerule two

27/02/2007 The TXL Programming Language (2) 5

Specifying Lexical Forms

Lexical forms specify how the input is partitionated into tokens.

Predefined defaults include identifiers [id] (e.g. ABC, rt789), integer and float [number] (e.g. 123, 123.23, 3e22), string [string] (e.g. “hi there”).

The tokens statement gives regular expressions for each class of token in the input language.

tokens hexnumber “0[xX][\dABCDEFabcdef]+”end tokens

Example:

27/02/2007 The TXL Programming Language (2) 6

Specifying lexical Forms (cont’d)

Any single char (not [, ]) not preceded by a \ or # simply represents itself.

Single char patterns: ex. \d (digits), \a (alphabetic char).

Regular expression operators: [PQR] (any one of), (PQR) (sequence of), P*, P+, P?.

tokens name “regular expression”end tokensRegular expression:

27/02/2007 The TXL Programming Language (2) 7

Specifying lexical Forms (cont’d)

The keys specifies that certain identifiers are to be treated as unique special symbols.

The compounds specifies char seuqences to be treated as a single terminal.

The comments specifies the commenting conventions of the input language. By default comments are ignored by TXL.

keys procedure repeat ‘programend keys

compounds := >= <=end compounds

comments /* */ //end comments

27/02/2007 The TXL Programming Language (2) 8

Specifying Syntactic Forms

The general form of a non-terminal is:

define name

alternative1 | alternative2 … | alternativeN

end define

Where each alternative is any sequence of terminal and non terminal (enclosed in square brackets).

The special type [program] describes the structure of the entire input.

27/02/2007 The TXL Programming Language (2) 9

Specifying Syntactic Forms (cont’d)

Extended BNF-like sequence notation:[repeat x] sequence of zero or more (X*)

[list X] comma-separated list

[opt X] optional (zero or one)

define statements [repeat statement]end define

define statements [statement] | [statement] [statements]end define

… are equivalent

27/02/2007 The TXL Programming Language (2) 10

Specifying Syntactic Forms (cont’d)

define formalParameters

‘([list formalParameter+]’)

| [empty]

end define

define formalParameter

[id] ‘: [type]

end define

define type

‘int | ‘bool

end define

key

procedure begin ‘end int bool

end key

define proc

‘procedure [id] [forrmalParameters]

‘begin

[body]

‘end

end define

27/02/2007 The TXL Programming Language (2) 11

Ambiguity

TXL resolves ambiguities by choosing the first alternative of each non-terminal that can match the input.

define T [number] | ([T]) | + [T] | + + [T]end define

++2

T

T

T

+

+

2

T

T++

2

Example: T-language

27/02/2007 The TXL Programming Language (2) 12

Transformation rules

TXL has two kinds of transformation rules, rules and functions, which are distinguished by whether they should transform only one (for functions) or many (for rules) occurrences of their pattern.

Rules search their scope for the first istance of their target type matching their pattern, transform it, and then reapply to the entire scope until no more matches are found.

Functions do not search, but attempt to match only their entire scope to their pattern, transforming it if it matches.

27/02/2007 The TXL Programming Language (2) 13

Rules and function

function 2To42 replace [number] 2 by 42end function

rule 2To42 replace [number] 2 by 42end rule

2 ----> 4232 6 2 78 4 2

2 ----> 4232 6 2 78 4 2 ----> 42 6 42 78 4 42

Rules search the pattern!Rules search the pattern!

27/02/2007 The TXL Programming Language (2) 14

Searching functions

function 2To42 replace * [number] 2 by 42end function

Note: change only *

2 ----> 4232 6 2 78 4 2 ----> 42 6 2 78 4 2

27/02/2007 The TXL Programming Language (2) 15

Syntax of rules and functions

Simplified and given in TXL.

‘rule [ruleid] [repeat formalArgument] [repeat construct_deconstruct_where] ‘replace [type] [pattern] [repeat construct_deconstruct_where] ‘by [replacement]‘end rule

The same for functions!

N.B. If the ‘where-condition’ is false the rule can not be applied and the result is the input-AST.

27/02/2007 The TXL Programming Language (2) 16

Built-in functions

rule resolveAdd replace [expr] N1 [number] + N2 [number] by N1 [add N2]end rule

function add …end function

rule resolveAdd

replace [expr]

N1 [number] + N2 [number]

by

N1 [+ N2]

end rule

… are equivalent!

27/02/2007 The TXL Programming Language (2) 17

Built-in functions (cont’d)

rule sort replace [repeat number] N1 [number] N2 [number] Rest [repeat number] where N1 [> N2] by N2 N1 Restend rule

22 4 2 15 1 ------> …. ------> 1 2 4 15 22

27/02/2007 The TXL Programming Language (2) 18

Recursive functions

function fact replace [number] n [number] construct nMinusOne [number] n [- 1] where n [> 1] construct factMinusOne [number] nMinusOne [fact] by n [* factMinusOne]end function

27/02/2007 The TXL Programming Language (2) 19

Using rule parameters

rule resolveConstants replace [repeat statement] ‘const C [id] = V [expr] RestOfscope [repeat statement] by RestOfScope [replaceByValue C V]end rule

rule replaceByValue ConstName [id] Value [expr] replace [primary] ConstName by (Value)end rule

Example:

Const Pi = 3.14;Area := r*r*Pi;

Area := r*r*3.14;

27/02/2007 The TXL Programming Language (2) 20

Exercises

Implementing the T-language (page 11). Implementing the Calculator.txl. Adding to the ‘expr-grammar’ the exponential i.e

Exp(x, n). Computing the exponential:

- in syntax way: ex. Exp(2, 3) ----> 2*2*2

- in semantic way: by means a recursive function that substitute at Exp(x, n) the correct value.

27/02/2007 The TXL Programming Language (2) 21

Homework

Implementing a simple version of “commands-language” where commands can be:

- assignments i.e. [id] := [expr];

- declarations i.e. const [id] = [number];

Implementing some transformation rules (page 19) that substitute in the assignments identifiers with related values.

Example:

Const Pi = 3.14;Area := r*r*Pi;

Area := r*r*3.14;