static SDF_Attribute PTAttrToSDFAttribute(PT_Attr ptAttr) { SDF_Attribute result; if (PT_isAttrAssoc(ptAttr)) { PT_Associativity ptAssoc = PT_getAttrAssoc(ptAttr); SDF_Associativity sdfAssoc; if (PT_isAssociativityLeft(ptAssoc)) { sdfAssoc = SDF_makeAssociativityLeft(); } else if (PT_isAssociativityRight(ptAssoc)) { sdfAssoc = SDF_makeAssociativityRight(); } else if (PT_isAssociativityAssoc(ptAssoc)) { sdfAssoc = SDF_makeAssociativityAssoc(); } else { sdfAssoc = SDF_makeAssociativityNonAssoc(); } result = SDF_makeAttributeAssoc(sdfAssoc); } else if (PT_isAttrTerm(ptAttr)) { ATerm term = PT_getAttrTerm(ptAttr); ATabort("Conversion of plain ATerm not yet implemented: %t\n", term); result = NULL; } else if (PT_isAttrId(ptAttr)) { char *str = PT_getAttrModuleName(ptAttr); SDF_ModuleId sdfModuleId; SDF_ModuleName sdfModuleName; sdfModuleId = SDF_makeModuleIdWord(SDF_makeCHARLISTString(str)); sdfModuleName = SDF_makeModuleNameUnparameterized(sdfModuleId); result = SDF_makeAttributeId(SDF_makeLayoutEmpty(), SDF_makeLayoutEmpty(), sdfModuleName, SDF_makeLayoutEmpty()); } else if (PT_isAttrBracket(ptAttr)) { result = SDF_makeAttributeBracket(); } else if (PT_isAttrReject(ptAttr)) { result = SDF_makeAttributeReject(); } else if (PT_isAttrPrefer(ptAttr)) { result = SDF_makeAttributePrefer(); } else if (PT_isAttrAvoid(ptAttr)) { result = SDF_makeAttributeAvoid(); } else { ATabort("Unsupported attribute: %t\n", ptAttr); result = NULL; } return result; }
static int lengthOfAttr(PT_Attr attr) { ATerm attribute; if (PT_isAttrAssoc(attr)) { attribute = PT_AssociativityToTerm(PT_getAttrAssoc(attr)); } else if (PT_isAttrTerm(attr)) { attribute = PT_getAttrValue(attr); } else { attribute = PT_AttrToTerm(attr); } return strlen(ATwriteToString(attribute)); }
static int yieldAttr(PT_Attr attr, int idx, char *buf, int bufSize) { char *str; ATerm attribute; if (PT_isAttrAssoc(attr)) { attribute = PT_AssociativityToTerm(PT_getAttrAssoc(attr)); } else if (PT_isAttrTerm(attr)) { attribute = PT_getAttrValue(attr); } else { attribute = PT_AttrToTerm(attr); } str = ATwriteToString(attribute); strcpy(buf+idx,str); return idx + strlen(str); }