Exemplo n.º 1
0
 public Binding(NodeArgs args, Identifier name, Pattern pattern, IEnumerable<Node> body, params Node[] children)
     : base(args, children)
 {
     Name = name;
     Pattern = pattern;
     Body = body;
 }
Exemplo n.º 2
0
 public Module(NodeArgs args, QualifiedIdentifier name, IEnumerable<Node> body, params Node[] children)
     : base(args, children)
 {
     qualId = name;
     Name = qualId.Identifier;
     Body = body;
 }
Exemplo n.º 3
0
 public Binding(NodeArgs args, Identifier name, Pattern pattern, IEnumerable <Node> body, params Node[] children)
     : base(args, children)
 {
     Name    = name;
     Pattern = pattern;
     Body    = body;
 }
Exemplo n.º 4
0
 public Module(NodeArgs args, QualifiedIdentifier name, IEnumerable <Node> body, params Node[] children)
     : base(args, children)
 {
     qualId = name;
     Name   = qualId.Identifier;
     Body   = body;
 }
Exemplo n.º 5
0
 public QualifiedIdentifier(NodeArgs args, params Node[] children)
     : base(args, children)
 {
     Qualifiers = children
                  .Take(children.Length - 1)
                  .OfType <Identifier>()
                  .ToArray();
     Identifier = (Identifier)children.Last();
 }
Exemplo n.º 6
0
        public Node(NodeArgs args, params Node[] children)
        {
            this.SourceFile = args.SourceFile;
            this.Item = args.Item;
            this.Children = children;

            foreach (var child in this.Children)
                child.Parent = this;
        }
Exemplo n.º 7
0
 public QualifiedIdentifier(NodeArgs args, params Node[] children)
     : base(args, children)
 {
     Qualifiers = children
         .Take(children.Length - 1)
         .OfType<Identifier>()
         .ToArray();
     Identifier = (Identifier)children.Last();
 }
Exemplo n.º 8
0
        public Node(NodeArgs args, params Node[] children)
        {
            this.SourceFile = args.SourceFile;
            this.Item       = args.Item;
            this.Children   = children;

            foreach (var child in this.Children)
            {
                child.Parent = this;
            }
        }
Exemplo n.º 9
0
 public Whitespace(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 10
0
 public InlineComment(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 11
0
 public EndOfFile(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 12
0
 protected Comment(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 13
0
 public Source(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemplo n.º 14
0
 protected Token(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 15
0
 public Punct(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 16
0
 protected Comment(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 17
0
 public Pattern(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemplo n.º 18
0
 public Leaf(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 19
0
 public Leaf(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 20
0
 public Pattern(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemplo n.º 21
0
 public Punct(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 22
0
 public InlineComment(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 23
0
 public Module(NodeArgs args, Identifier name, IEnumerable<Node> body, params Node[] children)
     : base(args, children)
 {
     Name = name;
     Body = body;
 }
Exemplo n.º 24
0
        protected T Make <T>(SyntaxItem item, object parms, params Syntax.Node[] children)
            where T : Syntax.Node
        {
            var nodeArgs = new Syntax.NodeArgs();

            nodeArgs.SourceFile = this.SourceFile;
            nodeArgs.Item       = item;

            var parmValues = parms != null
                ? parms.GetType().GetProperties().ToDictionary(pi => pi.Name, pi => pi.GetValue(parms))
                : new Dictionary <string, object>();

            var ctors = typeof(T)
                        .GetConstructors()
                        .OrderByDescending(ctor => ctor.GetParameters().Length);

            if (children == null || children.Length == 0)
            {
                children = item.Results.ToArray();
            }

            var arguments = new List <object>();

            foreach (var ctor in ctors)
            {
                bool failed = false;
                foreach (var parm in ctor.GetParameters())
                {
                    object parmValue;

                    if (typeof(Syntax.NodeArgs).IsAssignableFrom(parm.ParameterType))
                    {
                        if (parm.Name != "args")
                        {
                            throw new InternalException(ErrorMessages.E_0001_ParserImpl_MakeNodeArgs);
                        }
                        arguments.Add(nodeArgs);
                    }
                    else if (typeof(Syntax.Node[]).IsAssignableFrom(parm.ParameterType))
                    {
                        if (parm.Name != "children")
                        {
                            throw new InternalException(ErrorMessages.E_0002_ParserImpl_MakeNodeChildren);
                        }
                        arguments.Add(children);
                    }
                    else if (parmValues.TryGetValue(parm.Name, out parmValue))
                    {
                        arguments.Add(parmValue);
                    }
                    else
                    {
                        failed = true;
                        break;
                    }
                }

                if (failed)
                {
                    continue;
                }

                return((T)ctor.Invoke(arguments.ToArray()));
            }

            throw new InternalException(string.Format(ErrorMessages.E_0003_ParserImpl_MakeNodeNoCtor, typeof(T).FullName));
        }
Exemplo n.º 25
0
 public ErrorSection(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemplo n.º 26
0
 public Literal(NodeArgs args, object value, Type valueType)
     : base(args)
 {
     this.Value = value;
     this.ValueType = valueType;
 }
Exemplo n.º 27
0
 public EndOfFile(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 28
0
 public Directive(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemplo n.º 29
0
 public Literal(NodeArgs args, object value, Type valueType)
     : base(args)
 {
     this.Value     = value;
     this.ValueType = valueType;
 }
Exemplo n.º 30
0
 public EndComment(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 31
0
 public Identifier(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 32
0
 public EndOfLine(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 33
0
 public EndOfLine(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 34
0
 protected Space(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 35
0
 public Source(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemplo n.º 36
0
 protected Token(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 37
0
 public Whitespace(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 38
0
 public Keyword(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 39
0
 public EndComment(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 40
0
 public Module(NodeArgs args, Identifier name, IEnumerable <Node> body, params Node[] children)
     : base(args, children)
 {
     Name = name;
     Body = body;
 }
Exemplo n.º 41
0
 public Identifier(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 42
0
 public Directive(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemplo n.º 43
0
 public Keyword(NodeArgs args)
     : base(args)
 {
 }
Exemplo n.º 44
0
 public ErrorSection(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemplo n.º 45
0
 protected Space(NodeArgs args)
     : base(args)
 {
 }