Ast.SetNode ParseSet(SeekableStringReader sr) { // set = '{' expr_list '}' . sr.Read(); // { sr.SkipWhitespace(); Ast.SetNode setnode = new Ast.SetNode(); List <Ast.INode> elts = ParseExprList(sr); if (!sr.HasMore()) { throw new ParseException("missing '}'"); } char closechar = sr.Read(); if (closechar != '}') { throw new ParseException("expected '}'"); } // make sure it has set semantics (remove duplicate elements) HashSet <Ast.INode> h = new HashSet <Ast.INode>(elts); setnode.Elements = new List <Ast.INode>(h); return(setnode); }
public void Visit(Ast.SetNode setnode) { HashSet <object> obj = new HashSet <object>(); foreach (Ast.INode node in setnode.Elements) { node.Accept(this); obj.Add(generated.Pop()); } generated.Push(obj); }
public void Visit(Ast.SetNode setnode) { result.AppendLine("(set"); indent++; foreach (Ast.INode node in setnode.Elements) { Indent(); node.Accept(this); result.AppendLine(","); } indent--; Indent(); result.Append(")"); }
private Ast.SetNode ParseSet(SeekableStringReader sr) { // set = '{' expr_list trailing_comma '}' . // trailing_comma = '' | ',' . sr.Read(); // { sr.SkipWhitespace(); Ast.SetNode setnode = new Ast.SetNode(); var elts = ParseExprList(sr); // handle trailing comma if present sr.SkipWhitespace(); if (!sr.HasMore()) { throw new ParseException("missing '}'"); } if (sr.Peek() == ',') { sr.Read(); } if (!sr.HasMore()) { throw new ParseException("missing '}'"); } char closechar = sr.Read(); if (closechar != '}') { throw new ParseException("expected '}'"); } // make sure it has set semantics (remove duplicate elements) var h = new HashSet <Ast.INode>(elts); setnode.Elements = new List <Ast.INode>(h); return(setnode); }