Пример #1
0
static void
collect_sorts(SDF_Grammar grammar, SDF_SymbolList *sorts)
{
  
  if (SDF_isGrammarSorts(grammar)) {
    SDF_Symbols symbols = SDF_getGrammarSymbols(grammar);
    SDF_SymbolList symbolList = SDF_getSymbolsList(symbols);
    while (!SDF_isSymbolListEmpty(symbolList)) {
      SDF_Symbol symbol = SDF_getSymbolListHead(symbolList);

      if (SDF_isSymbolSort(symbol)) {
        if (SDF_isSymbolListEmpty(*sorts)) {
	  *sorts = SDF_makeSymbolListSingle(symbol);
        }
        else {
	  *sorts = SDF_makeSymbolListMany(symbol, 
                                          SDF_makeLayoutEmpty(),
                                          *sorts);
        }
      }

      if (SDF_isSymbolListSingle(symbolList)) {
	break;
      }
      symbolList = SDF_getSymbolListTail(symbolList);
    }
  }

}
Пример #2
0
static PT_Symbols SDFSymbolsToPtSymbols(SDF_Symbols sdfSymbols)
{
  SDF_SymbolList sdfSymbolList = SDF_getSymbolsList(sdfSymbols);
  PT_Symbols ptSymbols = PT_makeSymbolsEmpty();

  while (SDF_hasSymbolListHead(sdfSymbolList)) {
    SDF_Symbol sdfSymbol = SDF_getSymbolListHead(sdfSymbolList);
    PT_Symbol ptSymbol = SDFSymbolToPtSymbol(sdfSymbol);

    ptSymbols = PT_appendSymbols(ptSymbols, ptSymbol);


    if (SDF_isSymbolListSingle(sdfSymbolList)) {
      break;
    }
    sdfSymbolList = SDF_getSymbolListTail(sdfSymbolList);
  }

  return ptSymbols;
}