Print

Print


On Feb 28, 2010, at 12:46 PM, Beto Roth wrote:

> The problem I have is how to tell ECJ to build a tree with that  
> specific
> structure. When ECJ creates a tree, it puts the terminals on the  
> leaves, and
> non-terminals on the remainder nodes. But how can I specify that the  
> nodes
> previous to the leaves have to have a comparator?

Norberto, ECJ's set types are good for this.  I'm going to presume  
from your diagram that you want to have terminals on the left of the  
">" or "<" and numbers on the right.  It's easy to modify if this is  
not the case.  Here's what you do:

ATOMIC TYPE 1: numbers
ATOMIC TYPE 2: variables
ATOMIC TYPE 3: comparisons
ATOMIC TYPE 4: logic

SET TYPE 1: booleans = {comparisons, logic}

TREE RETURN TYPE: logic

"&" RETURN TYPE: logic
"&" CHILD TYPES: booleans	(that is, either comparisons or logic)

">" etc. RETURN TYPE: comparisons
">" etc. LEFT CHILD TYPE: variables
">" etc. RIGHT CHILD TYPE: numbers

"A" etc. RETURN TYPE: variables
"5" etc. RETURN TYPE: numbers

This sets things up so that "&" nodes can have *either* "<" etc. *or*  
"&" nodes as their children.  But the tree must have an "&" node as  
its root.  Furthermore, "<" etc. must have variables as their left  
children and numbers as their right children.

Sean