有没有翻译源码分享的工具网站(在线翻译源码)

老铁们,大家好,相信还有很多朋友对于有没有翻译源码分享的工具网站和在线翻译源码的相关问题不太懂,没关系,今天就由我来为大家分享分享有没有翻译源码分享的工具网站以及在线翻译源码的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

引言

stringscriptText=”inta=1;intb=2;returna+b;”;varresult=Script.Run(scriptText);

「Roslyn」,可以支持这样的功能。

「Roslyn」提供了很多强大的功能,比如:

提供了一组丰富的API,允许开发人员在运行时动态地生成、编译和执行代码。这些API分为两类:编译API和工作空间API。编译API用于分析和生成代码,工作空间API用于与集成开发环境(IDE)进行交互。通过这些API,开发人员可以构建强大的代码分析和重构工具。支持对源代码进行静态分析,以便在编译期间检测潜在的代码问题。也支持编写自定义诊断和代码修复,这使得开发人员可以根据自己的需求创建特定的诊断和修复工具。Roslyn支持C和VB.NET的IDE集成很好。

Roslyn概述

概述内容包括:

介绍公开的编译器API编译器API(CompilerAPIs)诊断API(DiagnosticAPIs)脚本API(ScriptingAPIs)工作区API(WorkspacesAPIs)编译器流水线功能区域(CompilerPipelineFunctionalAreas)API层使用语法语法树(SyntaxTrees)语法节点(SyntaxNodes)语法标记(SyntaxToken)语法琐事(SyntaxTrivia)跨度(Spans)种类(Kinds)错误(Error)使用语义汇编(Compilation)符号(Symbols)语义模型(SemanticModel)使用工作区工作区(Workspace)解决方案,项目和文档(Solutions,ProjectsandDocuments)

传统上来说,编译器就是黑盒–源代码进入一端,经过一些神奇的过程,然后输出目标文件或者汇编代码。

随着这些工具变得越来越智能,它们需要访问编译器所具有的深层代码知识。这就是Roslyn的核心任务:打开这些黑盒子,让工具和终端用户能够分享编译器对代码的丰富信息。

RoslynSDK预览版包含了用于代码生成、分析和重构的最新语言对象模型的草案。

Roslyn通过提供与传统编译器流水线相对应的API层,将C2b2b2b;margin:10px0px;letter-spacing:2px;font-size:14px;word-spacing:2px;”>该流水线的每个阶段现在都是一个单独的组件。首先是解析阶段,源代码被标记化并解析为符合语言语法的语法结构。其次是声明阶段,对源代码和导入的元数据进行分析,形成命名符号。接下来是绑定阶段,将代码中的标识符与符号进行匹配。最后是发出阶段,编译器构建的所有信息作为一个程序集进行输出。

2.png

编译器将这些组件组合为一个单一的端到端整体。

这些体验可以在VisualStudio2013上通过“Roslyn”终端用户预览版中预览。这个预览版是为了构建和测试基于RoslynSDK的应用程序,并用于集成到VisualStudio中。但是,不需要终端用户预览版,可以独立于VisualStudio在自己的应用程序中使用RoslynAPI。

API层

编译器层包含与编译器流水线的每个阶段对应的对象模型,包括语法和语义信息。编译器层还包含编译器单次调用的不可变快照,包括程序集引用、编译器选项和源代码文件。

作为分析的一部分,编译器可以生成一组诊断信息,涵盖从语法、语义和明确赋值错误到各种警告和信息性诊断的所有内容。

以这种方式生成诊断信息的好处是与诸如MSBuild和VisualStudio等工具自然集成,这些工具依赖于诊断信息,用于诸如基于策略停止构建、在编辑器中显示实时波浪线和建议代码修复等功能。

脚本API(ScriptingAPIs)

工作区层包含WorkspaceAPI,用于对整个解决方案进行代码分析和重构的起点。它有助于将解决方案中的所有项目的信息组织成单个对象模型,并直接访问编译器层的对象模型,无需解析文件、配置选项或管理项目之间的依赖关系。

该层不依赖于VisualStudio组件。

编译器API公开的最基本数据结构是语法树。这些树表示源代码的词法和语法结构。它们具有两个重要目的:

允许工具(如集成开发环境、插件、代码分析工具和重构工具)查看和处理用户项目中源代码的语法结构。可以让工具(如重构工具和集成开发环境)以自然的方式创建、修改和重新排列源代码,而无需直接进行文本编辑。通过创建和操作语法树,工具可以轻松地创建和重新排列源代码。

语法树(SyntaxTrees)

语法树具有三个关键属性。第一个属性是语法树以完全保真度保存所有的源信息。这意味着语法树包含源文本中的每个信息片段,每个语法构造,每个词法标记,以及包括空格、注释和预处理指令在内的其他内容。例如,源代码中提到的每个字面值都会按照其输入方式进行精确表示。当程序不完整或格式错误时,语法树还会表示源代码中的错误,通过在语法树中表示被跳过或缺失的标记。

语法树的第三个属性是它们是不可变且线程安全的。这意味着一旦获取了一个树,它就是代码当前状态的快照,并且永远不会改变。这允许多个用户在不同线程中同时与相同的语法树交互,而无需进行锁定或复制。由于树是不可变的,不能直接对树进行修改,工厂方法通过创建树的其他快照来帮助创建和修改语法树。语法树在重用底层节点方面非常高效,因此可以快速重建新版本,并且占用很少的额外内存。

