c# – Visual Studio中语法着色的粒度

我对语法着色很疯狂,其中不同的源代码元素以不同的颜色显示.如今,在我阅读代码的能力方面,良好的色彩正好在那里适当的缩进.

看看工具/自定义/字体和颜色,我可以看到,在某些情况下,细粒度;您可以为字符串和逐字字符串给出不同的颜色,例如.

但这里是一个典型的C#代码行:

Controls.Add(combo);

现在控件,添加和组合都是不同类型的东西,但是它们都是以相同的颜色呈现的,因为它们只是“标识符”.

当然有一种方法可以获得更多的粒度吗?至少颜色方法与对象不同?

解决方法

几点想法

首先,功能默认为“未实现”.为了实现功能,有人必须考虑功能.然后我们必须设计它,指定它,实施它,测试它,记录它,找到它的运输工具,并把它出门.如果任何一件事情没有发生,你就不会得到这个功能.据我所知,这些功能都没有发生.

第二,功能的优点是基于他们的净收益 – 即它们对我们客户的总体利益,减去实施它们的总成本.这里有非常真实的“机会成本”.我们实施的每个功能都是几十个功能,我们没有预算.因此,功能不仅需要值得开展工作,否则他们必须比我们的功能请求列表中的成千上万个功能更有益处.这是一个很高的条件来实现;大多数功能从未实现.

要解释我的第三点,你需要知道一些语言如何处理.我们从源代码开始,并将其“引用”为“令牌” – 单词.在这一点上,我们知道每个字符是否是数字,字符串,关键字,标识符,注释,预处理器指令等的一部分.列表速度非常快;我们可以轻松地在击键之间重新列出一个文件.

然后我们采取一系列令牌,并将其解析成“抽象语法树”.这决定了代码的哪些部分是类,表达式,局部变量声明,名称,赋值等等.解析也很快,但不如词法快.我们做一些技巧,像跳过解析方法体,直到有人实际看着它们.

最后,我们采用抽象语法树并对其进行语义分析;这将确定给定的名称是指一个类型,一个局部变量,一个命名空间,一个方法组,一个字段等等.我们做“顶级”语义分析,确定程序的类型层次结构和“方法级”语义分析,以确定每个方法中每个表达式的类型. “顶级”语义分析相当快,任何单独的方法分析都很快,但是仍然难以在键盘之间进行全面的语义分析.

显然,我们需要对智能感知进行全面的语义分析,但是我们可以通过弄清楚你当前正在键入哪种方法,并且只进行顶级和该方法的语义分析.

但着色必须在整个文件上工作;你不能仅仅将颜色化到光标所在的方法.因此,着色必须非常快,所以在历史上我们主要是基于词汇信息进行着色.

偶尔,我们可以找出特殊的东西,如“这个东西可能是一种类型的”吗?给它一种不同的颜色.但是,当给定的实体说出一个方法组vs,比如说一个代表类型的领域时,需要一个相当丰富的语义分析级别,我们目前在每个按键上都不执行.

现在,我们可以在这里做些事情.我们可以更聪明地了解对令牌流的编辑,并且只对树的编辑部分进行语法和语义分析.现在我们正在对这个领域进行一些研究,但只是研究;它可能永远不会使其成为产品.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


1:最直白的循环遍历方法,可以分为遍历key--value键值对以及所有的key两种表现形式2:用Linq的方式去查询(当然了这里要添加对应的命名空间 using System.Linq)如下为一个十分简单的代码示例:private void GetDicKeyByValue(){ Dicti...
private void ClearTextBox(){ foreach (var control in pnlDetail.Controls) { if (!(control is TextBox)) continue; var txtBox = (TextBox)control; txtBox.
原文叫看《墨攻》理解IOC概念 2006年多部贺岁大片以让人应接不暇的频率纷至沓来,其中张之亮的《墨攻》算是比较出彩的一部,讲述了战国时期墨家人革离帮助梁 国反抗赵国侵略的个人英雄主义故事,恢宏壮阔,浑雄凝重的历史场面相当震撼。其中有一个场景:当刘德华所饰的墨者革离到达梁国都城 下,城上梁国守军问:
System.Data.ConstraintException: Failed to enable constraints. One or more rows contain values violating non-null, unique, or foreign-key constraints.
Request.Form value was detected from the client在使用ASP.NET MVC3 开发系统的用了百度的UEditor编辑器提交表单时遇到检测到有潜在危险的 Request.Form,我百度一下,试了网上的方法,都没用。要在Web.config增加<h
右击文件夹->安全选项卡->添加->高级->立即查找Windows Server 2003:请您在目录添加IIS来宾帐号(IUSR_Hostname)的只读权限,以及Network Service组的读写修改权限。Windows Server 2000:请您在目录添加IIS来
<compilationdebug="true"><buildProviders><addextension=".html"type="System.Web.Compilation.PageBuildProvider&q
在ASP.NET MVC 中 Spring.NET 配置注入的时候,下面这方式是可行的。<spring> <context> <resource uri="config://spring/objects" /> </context>
Stopwatch stopwatch = new Stopwatch();stopwatch.Start();。。。。。中间代码。。。	stopwatch.Stop();	long result = stopwatch.ElapsedMilliseconds;sqlBulkCopy.Close()
问题描述 在asp.net mvc 下配置ueditor图片上传时总是提示:缺少十六进制字符错误(IE下提示),起初还以为是我上传的图片名称中有中文字符所致,后来我又上传了英文字符名字的图片发现还是一样的错误提示:◆无赖之下只好到火狐下看错误的详情:◆第二个错误我无法解决,先看第一个,输入地址显示错
已经安装net2.0 和3.5 ,但IIS里面却只有1.1开始→运行→CMDC:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i按回车键后便会开始自动安装,安装完重启一下IIS在IIS中ASP.NET选项卡便可以看到。注
根据传进来不同的值,调用不同的方法View Code protected void btn_SwitchClick(object sender, EventArgs e){ string result = ""; switch (ddlMethod.SelectedValue)
整理两个 在C#中,用正则表达式 获取网页源代码标签的属性或值的方法 :1、获取标签中的值: CSDN 结果:CSDN/// /// 获取字符中指定标签的值 /// /// 字符串 /// 标签 /// 值 public static string GetTitleContent(string st
/// <summary>/// 集合装换DataTable/// </summary>/// <param name="list">集合</param>/// <returns></returns>publ
将目录下面所有的 .cs 文件合并到一个 code.cs 文件中,写著作权复制代码时的必备良药 @echo off echo 将该目录下所有.cs文件的内容合并到一个 code.cs 文件中! pause dir /ad/s/b > folderPath.txt md codeTemp for
做接口开发的时候,往往接受参数或返回值是一个XML的字符串。如下图,不方便辨识 两种方法, 1.将它保存为xxx.xml,然后用浏览器打开。这种方法稍微有些麻烦。 2.使用 UltraEdit 工具
一个字段控制多个状态选项private void GenerateAdvice_OnClick(object sender, RoutedEventArgs e){ TestStatus c1 = TestStatus.A | TestStatus.C | TestStatus.E; v...
效果如下: 代码如下:
StartUp.cs public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseEndpoints(endpoints => { endpoints.MapControllerRoute(