Beispiel #1
0
        public override RCSymbolScalar ParseSymbol(RCLexer lexer, RCToken token)
        {
            if (token.Text == "#")
            {
                return(RCSymbolScalar.Empty);
            }
            string[] parts = token.Text.Split(',');
            string   first = parts[0];

            // When "casting" strings into symbols, the initial # may be omitted
            // so that "a" becomes #a.
            if (first[0] == '#')
            {
                first = first.Substring(1);
            }
            RCToken        child  = lexer.LexSingle(first);
            object         part   = child.Parse(lexer);
            RCSymbolScalar result = new RCSymbolScalar(null, part);

            for (int i = 1; i < parts.Length; ++i)
            {
                child  = lexer.LexSingle(parts[i]);
                result = new RCSymbolScalar(result, child.Parse(lexer));
            }
            return(result);
        }
Beispiel #2
0
        public static RCSymbolScalar From(RCLexer lexer, string part)
        {
            RCToken token = lexer.LexSingle(part);

            if (token.Text.Length > 0 && token.Type == RCTokenType.Junk)
            {
                return(new RCSymbolScalar(RCSymbolScalar.Empty,
                                          string.Format("'{0}'", token.Text)));
            }
            else
            {
                object         val    = token.Parse(lexer);
                RCSymbolScalar result = val as RCSymbolScalar;
                if (result == null)
                {
                    return(new RCSymbolScalar(RCSymbolScalar.Empty, val));
                }
                else
                {
                    return(result);
                }
            }
        }