语法节点是语法树的主要元素之一。这些节点表示语法构造,例如声明、语句、子句和表达式。每个语法节点类别由一个派生自SyntaxNode的单独类表示。节点类的集合不可扩展。

每个节点都有一个ChildNodes方法,它返回一个基于节点在源代码中的位置的顺序列表,包含的是子节点,不包含标记。每个节点还有一组Descendant方法,如DescendantNodes、DescendantTokens或DescendantTrivia,表示根据该节点为根的子树中存在的所有节点、标记或附加信息的列表。

某些语法节点具有可选的子节点。例如,IfStatementSyntax具有可选的ElseClauseSyntax。如果子节点不存在,该属性将返回。

语法标记(SyntaxToken)

为了提高效率,SyntaxToken类型是CLR值类型。因此,与语法节点不同,只有一个结构用于表示所有类型的标记,其中包含根据所表示的标记类型具有不同含义的属性组合。

ValueText属性提供与Value属性相同的信息;但是,该属性的类型始终为String。在C2b2b2b;margin:10px0px;letter-spacing:2px;font-size:14px;word-spacing:2px;”>语法注释表示源文本中对于正常理解代码而言主要是无关紧要的部分,例如空格、注释和预处理指令。

您可以通过检查标记的LeadingTrivia或TrailingTrivia集合来访问注释。在解析源文本时,注释序列与标记关联起来。通常情况下,一个标记拥有在同一行上紧随其后的所有注释,直到下一个标记为止。在该行之后的任何注释与下一个标记关联。源文件中的第一个标记获取所有初始注释,而文件中最后一个注释序列附加到文件结束标记上,否则文件结束标记的宽度为零。

与语法标记一样,注释是值类型。单个SyntaxTrivia类型用于描述各种注释。

跨度(Spans)

每个节点都有两个TextSpan属性:Span和FullSpan。

FullSpan属性是包括节点正常跨度以及任何前导或尾随注释的文本跨度。

在块内的语句节点具有由单竖线(|)表示的跨度。它包括字符”thrownewException(“Notright.”);”。完整跨度由双竖线(||)表示。它包括与跨度相同的字符以及与前导和尾随注释相关联的字符。

种类(Kinds)

例如,一个BinaryExpressionSyntax类具有Left、OperatorToken和Right作为子节点。Kind属性区分是AddExpression、SubtractExpression还是MultiplyExpression类型的语法节点。

错误(Error)

首先,如果解析器期望某种类型的标记,但没有找到它,它可以在预期的位置将一个缺失的标记插入到语法树中。缺失的标记表示实际期望的标记,但它的范围为空,它的IsMissing属性返回true。

使用语义

例如,许多具有相同名称的类型、字段、方法和局部变量可能分散在源代码中。尽管每个标识符都是唯一不同的,但确定它实际引用的内容通常需要对语言规则有深入的了解。

除了源代码的语法模型外,语义模型还封装了语言规则,使您可以轻松区分这些元素。

汇编(Compilation)

与语法树类似,编译是不可变的。创建编译之后,您或其他人都无法对其进行更改。但是,您可以从现有编译创建一个新的编译,同时指定所做的更改。例如,您可以创建一个与现有编译在所有方面都相同的编译,只是可能包含一个额外的源文件或程序集引用。

符号(Symbols)

Compilation类型上的各种方法和属性帮助您查找符号。例如,您可以通过其常见的元数据名称查找已声明类型的符号。您还可以将整个符号表作为以全局命名空间为根的符号树进行访问。

符号在源代码和元数据之间提供了命名空间、类型和成员的共同表示。例如,源代码中声明的方法和从元数据导入的方法都由具有相同属性的IMethodSymbol表示。

语义模型(SemanticModel)

使用工作区

像集成开发环境(IDE)这样的宿主环境会为您提供与打开的解决方案相对应的工作区。此外,也可以通过简单地加载解决方案文件在IDE之外使用这个模型。

工作区(Workspace)

工作区提供对解决方案的当前模型的访问。当宿主环境发生变化时,工作区会触发相应的事件,并更新CurrentSolution属性。例如,当用户在与源代码文档对应的文本编辑器中输入时,工作区使用事件发出信号,表示解决方案的整体模型已经发生了变化,同时指明哪个文档被修改。您可以通过分析新模型的正确性、突出显示重要区域或提出代码更改建议来对这些变化做出反应。

尽管工作区在按键时可能会发生变化,但您可以与解决方案模型独立地进行操作。

项目是整体不可变解决方案模型的一部分。它代表所有源代码文档、解析和编译选项以及程序集和项目之间的引用。通过项目,您可以访问相应的编译,而无需确定项目依赖项或解析任何源文件。

以下图表显示了工作区与宿主环境、工具之间的关系以及如何进行编辑。

5.png

Roslyn提供了一套编译器API和工作区API,可以提供有关您的源代码的丰富信息,并与C和VB语言的交互使用以及将C595959;”>参考

https://github.com/dotnet/roslyn/blob/main/docs/wiki/Roslyn-Overview.md

?

关于有没有翻译源码分享的工具网站到此分享完毕,希望能帮助到您。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平