Exemple #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;
 }
Exemple #2
0
 public Module(NodeArgs args, QualifiedIdentifier name, IEnumerable<Node> body, params Node[] children)
     : base(args, children)
 {
     qualId = name;
     Name = qualId.Identifier;
     Body = body;
 }
Exemple #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;
 }
Exemple #4
0
 public Module(NodeArgs args, QualifiedIdentifier name, IEnumerable <Node> body, params Node[] children)
     : base(args, children)
 {
     qualId = name;
     Name   = qualId.Identifier;
     Body   = body;
 }
Exemple #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();
 }
Exemple #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;
        }
Exemple #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();
 }
Exemple #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;
            }
        }
Exemple #9
0
 public Whitespace(NodeArgs args)
     : base(args)
 {
 }
Exemple #10
0
 public InlineComment(NodeArgs args)
     : base(args)
 {
 }
Exemple #11
0
 public EndOfFile(NodeArgs args)
     : base(args)
 {
 }
Exemple #12
0
 protected Comment(NodeArgs args)
     : base(args)
 {
 }
Exemple #13
0
 public Source(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemple #14
0
 protected Token(NodeArgs args)
     : base(args)
 {
 }
Exemple #15
0
 public Punct(NodeArgs args)
     : base(args)
 {
 }
Exemple #16
0
 protected Comment(NodeArgs args)
     : base(args)
 {
 }
Exemple #17
0
 public Pattern(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemple #18
0
 public Leaf(NodeArgs args)
     : base(args)
 {
 }
Exemple #19
0
 public Leaf(NodeArgs args)
     : base(args)
 {
 }
Exemple #20
0
 public Pattern(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemple #21
0
 public Punct(NodeArgs args)
     : base(args)
 {
 }
Exemple #22
0
 public InlineComment(NodeArgs args)
     : base(args)
 {
 }
Exemple #23
0
 public Module(NodeArgs args, Identifier name, IEnumerable<Node> body, params Node[] children)
     : base(args, children)
 {
     Name = name;
     Body = body;
 }
Exemple #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));
        }
 public ErrorSection(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemple #26
0
 public Literal(NodeArgs args, object value, Type valueType)
     : base(args)
 {
     this.Value = value;
     this.ValueType = valueType;
 }
Exemple #27
0
 public EndOfFile(NodeArgs args)
     : base(args)
 {
 }
Exemple #28
0
 public Directive(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemple #29
0
 public Literal(NodeArgs args, object value, Type valueType)
     : base(args)
 {
     this.Value     = value;
     this.ValueType = valueType;
 }
Exemple #30
0
 public EndComment(NodeArgs args)
     : base(args)
 {
 }
Exemple #31
0
 public Identifier(NodeArgs args)
     : base(args)
 {
 }
Exemple #32
0
 public EndOfLine(NodeArgs args)
     : base(args)
 {
 }
Exemple #33
0
 public EndOfLine(NodeArgs args)
     : base(args)
 {
 }
Exemple #34
0
 protected Space(NodeArgs args)
     : base(args)
 {
 }
Exemple #35
0
 public Source(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemple #36
0
 protected Token(NodeArgs args)
     : base(args)
 {
 }
Exemple #37
0
 public Whitespace(NodeArgs args)
     : base(args)
 {
 }
Exemple #38
0
 public Keyword(NodeArgs args)
     : base(args)
 {
 }
Exemple #39
0
 public EndComment(NodeArgs args)
     : base(args)
 {
 }
Exemple #40
0
 public Module(NodeArgs args, Identifier name, IEnumerable <Node> body, params Node[] children)
     : base(args, children)
 {
     Name = name;
     Body = body;
 }
Exemple #41
0
 public Identifier(NodeArgs args)
     : base(args)
 {
 }
Exemple #42
0
 public Directive(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemple #43
0
 public Keyword(NodeArgs args)
     : base(args)
 {
 }
 public ErrorSection(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
Exemple #45
0
 protected Space(NodeArgs args)
     : base(args)
 {
 }