This tutorial gives a short introduction on how to use the TPL API. It is recommended, that you read the TPL language reference.
Step 1
Compile the pattern into its AST representation.TPattern pattern = null;
try {
pattern = TPattern.compile("NP << JJ");
} catch (TPatternSyntaxException pse) {
// syntax error in pattern
}
Step 2
Implement the interface tpl.tree.TreeContentProvider according to your needs. Presuming your tree node interface is MyTreeNode.interface MyTreeNode {
public List<MyTreeNode> getChildren();
// ... other methods
}
.
.
.
// reference to root node
MyTreeNode myTreeRoot = ...
Then the tpl.tree.TreeContentProvider may be implemented like given below.TreeContentProvider myContentProvider = new TreeContentProvider() {
public Object getRoot() {
return myTreeRoot;
}
public Object[] getChildren(Object node) {
return ((MyTreeNode)node).getChildren().toArray();
}
};
Step 3
Create an tpl.tree.IndexedTree using your TreeContentProvider and tpl.tree.DefaultIndexedTree.IndexedTree<MyTreeNode> indexedTree = new DefaultIndexedTree<MyTreeNode>(myContentProvider);
Step 4
Create matcher for the pattern using the indexed tree.TMatcher<MyTreeNode> matcher = pattern.matcher(indexedTree);
Step 5
Use the methods getMaps(), getTuples() or find() to apply the pattern to the tree.// returns results as maps, node names are mapped to nodes Collection<Map<String, MyTreeNode>> resultMaps = matcher.getMaps();
// returns results as tuples, counted from left to right Collection<Collection<MyTreeNode>> resultTuples = matcher.getTuples();
while (matcher.find()) {
Collection<MyTreeNode> tuple = matcher.getTuple();
Map<String, MyTreeNode> map = matcher.getMap();
}
Comments
Post a Comment