随笔-341  评论-2670  文章-0  trackbacks-0
    隔了两个星期才更新,主要是因为之前有一个星期我拿来做了一个Ribbon的DEMO,将来打算用Ribbon来做IDE。另一个原因是这次去的的重大突破消耗了我整整一个星期的时间来完成,好久没有遇到这么困难的问题了……

    这次主要解决的问题有两个。第一个是如何从文法生成一个可以对付残缺不全的代码的语法分析器,当然这个已经被很多论文研究过无数遍了,我就不详细解释了。第二个是如何高效的进行分析。我们知道当代码高达10000行的时候,语法分析再怎么快也得花上几秒钟时间(C#写的,已经很快了,何况这段代码是生成的……)的。但是用户在按下“->”的时候根本来不及等你这么几秒,所以我想到了一个方法。

    用户写代码的时候总是会陷入思考的,这个时候后台的全文分析会跟上来,然后标记出“当前编辑语句”部分。如果你接下来快速输入,我除了再次启动后台的全文分析之外,我还会针对用户的输入来修改“当前编辑语句”的字符串然后针对这小小的几行代码用语法分析产生一个语句列表。这样的话UI线程里面的语法分析就快到可以忽略了,而且每隔几秒钟后台的全文分析就会赶上然后替换最新结果。这样可以保证你在打代码的时候有99%的概率我的语义分析可以正常工作。就算不能工作,也就是产生不出那个下拉列表,一般来说,这种情况只有那些打字的APM超过500的人才会碰到,正常人是不会碰到的……

    介绍了原理之后,我就来贴张图了。不过在我这个Demo里面你真的输入10000行代码还是会感觉到延迟的,那是因为我为了调试,在Tree里面每次都会产生一颗平均十几万行的文本表示的全文语法树,Windows的那个文本框性能太烂了……

    就贴几张图好了,首先是输入object,然后输入->,最后输入member;。写到->的时候已经出现了NativeXPointerMemberExpression了,下拉列表的所有信息已经完全出来了,哇哈哈。




posted on 2010-11-06 12:54 陈梓瀚(vczh) 阅读(7910) 评论(3)  编辑 收藏 引用 所属分类: 开发自己的IDE

评论:
# re: 开发自己的IDE(九) 2010-11-06 13:38 | DiryBoy
Orz!!  回复  更多评论
  
# re: 开发自己的IDE(九) 2010-11-10 11:23 | CR
Orz  回复  更多评论
  
# re: 开发自己的IDE(九) 2010-11-11 17:03 | mm
好强大!!!  回复  更多评论
  

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理