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); }
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); } } }
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; } }