SUMTEC -- There's a thing in my bloglet.

But it's not only one. It's many. It's the same as other things but it exactly likes nothing else...

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  205 随笔 :: 19 文章 :: 1627 评论 :: 9 Trackbacks


我记得吊胃口III里面给大家演示了一个着色的效果,是我手动进行着色的。我还记得有人说比较Cool,这句话激励我不停的朝这个方向努力,现在这个程序就是自动进行着色处理的。实际上着色处理是在正则表达式分析完成之后才能够进行的,因此我觉得离最终能够“编译”也不远了。虽然不远,但我估计也得要一个礼拜以上,因为这也不是一件简单的事情,如果再加上智能提示、数型结构图等等,那就更加不知道要到什么时候才能够完成了。

在这里下载

大家拿到一个可以尽情测试,上面的那个图片已经给大家显示各种正确的和错误的命令格式。稍微补充一下:这个NfaGen2的“语言”格式是以回车为语句断行的,也就是说如果你打算用这个来产生标准的正则表达式,那么你就必须放弃直接在里面输入回车来表示回车,甚至连用转义符来转义都是不允许的。如果你输入:
define:\
那么就会认为你定义的是一个反斜杠而不是一个回车等等。

目前而言这个程序在着色方面还有一点点小的Bug,这些小Bug我想还是比较难发现的。不过有一个比较特殊的效果大家应该很容易发现的:就是你每输入一个字符就会看到这个字符由大变小,似乎会跳动一样。这个应该是RichTextBox的问题,我没有办法控制用户输入的字符的字体,他非要用一个Arial之类的字体来作为缺省的字体,而不是用RichTextBox.Font属性里面所设置的字体。这个问题暂时没有很好的办法解决,如果大家有办法,请不惜赐教。

过一段时间也许就可以开始写“吊胃口V”了,现在要吃饭了。
posted on 2004-07-28 11:58 Sumtec 阅读(974) 评论(6)  编辑 收藏 所属分类: .NET 技术内幕

评论

#1楼  2004-07-28 12:09 leighsword      
syntax highlight is easy to implement when using native code.
  回复  引用  查看    

#2楼  2004-07-28 12:16 Michael      
Why not integrate this into the VS.Net IDE using VSIP?

MS has provided interface for the language service like sytax highlight, auto completion. You don't need to invent the wheels.

More info at www.vsip.com. see also example at http://blogs.msdn.com/allend/archive/2004/07/26/197721.aspx.
  回复  引用  查看    

#3楼  2004-07-28 12:25 leighsword      
regular expression is a stupid in this way,do you have learned compiler principle----produce?
  回复  引用  查看    

#4楼  2004-07-28 12:51 什么都不知道      
使用正则表达式在处理只读内容的处理上有很大的方便
如果只是为了处理只读内容的语法加亮,使用编译器常用的语法解析有些过了。
  回复  引用  查看    

#5楼  2004-07-28 13:21 Sumtec      
@Michael:
呵呵,这个以后再说,目前我只是希望能够实验出self-compile的能力。

@leighward:
It's also very stupid to suppose some one haven't learnt something. Actually, I've learnt compiler principle since I was in Junior 3.

I'm not talking about compiler. I'm just talking about Regex. Have you ever read my articles clearly? Let me tell you something: You must know that there is something called "self-compilation" in compiler principle, right? I'm now trying to use extended regular expression to "compile" extended regular expression. Here, the "extended regular expression" is the language shown above. And the "compile" doesn't mean the compile really. It's just doing some replacement. Do you really know what I mean?

And what's more? I'm planning to generate DFA from NfaGen Language in the Super-Next version -- NfaGen3. That means I'll go to a real compiler in that version. But this is not the current goal.

@什么都不知道:
呵呵,编译器所使用的是DFA,正则表达式使用的是NFA。这两者的根本区别就是DFA对文法有严格要求,一般指能够用于3型文法,而NFA的限制则少得多。因此构造NFA比构造DFA要简单,很多时候甚至是通过对NFA进行一定的转化和修改来产生DFA的。由于这个根本区别,绝大部分时候DFA都要比NFA快得多,快的原因在于NFA有可能要进行猜测和回溯,至少DFA不可能比NFA要慢。因此用“编译器”进行语法加量也没有什么不好,甚至速度更快,不过开发周期就比较长一点了,毕竟没有正则表达式那么好构造和测试。

以我目前的测试看来,正则表达式的匹配速度并不慢,目前这个版本速度如果你感觉慢,主要就是语法加亮的问题。我现在实际上用的是RichTextBox,这个东西对部分文字修改字体颜色等等,需要修改SelectionStart、SelectionLength,然后再设置SelectionFont和SelectionColor。而非常不行的是,至少SelectionStart和SelectionLength是通过发送消息,然后再接受消息来进行设置的(绕了好大一个弯子),因此速度有点慢。

速度方面的问题,我会进行一定程度的优化的。不过不要寄望于“大幅度提升”,并且我也不打算自己写一个文本编辑器的空间来提升速度。速度不是我目前所需要考虑的重点问题,重点是能够用!
  回复  引用  查看    

#6楼  2006-12-17 18:14 Wisdom-zh      
搜到, 留言:)
  回复  引用  查看    


标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2004-07-28 12:00 编辑过