Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
 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(")");
 }
Esempio n. 4
0
        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);
        }