Phase: SCRules Input: Lookup Split Token NounChunk Options: control = appelt Macro: LIST ( ({NounChunk}{Token.string == ","})[0,10] {NounChunk} ({Token.string == ","})? {Token.category == CC} {NounChunk} ) Macro: ADJLIST ( ({Token.category == JJ}{Token.string == ","})[0,10] {Token.category == JJ} ({Token.string == ","})? {Token.category == CC} {Token.category == JJ} ) // 9 Rule:DP1 // Copper is red and though. ( ({NounChunk}):class {Lookup.minorType == be} ({Token.category == JJ}|(ADJLIST)):properties ) --> :class.Class = {rule=DP1}, { // "properties" matches LHS label List annList = new ArrayList((AnnotationSet)bindings.get("properties")); //sort the list by offset Collections.sort(annList, new OffsetComparator()); //iterate through the matched annotations for(int i = 0; i < annList.size(); i++) { Annotation anAnn = (Annotation)annList.get(i); // check that the new annotation is a NounChunk if (anAnn.getType().equals("Token") && anAnn.getFeatures().containsKey("category") && anAnn.getFeatures().get("category").equals("JJ") ) { FeatureMap features = Factory.newFeatureMap(); // change this for a different rule name" features.put("rule", "DP2"); // change "Subclass" for a different annotation name annotations.add(anAnn.getStartNode(), anAnn.getEndNode(), "DataTypeProperty", features); } } }