200 likes | 335 Vues
This document explores recursive data structures and grammars, emphasizing their definitions, properties, and algorithms for manipulation and traversal. It covers important examples, including lists, trees, and expression trees, and delves into production rules to establish languages derivable from syntactic categories. The text explains derivation processes, internal path lengths of binary trees, and the characteristics of binary search trees. Additionally, it highlights systematic generation techniques for binary trees and the construction of parse trees within recursively defined languages.
E N D
Recursive Data Structures and Grammars • Themes • Recursive Description of Data Structures • Grammars and Parsing • Recursive Definitions of Properties of Data Structures • Recursive Algorithms for Manipulating and Traversing Data Structures • Examples • Lists • Trees • Expressions and Expression Trees
Grammars • Syntactic Categories (non-terminals) • <number> • <digit> • <expr> • Production Rules (replace syntactic category on the rhs by the lhs, “|” is or) • <expr> <expr> + <expr> • <expr> <number> • <number> <digit> <number> • <digit> 0|1|2|3|4|5|6|7|8|9
Derivation • Repeatedly replace syntactic categories by the lhs of rules whose rhs is equal to the syntactic category • <expr> <expr>+<expr> <expr>+<expr>+<expr> <number>+<expr>+<expr> <number>+<number>+<expr> <number>+<number>+<number>
Derivation (e.g. 2) • <number> <digit><number> <digit><digit><number> <digit><digit><digit> <digit><digit>3 <digit>23 123 • When there are no more syntactic categories, the process stops and the resulting string is said to be derived from the initial syntactic category.
Languages • The language, L(<S>), derivable from the syntactic category <S> using the grammar G is defined inductively. • Initially L(<S>) is empty • If <S> X1 Xn is a production in G and si = Xi is a terminal or si L(Xi), then the concatenation s1s2 …sn is in L(<S>)
Language • The number of strings of length n in the language L(<number>) is 10n. • Proof is by induction.
Language • <B> () | (<B>) • L(<B>) = strings of n left parens followed by n right parens, for n >= 0.
Systematic Generation • C statement example
Binary Trees • A binary tree is • empty • consists of a node with 3 elements • value • left, which is a tree • right, which is a tree
Height of Binary Trees • Height(T) = -1 if T is empty • max(Height(T.left),Height(T.right)) + 1 • Alternative: Max over all nodes of the level of the node.
Number of Nodes of a Binary Trees • Nnodes(T) = 0 if T is empty • Nnodes(T.left) + Nnodes(T.right) + 1
Internal Path Length • IPL(T) = 0 if T is empty • IPL(T) = IPL(T.left) + IPL(T.right) + Nnodes(T)-1 • Alternative: Sum over all nodes of the level of the node.
External Format for Binary Trees • <bintree> [] [<value>,<bintree>,<bintree>] • [], • [1,[],[]], • [2,[1,[],[]],[]], [2,[[],[1,[],[]]] • [3, [2,[1,[],[]],[]], []], [3, [2,[[],[1,[],[]]],[]] [3, [1,[],[]], [1,[],[]]], [3, [],[2,[1,[],[]],[]]], [3, [],[2,[[],[1,[],[]]]]
Recurrence for the Number of Binary Trees • Let Tn be the number of binary trees with n nodes. • T0 = 1, T1 = 1, T2 = 2, T3 = 5
Binary Search Trees • Binary Tree • All elements in T->left are <= T->value • All elements in T->right are >= T->value
Inorder traversal • Recursively visit nodes in T.left • visit root • Recursively visit nodes in T.right • An in order traversal of a BST lists the elements in sorted order. Proof by induction.
Parse Tree • A derivation is conveniently stored in a tree, where internal nodes correspond to syntactic categories and the children of a node correspond to the element of the rhs in the rule that was applied
Example Parse Tree <number> / \ <digit> <number> | / \ 1 <digit> <number> | | 2 <digit> | 3
Recursive Decent Parser • Balanced parentheses
Ambiguous Grammars <expr> <expr> / | \ / | \ <expr>+<expr> <expr>+<expr> / | \ / | \ <expr>+<expr> <expr>+<expr>