static PT_Attributes SDFAttributesToPtAttributes(SDF_Attributes sdfAttributes) { PT_Attributes ptAttributes; if (SDF_isAttributesNoAttrs(sdfAttributes)) { ptAttributes = PT_makeAttributesNoAttrs(); } else { SDF_AttributeList sdfAttrList = SDF_getAttributesList(sdfAttributes); PT_Attrs ptAttrList = NULL; if (SDF_isAttributeListEmpty(sdfAttrList)) { ptAttributes = PT_makeAttributesNoAttrs(); } else { while (SDF_hasAttributeListHead(sdfAttrList)) { SDF_Attribute sdfAttr = SDF_getAttributeListHead(sdfAttrList); PT_Attr ptAttr = SDFAttributeToPtAttr(sdfAttr); if (ptAttrList == NULL) { ptAttrList = PT_makeAttrsSingle(ptAttr); } else { ptAttrList = PT_makeAttrsMany(ptAttr, ptAttrList); } if (SDF_isAttributeListSingle(sdfAttrList)) { break; } sdfAttrList = SDF_getAttributeListTail(sdfAttrList); } } if (ptAttrList == NULL) { ptAttributes = PT_makeAttributesNoAttrs(); } else { ptAttributes = PT_makeAttributesAttrs( PT_reverseAttrs(ptAttrList)); } } return ptAttributes; }
ATbool SDF_hasAvoidAttribute(SDF_Production prod) { ATbool found = ATfalse; SDF_Attributes attrs = SDF_getProductionAttributes(prod); if (!SDF_isAttributesNoAttrs(attrs)) { SDF_AttributeList attrList = SDF_getAttributesList(attrs); while (SDF_hasAttributeListHead(attrList) && !found) { SDF_Attribute attr = SDF_getAttributeListHead(attrList); if (SDF_isAttributeAvoid(attr)) { found = ATtrue; } if (SDF_isAttributeListSingle(attrList)) { break; } attrList = SDF_getAttributeListTail(attrList); } } return found; }