static int yieldSymbolParameters(PT_Symbols symbols, int idx, char *buf, int bufSize) { while (PT_hasSymbolsHead(symbols)) { idx = yieldSymbol(PT_getSymbolsHead(symbols), idx, buf, bufSize); symbols = PT_getSymbolsTail(symbols); if (PT_hasSymbolsHead(symbols)) { buf[idx++] = ','; } } return idx; }
PT_Symbols PT_foreachSymbolInSymbols(PT_Symbols symbols, PT_SymbolVisitor visitor, PT_SymbolVisitorData data) { ATermList store; PT_Symbols newSymbols = PT_makeSymbolsEmpty(); /* apply func to each element */ store = ATempty; while (PT_hasSymbolsHead(symbols)) { store = ATinsert(store, PT_SymbolToTerm( visitor(PT_getSymbolsHead(symbols), data))); if (PT_hasSymbolsTail(symbols)) { symbols = PT_getSymbolsTail(symbols); } else { break; } } /* create new list */ for (; !ATisEmpty(store); store = ATgetNext(store)) { PT_Symbol newSymbol = PT_SymbolFromTerm(ATgetFirst(store)); newSymbols = PT_makeSymbolsList(newSymbol,newSymbols); } return newSymbols; }
static int yieldSymbols(PT_Symbols symbols, int idx, char *buf, int bufSize) { while (PT_hasSymbolsHead(symbols)) { idx = yieldSymbol(PT_getSymbolsHead(symbols), idx, buf, bufSize); buf[idx++] = ' '; symbols = PT_getSymbolsTail(symbols); } return idx; }
static int lengthOfSymbols(PT_Symbols symbols) { int length = 0; while (PT_hasSymbolsHead(symbols)) { length = length + lengthOfSymbol(PT_getSymbolsHead(symbols)) + 1; symbols = PT_getSymbolsTail(symbols); } return length; }
ATbool PT_isProductionVariable(PT_Production prod) { /* This implements: "prod([varsym(<term>)],cf(<term>),<term>)" */ if (PT_isProductionDefault(prod)) { PT_Symbols lhs = PT_getProductionLhs(prod); PT_Symbol rhs = PT_getProductionRhs(prod); if ((PT_isSymbolCf(rhs) || PT_isSymbolLex(rhs)) && PT_hasSymbolsHead(lhs)) { PT_Symbol lhssym = PT_getSymbolsHead(lhs); PT_Symbols tail = PT_getSymbolsTail(lhs); return PT_isSymbolsEmpty(tail) && PT_isSymbolVarSym(lhssym); } return ATfalse; } return ATfalse; }
ATbool PT_isLexicalInjectionProd(PT_Production prod) { /* This implements: "prod([lex(<term>)],cf(<term>),<term>)" */ if (PT_isProductionDefault(prod)) { PT_Symbols lhs = PT_getProductionLhs(prod); PT_Symbol rhs = PT_getProductionRhs(prod); if (PT_isSymbolCf(rhs) && PT_hasSymbolsHead(lhs)) { PT_Symbol rhsNestedSymbol = PT_getSymbolSymbol(rhs); PT_Symbol lhssym = PT_getSymbolsHead(lhs); PT_Symbols tail = PT_getSymbolsTail(lhs); if (PT_isSymbolsEmpty(tail) && PT_isSymbolLex(lhssym)) { PT_Symbol lhsNestedSymbol = PT_getSymbolSymbol(lhssym); return PT_isEqualSymbol(rhsNestedSymbol, lhsNestedSymbol); } } return ATfalse; } return ATfalse; }