Пример #1
0
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;
}
Пример #2
0
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;
}
Пример #3
0
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;
}
Пример #4
0
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;
}
Пример #5
0
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;
}
Пример #6
0
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;
}