Esempio n. 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);
        }
Esempio n. 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);
                }
            }
        }
Esempio n. 3
0
        public override void AcceptScalar(object state, RCToken token, RCLexer lexer)
        {
            State s = (State)state;

            // Move the column number forward.
            s._tcolumn = (s._tcolumn + 1) % s._tnames.Count;
            // Create the cube if necessary.
            if (s._cube == null)
            {
                s._cube = new RCCube(s._tlcolnames);
            }
            if (s._tcolumn < s._tlcolnames.Count)
            {
                string colname = s._tnames[s._tcolumn];
                char   letter  = colname[0];
                switch (letter)
                {
                case 'G':
                    s._global = token.ParseLong(lexer);
                    break;

                case 'E':
                    s._event = token.ParseLong(lexer);
                    break;

                case 'T':
                    s._time = token.ParseTime(lexer);
                    break;

                case 'S':
                    s._symbol = token.ParseSymbol(lexer);
                    break;

                default: throw new Exception(
                              "Unknown timeline column with letter: " + letter);
                }
            }
            else
            {
                object val = token.Parse(lexer);
                if (val != null)
                {
                    ColumnBase column = s._cube.GetColumn(s._tnames[s._tcolumn]);
                    if (s._canonical && column != null && column is RCCube.ColumnOfNothing)
                    {
                        s._cube.UnreserveColumn(s._tnames[s._tcolumn]);
                    }
                    s._cube.WriteCell(s._tnames[s._tcolumn], s._symbol, val, -1, true, true);
                }
                else
                {
                    s._cube.ReserveColumn(s._tnames[s._tcolumn], canonical: s._canonical);
                }
            }
            // if (s._forceAxisWrite || s._tcolumn == s._tnames.Count - 1)
            if (s._tcolumn == s._tnames.Count - 1)
            {
                // If there is no time column in the source text then create a
                // series of ascending integers.
                if (!s._hasT)
                {
                    ++s._event;
                }
                s._cube.Axis.Write(s._global, s._event, s._time, s._symbol);
                // s._forceAxisWrite = false;
            }
        }