SDF_Production PTProductionToSDFProduction(PT_Production ptProduction) { PT_Symbols ptLhs; PT_Symbol ptRhs; PT_Attributes ptAttributes; SDF_Symbols sdfLhs; SDF_Symbol sdfRhs; SDF_Attributes sdfAttributes; ptLhs = PT_getProductionLhs(ptProduction); sdfLhs = PTSymbolsToSDFSymbols(ptLhs); ptRhs = PT_getProductionRhs(ptProduction); sdfRhs = PTSymbolToSDFSymbol(ptRhs); ptAttributes = PT_getProductionAttributes(ptProduction); sdfAttributes = PTAttributesToSDFAttributes(ptAttributes); return SDF_makeProductionProd(sdfLhs, SDF_makeLayoutSpace(), SDF_makeLayoutSpace(), sdfRhs, SDF_makeLayoutSpace(), sdfAttributes); }
static int lengthOfProd(PT_Production prod) { PT_Symbol rhs = PT_getProductionRhs(prod); if (PT_isProductionList(prod)) { return lengthOfSymbol(rhs); } else { PT_Symbols lhs = PT_getProductionLhs(prod); PT_Attributes attrs = PT_getProductionAttributes(prod); return lengthOfSymbols(lhs) + 4 + lengthOfSymbol(rhs) + lengthOfAttributes(attrs); } }
static int yieldProd(PT_Production prod, int idx, char *buf, int bufSize) { PT_Symbol rhs = PT_getProductionRhs(prod); if (PT_isProductionList(prod)) { idx = yieldSymbol(rhs, idx, buf, bufSize); } else { PT_Symbols lhs = PT_getProductionLhs(prod); PT_Attributes attrs = PT_getProductionAttributes(prod); idx = yieldSymbols(lhs, idx, buf, bufSize); buf[idx++] = '-'; buf[idx++] = '>'; buf[idx++] = ' '; idx = yieldSymbol(rhs, idx, buf, bufSize); idx = yieldAttributes(attrs, idx, buf, bufSize); } return idx; }