zoukankan      html  css  js  c++  java
  • Roslyn词法分析器初使用

    需:install-package:Microsoft.CodeAnalysis 

    using Microsoft.CodeAnalysis;
    using Microsoft.CodeAnalysis.CSharp.Syntax;
    using Microsoft.CodeAnalysis.VisualBasic.Syntax;
    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Reflection;
    using System.Text;
    using System.Threading.Tasks;


    namespace RoslynTest
    {
        class Program
        {
            static void Main(string[] args)
            {
                var text = @"
    namespace RoslynTest
    {
            public interface ICalculator
            {
               
                public static int Evaluate(string a,string b);
                public static string Evaluate2(string a1,string b1);
            }
    }";
                string path = @"E:ND.ApplicationND.Lib.ApplicationNDLibND.WebServiceND.WebService.ContractNDFront.WebService.ContracthotelIHotelFacility.cs";
                text = File.ReadAllText(path);
            SyntaxTree tree=  Microsoft.CodeAnalysis.CSharp.CSharpSyntaxTree.ParseText(text);
            var root = (Microsoft.CodeAnalysis.CSharp.Syntax.CompilationUnitSyntax)tree.GetRoot();
            var firstMember = root.Members[0];
            NamespaceDeclarationSyntax NameSpaceDeclaration = (NamespaceDeclarationSyntax)firstMember;
            InterfaceDeclarationSyntax interfaceDeclaration = (InterfaceDeclarationSyntax)NameSpaceDeclaration.Members[0];
            Console.WriteLine("命名空间:" + NameSpaceDeclaration.Name);
            Console.WriteLine("接口名:" + interfaceDeclaration.Identifier.Value);

               
            IEnumerable<SyntaxAnnotation> ss = interfaceDeclaration.GetAnnotations("ICalculator");
           ss.ToList().ForEach(x =>
           {
               Console.WriteLine("接口描述:" + x.Data); 
           });
          
            interfaceDeclaration.Members.ToList().ForEach(y =>
            {
                
                MethodDeclarationSyntax methodDeclaration = (MethodDeclarationSyntax)y;
                var paramsDeclaration = methodDeclaration.ParameterList.Parameters;
                
                Console.WriteLine("返回类型:" + methodDeclaration.ReturnType + "方法名称:" + methodDeclaration.Identifier);
                paramsDeclaration.ToList().ForEach(x =>
                {
                    
                    Console.WriteLine("参数类型:" + x.Type + ",参数名称:" + x.Identifier);
                });
            });
                
         
           
              Console.ReadKey();
            }

          
        }
    }

  • 相关阅读:
    C# RSA
    C# DES
    C# AES 加密
    【数据结构与算法分析(c语言)】 链表的游标实现 .h文件方法全实现
    ubuntu 14.04和16.04 解决 sql 导入中文乱码问题
    React Native 错误:A problem occurred configuring project ':app'. 和Execution failed for task ‘XXX’
    React Native与夜神模拟器连接第一次白屏没有显示Welcome to React Native
    吴恩达【深度学习工程师】 04.卷积神经网络 第三周目标检测 (2)YOLO算法
    吴恩达【深度学习工程师】 04.卷积神经网络 第三周目标检测 (1)基本的对象检测算法
    吴恩达【深度学习工程师】 04.卷积神经网络 第四周特殊应用(2)神经风格转换
  • 原文地址:https://www.cnblogs.com/taomylife/p/4727367.html
Copyright © 2011-2022 走看看