示例#1
0
        /// <summary>
        /// 初始化类<see cref="FileElement"/>。
        /// </summary>
        /// <param name="source">文件代码。</param>
        public FileElement(string source)
        {
            using var reader = new SourceReader(source);
            reader.EscapeWhiteSpace();
            while (reader.CanRead)
            {
                switch (reader.Current)
                {
                case 'u':    //using
                {
                    var keyword = reader.ReadUntil();
                    if (keyword == "using")
                    {
                        AddElement(new UsingElement(reader.ReadUntil(';').Trim(), this));
                        reader.Offset();
                        break;
                    }

                    throw new Exception($"不支持:{keyword}关键词!");
                }

                case 'n':    //namespace
                {
                    var keyword = reader.ReadUntil();
                    if (keyword == "namespace")
                    {
                        var @namespace = new NamespaceElement(reader.ReadUntil('{').Trim(), this);
                        @namespace.Init(reader);
                        AddElement(@namespace);
                        break;
                    }
                    throw new Exception($"不支持:{keyword}关键词!");
                }

                case '/':
                {
                    if (reader.IsNext("/*"))
                    {
                        AddElement(new CommentElement(reader.ReadUntil("*/"), this));
                    }
                    else if (reader.IsNext("//"))
                    {
                        AddElement(new CommentElement(reader.ReadLine()?.Trim() + "\r\n", this));
                    }
                    else
                    {
                        throw new Exception("非法字符串!");
                    }
                }
                break;

                case '[':
                    AddElement(new AttributeElement(reader.ReadQuoteBlock('[', ']'), this));
                    break;
                }
                reader.EscapeWhiteSpace();
            }
        }
示例#2
0
 /// <summary>
 /// 读取注释。
 /// </summary>
 /// <param name="reader">源代码读取器。</param>
 protected void ReadComment(SourceReader reader)
 {
     if (reader.IsNext("/*"))
     {
         AddElement(new CommentElement(reader.ReadUntil("*/"), this));
     }
     else if (reader.IsNext("//"))
     {
         AddElement(new CommentElement(reader.ReadLine()?.Trim(), this));
     }
     else
     {
         throw new Exception("非法字符串!");
     }
 }