public object Visit(ASTExplicitAtom node, object data) { IQueryAtom atom = null; var symbol = node.Symbol; switch (symbol) { case "*": atom = new AnyAtom(builder); break; case "A": atom = new AliphaticAtom(builder); break; case "a": atom = new AromaticAtom(builder); break; case "o": case "n": case "c": case "s": case "p": case "as": case "se": var atomSymbol = symbol.Substring(0, 1).ToUpperInvariant() + symbol.Substring(1); atom = new AromaticSymbolAtom(atomSymbol, builder); break; case "H": atom = new HydrogenAtom(builder) { Symbol = symbol.ToUpperInvariant(), MassNumber = 1 }; break; case "D": atom = new HydrogenAtom(builder) { Symbol = symbol.ToUpperInvariant(), MassNumber = 2 }; break; case "T": atom = new HydrogenAtom(builder) { Symbol = symbol.ToUpperInvariant(), MassNumber = 3 }; break; default: atom = new AliphaticSymbolAtom(symbol, builder); break; } return(atom); }
public object Visit(ASTExplicitAtom node, object data) { System.Console.Out.WriteLine(IndentString() + node + " " + node.Symbol); ++indent; data = node.ChildrenAccept(this, data); --indent; return(data); }
public object Visit(ASTExplicitAtom node, object data) { data = data + node.Symbol; // TODO: ring handling! return(data); }