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