Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
cerl_trees(3)		   Erlang Module Definition		 cerl_trees(3)

       cerl_trees - Basic functions on Core Erlang abstract syntax trees.

       Basic functions on Core Erlang abstract syntax trees.

       Syntax trees are	defined	in the module cerl.

	 cerl()	= cerl:cerl():

       depth(T::cerl:cerl()) ->	non_neg_integer()

	      Returns  the length of the longest path in the tree. A leaf node
	      has depth	zero, the tree representing  "{foo,  bar}"  has	 depth
	      one, etc.

       fold(F::(cerl:cerl(),  term()) -> term(), S::term(), T::cerl:cerl()) ->

	      Does a fold operation over the nodes of the tree.	The result  is
	      the  value  of  Function(X1, Function(X2,	... Function(Xn, Unit)
	      ... )), where X1,	..., Xn	are the	nodes of Tree in a  post-order

	      See also:	mapfold/3.

       free_variables(T::cerl:cerl()) -> [cerl:var_name()]

	      Like  variables/1,  but only includes variables that are free in
	      the tree.

	      See also:	next_free_variable_name/1, variables/1.

       get_label(T::cerl:cerl()) -> top	| integer()

       label(T::cerl:cerl()) ->	{cerl:cerl(), integer()}

	      Equivalent to label(Tree,	0).

       label(T::cerl:cerl(), N::integer()) -> {cerl:cerl(), integer()}

	      Labels each expression in	the tree. A term {label,  L}  is  pre-
	      fixed to the annotation list of each expression node, where L is
	      a	unique number for every	node, except for variables (and	 func-
	      tion  name variables) which get the same label if	they represent
	      the same variable. Constant literal nodes	are not	labeled.

	      The returned value is a tuple {NewTree, Max}, where  NewTree  is
	      the labeled tree and Max is 1 plus the largest label value used.
	      All previous  annotation	terms  on  the	form  {label,  X}  are

	      The  values of L used in the tree	is a dense range from N	to Max
	      -	1, where N =_ Max =_ N + size(Tree). Note that it is  possible
	      that no labels are used at all, i.e., N =	Max.

	      Note: All	instances of free variables will be given distinct la-

	      See also:	label/1, size/1.

       map(F::(cerl:cerl()) -> cerl:cerl(), T::cerl:cerl()) -> cerl:cerl()

	      Maps a function onto the nodes of	a  tree.  This	replaces  each
	      node in the tree by the result of	applying the given function on
	      the original node, bottom-up.

	      See also:	mapfold/3.

       mapfold(F::(cerl:cerl(),	term())	-> {cerl:cerl(), term()},  S0::term(),
       T::cerl:cerl()) -> {cerl:cerl(),	term()}

	      Does  a  combined	 map/fold  operation on	the nodes of the tree.
	      This is similar to map/2,	but also propagates a value from  each
	      application  of  Function	 to  the next, starting	with the given
	      value Initial, while doing a post-order traversal	of  the	 tree,
	      much like	fold/3.

	      This  is the same	as mapfold/4, with an identity function	as the

	      See also:	fold/3,	map/2, mapfold/4.

       mapfold(Pre::(cerl:cerl(), term()) ->  {cerl:cerl(),  term()}  |	 skip,
       Post::(cerl:cerl(),  term())  ->	 {cerl:cerl(),	term()},  S00::term(),
       T0::cerl:cerl())	-> {cerl:cerl(), term()}

	      Does a combined map/fold operation on the	nodes of the tree.  It
	      begins  by calling Pre on	the tree, using	the Initial value. Pre
	      must either return a tree	with an	 updated  accumulator  or  the
	      atom skip.

	      If  a  tree is returned, this function deconstructs the top node
	      of the returned tree and recurses	on the children, using the re-
	      turned value as the new initial and carrying the returned	values
	      from one call to the next. Finally it reassembles	the  top  node
	      from the children, calls Post on it and returns the result.

	      If skip is returned, it returns the tree and accumulator as is.

       next_free_variable_name(T::cerl:cerl()) -> integer()

	      Returns  a  integer  variable name higher	than any other integer
	      variable name in the syntax tree.	An exception is	thrown if Tree
	      does not represent a well-formed Core Erlang syntax tree.

	      See also:	free_variables/1, variables/1.

       size(T::cerl:cerl()) -> non_neg_integer()

	      Returns the number of nodes in Tree.

       variables(T::cerl:cerl()) -> [cerl:var_name()]

	      Returns an ordered-set list of the names of all variables	in the
	      syntax tree. (This includes function name	variables.) An	excep-
	      tion is thrown if	Tree does not represent	a well-formed Core Er-
	      lang syntax tree.

	      See also:	free_variables/1, next_free_variable_name/1.

       Richard Carlsson	_carlsson.richard@gmail.com_

				compiler 8.0.3			 cerl_trees(3)


Want to link to this manual page? Use this URL:

home | help