コード例 #1
0
ファイル: Binding.cs プロジェクト: apterid/apterid-bootstrap
 public Binding(NodeArgs args, Identifier name, Pattern pattern, IEnumerable<Node> body, params Node[] children)
     : base(args, children)
 {
     Name = name;
     Pattern = pattern;
     Body = body;
 }
コード例 #2
0
ファイル: Module.cs プロジェクト: apterid/apterid-bootstrap
 public Module(NodeArgs args, QualifiedIdentifier name, IEnumerable<Node> body, params Node[] children)
     : base(args, children)
 {
     qualId = name;
     Name = qualId.Identifier;
     Body = body;
 }
コード例 #3
0
ファイル: Binding.cs プロジェクト: apterid/apterid-bootstrap
 public Binding(NodeArgs args, Identifier name, Pattern pattern, IEnumerable <Node> body, params Node[] children)
     : base(args, children)
 {
     Name    = name;
     Pattern = pattern;
     Body    = body;
 }
コード例 #4
0
 public Module(NodeArgs args, QualifiedIdentifier name, IEnumerable <Node> body, params Node[] children)
     : base(args, children)
 {
     qualId = name;
     Name   = qualId.Identifier;
     Body   = body;
 }
コード例 #5
0
ファイル: Token.cs プロジェクト: apterid/apterid-bootstrap
 public QualifiedIdentifier(NodeArgs args, params Node[] children)
     : base(args, children)
 {
     Qualifiers = children
                  .Take(children.Length - 1)
                  .OfType <Identifier>()
                  .ToArray();
     Identifier = (Identifier)children.Last();
 }
コード例 #6
0
ファイル: Node.cs プロジェクト: apterid/apterid-bootstrap
        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;
        }
コード例 #7
0
ファイル: Token.cs プロジェクト: apterid/apterid-bootstrap
 public QualifiedIdentifier(NodeArgs args, params Node[] children)
     : base(args, children)
 {
     Qualifiers = children
         .Take(children.Length - 1)
         .OfType<Identifier>()
         .ToArray();
     Identifier = (Identifier)children.Last();
 }
コード例 #8
0
ファイル: Node.cs プロジェクト: apterid/apterid-bootstrap
        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;
            }
        }
コード例 #9
0
ファイル: Space.cs プロジェクト: apterid/apterid-bootstrap
 public Whitespace(NodeArgs args)
     : base(args)
 {
 }
コード例 #10
0
ファイル: Space.cs プロジェクト: apterid/apterid-bootstrap
 public InlineComment(NodeArgs args)
     : base(args)
 {
 }
コード例 #11
0
ファイル: Space.cs プロジェクト: apterid/apterid-bootstrap
 public EndOfFile(NodeArgs args)
     : base(args)
 {
 }
コード例 #12
0
ファイル: Space.cs プロジェクト: apterid/apterid-bootstrap
 protected Comment(NodeArgs args)
     : base(args)
 {
 }
コード例 #13
0
ファイル: Source.cs プロジェクト: apterid/apterid-bootstrap
 public Source(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
コード例 #14
0
ファイル: Token.cs プロジェクト: apterid/apterid-bootstrap
 protected Token(NodeArgs args)
     : base(args)
 {
 }
コード例 #15
0
ファイル: Token.cs プロジェクト: apterid/apterid-bootstrap
 public Punct(NodeArgs args)
     : base(args)
 {
 }
コード例 #16
0
 protected Comment(NodeArgs args)
     : base(args)
 {
 }
コード例 #17
0
ファイル: Pattern.cs プロジェクト: apterid/apterid-bootstrap
 public Pattern(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
コード例 #18
0
 public Leaf(NodeArgs args)
     : base(args)
 {
 }
コード例 #19
0
ファイル: Leaf.cs プロジェクト: apterid/apterid-bootstrap
 public Leaf(NodeArgs args)
     : base(args)
 {
 }
コード例 #20
0
ファイル: Pattern.cs プロジェクト: apterid/apterid-bootstrap
 public Pattern(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
コード例 #21
0
ファイル: Token.cs プロジェクト: apterid/apterid-bootstrap
 public Punct(NodeArgs args)
     : base(args)
 {
 }
コード例 #22
0
 public InlineComment(NodeArgs args)
     : base(args)
 {
 }
コード例 #23
0
ファイル: Module.cs プロジェクト: apterid/apterid-bootstrap
 public Module(NodeArgs args, Identifier name, IEnumerable<Node> body, params Node[] children)
     : base(args, children)
 {
     Name = name;
     Body = body;
 }
コード例 #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));
        }
コード例 #25
0
 public ErrorSection(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
コード例 #26
0
ファイル: Literal.cs プロジェクト: apterid/apterid-bootstrap
 public Literal(NodeArgs args, object value, Type valueType)
     : base(args)
 {
     this.Value = value;
     this.ValueType = valueType;
 }
コード例 #27
0
 public EndOfFile(NodeArgs args)
     : base(args)
 {
 }
コード例 #28
0
ファイル: Source.cs プロジェクト: apterid/apterid-bootstrap
 public Directive(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
コード例 #29
0
 public Literal(NodeArgs args, object value, Type valueType)
     : base(args)
 {
     this.Value     = value;
     this.ValueType = valueType;
 }
コード例 #30
0
ファイル: Space.cs プロジェクト: apterid/apterid-bootstrap
 public EndComment(NodeArgs args)
     : base(args)
 {
 }
コード例 #31
0
ファイル: Token.cs プロジェクト: apterid/apterid-bootstrap
 public Identifier(NodeArgs args)
     : base(args)
 {
 }
コード例 #32
0
ファイル: Space.cs プロジェクト: apterid/apterid-bootstrap
 public EndOfLine(NodeArgs args)
     : base(args)
 {
 }
コード例 #33
0
 public EndOfLine(NodeArgs args)
     : base(args)
 {
 }
コード例 #34
0
ファイル: Space.cs プロジェクト: apterid/apterid-bootstrap
 protected Space(NodeArgs args)
     : base(args)
 {
 }
コード例 #35
0
ファイル: Source.cs プロジェクト: apterid/apterid-bootstrap
 public Source(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
コード例 #36
0
ファイル: Token.cs プロジェクト: apterid/apterid-bootstrap
 protected Token(NodeArgs args)
     : base(args)
 {
 }
コード例 #37
0
 public Whitespace(NodeArgs args)
     : base(args)
 {
 }
コード例 #38
0
ファイル: Token.cs プロジェクト: apterid/apterid-bootstrap
 public Keyword(NodeArgs args)
     : base(args)
 {
 }
コード例 #39
0
 public EndComment(NodeArgs args)
     : base(args)
 {
 }
コード例 #40
0
 public Module(NodeArgs args, Identifier name, IEnumerable <Node> body, params Node[] children)
     : base(args, children)
 {
     Name = name;
     Body = body;
 }
コード例 #41
0
ファイル: Token.cs プロジェクト: apterid/apterid-bootstrap
 public Identifier(NodeArgs args)
     : base(args)
 {
 }
コード例 #42
0
ファイル: Source.cs プロジェクト: apterid/apterid-bootstrap
 public Directive(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
コード例 #43
0
ファイル: Token.cs プロジェクト: apterid/apterid-bootstrap
 public Keyword(NodeArgs args)
     : base(args)
 {
 }
コード例 #44
0
 public ErrorSection(NodeArgs args, params Node[] children)
     : base(args, children)
 {
 }
コード例 #45
0
 protected Space(NodeArgs args)
     : base(args)
 {
 }