VSX开发之语言服务系列(8)——智能感知
摘要:回顾在之前的系列中,我们除了介绍了ManagedMyC这个例子、手动构建了一个SimpleLSHost,主要的精力都放在了Lex和Yacc中。之所以这样安排,因为我觉得“内功”比“招式”重要的多。不过对于学习而言,一上来就接触深层次的东西往往是个艰苦的过程。正因为如此,在接下来的几篇中,我将要开始介绍语言服务的各种“招式”,那...
阅读全文
VSX开发之语言服务系列(7)——Babel面向MPLex和MPPG的接口
摘要:前言在上一篇中,我们用自己简陋的Scanner和Parser代替了ManagedMyC中的Scanner和Parser,最后得到个只实现简单语法高亮的语言服务。在继续讨论以前,先来看看托管Babel的代码。我曾经耐下心来阅读过Babel的代码,我发现其实Babel不仅提供了面向底层MPLex和MPPG的接口,还实现了一些面向IDE的接口。理解前者有助于实现语言服务的核心功能,理解后者有助于在IDE...
阅读全文
VSX开发之语言服务系列(9)——插曲MPPG
摘要:前言本文旨在深入详解MPPG,掌握它对于编写parser是必须的。本文的行文思路是根据SDK额外文档MPPG.pdf中的内容,可以在如下路径下找到该文档:C:\Program Files\Microsoft Visual Studio 2008 SDK\VisualStudioIntegration\ExtraDocumentation。本文适合那些对parser.y一知半解的读者阅读。概述MPP...
阅读全文
VSX开发之语言服务系列(6)——Lex和Yacc
摘要:前言当我们熟悉了如何构建起自己的语言服务之后,剩下的问题就是真正的完成扫描和解析,任何一个优秀的语言服务都少不了优秀的扫描程序和解析程序。编写扫描程序和解析程序有很多种方式,我想Lex和Yacc是比较常用的,否则微软也不会去实现一个基于C#的Lex和Yacc(我指的是MPLEX 和 MPPG)。俗话说磨刀不误砍柴,我们先来了解一下Lex和Yacc。本文的部分内容摘自:http://www.ibm....
阅读全文
VSX开发之语言服务系列(5)——构建自己的Scanner和Pareser
摘要:回顾在上一篇中,我们从一个空Package开始创建了一个语言服务的基本架构,并且借用ManagedMyC的Scanner和Parser。这篇中,我们将完成一个简单的Scanner,先看下效果图: 可以看到在这个语言服务中,大写字母被着色成红色,小写字母是紫色,数字是蓝色,其他字符时黑色的。接下来我们就来实现这个功能。lexer.lex首先修改lexer.lex。删除原有的代码,加入如下代码:暂时不...
阅读全文
VSX开发之语言服务系列(4)——从空Package开始构建语言服务框架
摘要:回顾在前面两篇中,我们研究了ManagedMyC这个例子的代码结构,了解了一个语言服务基本组成以及Managed Babel在语言服务中是如何工作的。在接下来的两篇中,我将从一个空的集成模式Package开始,一步步创建一个简单的语言服务:在这个语言中,没有语法,我们只是简单的利用着色器区分数字和字母,该服务定义的文件后缀为".sls"。逐步开始一、创建空Package语言服务的载体是包,因此我们...
阅读全文
VSX开发之语言服务系列(3)——再来看看ManagedMyC
摘要:回顾在前面一篇中,我们浏览了ManagedMyC这个例子,其中的代码虽然不算庞大,但是有很多令人困惑的地方。这一篇中,我们来再来慢慢看看代码。Babel其实一直很困惑,为什么微软找这么个名字。反正不管那么多,只要记住,所谓的Babel(这里特指托管的Babel)就是帮助我们开发语言服务的一系列文件。在ManagedMyC这个例子中它们被放在ManagedBabel文件夹中,而且是以连接的形式。实际...
阅读全文
VSX开发之语言服务系列(2)——从一个经典的例子开始
摘要:准备工作我打算在这篇中介绍一个完整的例子:ManagedMyC,这个例子包含在SDK中,在调试前请先安装SDK。在Microsoft Visual Studio 2008 SDK的Samples中,找到这个例子,然后在Visual Studio中打开:调试打开后,你可以编译调试。这是个集成模式的例子,默认在实验室环境下加载这个语言服务包,所以你将看到这样的结果:事实上此时,我们的包还没有加载,语言...
阅读全文
VSX开发之语言服务系列(1)——开场白
摘要:第一句总是废话的开始动手编写这个系列是出于对前面一段时间开发语言服务过程的总结,经常把自己掌握或没有完全掌握的东西写下来有助于加深印象。由于本人才疏浅薄,也是刚接触VSX方面的开发,难免有些错误的地方,还请各位大侠多多包含,多多指正。准备工作由于项目的需要,在产品中需要集成某个语言的服务,当然我们的产品首先本身就是一个VSX产品。我“有幸获得”了这个任务,刚开始接触语言服务...
阅读全文
在Visual Studio2008中搭建lex和yacc调试环境
摘要:本文为原创,部分bat代码来自熊春雷前辈的博文:http://blog.csdn.net/pandaxcl/archive/2006/07/04/873898.aspx为什么要使用lex和yacc 最近的项目需要写一个Language Service,于是不可避免的涉足到了lex和yacc。lex和yacc原本是UNIX系统下的两个工具,用于编写涉及文本分析的程序。在Linux下面有两个GNU的工...
阅读全文
(翻译)LearnVSXNow! #9 - 创建一个工具集 - 重构服务
摘要:在第6和第7部分我们创建了一个StartupToolset示例package,并手动添加了菜单命令和Calculate tool window。本文将重构package,尝试基于服务的代码结构。 重构这个package不仅适用现在这个package,而且能提取那些在今后的package开发中可重用的代码,使代码变得可读性更强。下一篇将涉及这方面,现在我们只关注服务。创建一个Startup Too...
阅读全文
(翻译)LearnVSXNow! #6 - 创建我们第一个工具集 - 序幕
摘要:在前面的文章中,我们在向导的帮助下创建了一些小的VSPackages。在第五讲中我们整理了VSX的一些思路和概念,深入VSPackages 了解了packages如何工作以及服务的机制。在这篇文章中我们继续向前。 本文我们开始创建一个工具集来帮助我们创建容易编写和理解的代码。我计划用如下三个主题来讨论: 序幕:我们创建示例包的第一部分,这将是toolset的基础。在这篇中我们将手动添加菜单命令探...
阅读全文
(翻译)LearnVSXNow! #7 – 创建一个工具集 – 完成示例程序
摘要: 在前面的文章中,创建了一个示例:我们向一个空的package添加了一个菜单命令功能,同时探索了Visual Studio Command Table文件的作用和用法。本文我们将手动为其添加一个tool window。 为工程添加一个tool window 我们将创建一个像下面这样的tool window (译者注:原...
阅读全文