コード例 #1
0
ファイル: SDFME-utils.c プロジェクト: codyhanson/sdfmetz
ATbool SDF_hasPreferAttribute(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_isAttributePrefer(attr)) {
        found = ATtrue;
      }

      if (SDF_isAttributeListSingle(attrList)) {
        break;
      }
      attrList = SDF_getAttributeListTail(attrList);
    }
  }
  return found;
}
コード例 #2
0
static PT_Attr SDFAttributeToPtAttr(SDF_Attribute sdfAttribute)
{
  PT_Attr ptAttr = NULL;

  if (SDF_isAttributeBracket(sdfAttribute)) {
    ptAttr = PT_makeAttrBracket();         
  }
  else if (SDF_isAttributeReject(sdfAttribute)) {
    ptAttr = PT_makeAttrReject();         
  }
  else if (SDF_isAttributePrefer(sdfAttribute)) {
    ptAttr = PT_makeAttrPrefer();         
  }
  else if (SDF_isAttributeAvoid(sdfAttribute)) {
    ptAttr = PT_makeAttrAvoid();         
  }
  else if (SDF_isAttributeId(sdfAttribute)) {
    SDF_ModuleName sdfModuleName = SDF_getAttributeModuleName(sdfAttribute);
    SDF_ModuleId  sdfModuleId = SDF_getModuleNameModuleId(sdfModuleName);
    char *str = PT_yieldTree((PT_Tree) sdfModuleId);
    ptAttr = PT_makeAttrId(str);         
  }
  else if (SDF_isAttributeAssoc(sdfAttribute)) {
    SDF_Associativity sdfAssoc = SDF_getAttributeAssociativity(sdfAttribute);
    PT_Associativity ptAssoc = NULL;

    if (SDF_isAssociativityLeft(sdfAssoc)) {
      ptAssoc = PT_makeAssociativityLeft();
    }
    else if (SDF_isAssociativityRight(sdfAssoc)) {
      ptAssoc = PT_makeAssociativityRight();
    }
    else if (SDF_isAssociativityNonAssoc(sdfAssoc)) {
      ptAssoc = PT_makeAssociativityNonAssoc();
    }
    else if (SDF_isAssociativityAssoc(sdfAssoc)) { 
      ptAssoc = PT_makeAssociativityAssoc();
    }

    ptAttr = PT_makeAttrAssoc(ptAssoc);
  }
  else if (SDF_isAttributeId(sdfAttribute)) {
    char *moduleName = PT_yieldTreeToString((PT_Tree) sdfAttribute, ATfalse);
    ptAttr = PT_makeAttrId(moduleName);
  }
  else if (SDF_isAttributeTerm(sdfAttribute)) {
    ATerm term = ATmake(PT_yieldTreeToString((PT_Tree) sdfAttribute, ATfalse));
    if (term == NULL) {
      ATerror("SDFAttributeToPtAttr (term): unable to convert %s\n",
	      PT_yieldTreeToString((PT_Tree) sdfAttribute, ATfalse));
      ptAttr = NULL;
    }
    else {
      ptAttr = PT_makeAttrTerm(term);
    }
  }
  else {
     ATerror("SDFAttributeToPtAttr: unable to convert %s\n", 
	     PT_yieldTreeToString((PT_Tree) sdfAttribute, ATfalse));
     ptAttr = NULL;
  }

  return ptAttr;
}