示例#1
0
 private int CompareSymbol(SymbolDatum x, SymbolDatum y)
 {
     if (!x.IsInterned)
     {
         if (!y.IsInterned)
         {
             return(Comparer <int> .Default.Compare(x.ID, y.ID));
         }
         else
         {
             return(-1);
         }
     }
     else
     {
         if (!y.IsInterned)
         {
             return(1);
         }
         else
         {
             return(string.Compare(x.Name, y.Name, StringComparison.Ordinal));
         }
     }
 }
示例#2
0
 public string VisitSymbol(SymbolDatum d)
 {
     if (d.IsInterned)
     {
         return("y" + d.Name);
     }
     else
     {
         return("u" + d.ID);
     }
 }
示例#3
0
            public bool VisitSymbol(SymbolDatum d)
            {
                bw.Write(B_SYMBOL);
                BigInteger index = ((IntDatum)(symbolMap[d])).Value;

                if (index >= (BigInteger)(int.MinValue) && index <= (BigInteger)(int.MaxValue))
                {
                    bw.Write(unchecked ((int)index));
                }
                else
                {
                    throw new IndexOutOfRangeException("Index doesn't fit in a 32-bit integer");
                }
                return(true);
            }
 public string VisitSymbol(SymbolDatum d)
 {
     if (d.IsInterned)
     {
         var result = CharParserContext.TryParse(Parser.ParseUnquotedSymbolThenEof, d.Name);
         if (result is ParseSuccess <string> )
         {
             return(d.Name);
         }
         else
         {
             return(d.Name.SymbolQuoted());
         }
     }
     else
     {
         return("g$" + d.ID);
     }
 }
 private bool EqualSymbol(SymbolDatum x, SymbolDatum y)
 {
     if (x.IsInterned != y.IsInterned)
     {
         return(false);
     }
     if (x.IsInterned)
     {
         return(string.Compare
                (
                    x.Name,
                    y.Name,
                    StringComparison.Ordinal
                ) == 0);
     }
     else
     {
         return(x.ID == y.ID);
     }
 }
 public State VisitSymbol(State state, SymbolDatum d) => state;
 public SetDatum VisitSymbol(SymbolDatum d) => SetDatum.Empty;
示例#8
0
 public SetDatum VisitSymbol(SymbolDatum d)
 {
     return(SetDatum.Singleton(d));
 }