伯约的技术家园

导航

公告

统计

2008年11月8日 #

WPF画柱状图,饼图,折线图





posted @ 2008-11-08 23:35 伯约 阅读(1949) 评论(110) 编辑

2008年7月1日 #

体验Antlr3.0

     Antlr(ANother Tool for Language Recognition)是一个工具,它为我们构造自己的识别器(recognizers)、编译器(compiler)和转换器(translators)提供了一个基础。通过定义自己的语言规则,Antlr可以为我们生成相应的语言解析器,这样便可以省却了自己全手工打造的劳苦。
    国内使用过Antlr2.x系列的人有相当一部分,然而用过3.x的人不是很多,因为3系列的语法相对于2系列的也有较大改进,3系列的中文资源几乎是一片空白。
    写个简单的1+1的例子来体验一下。
     grammar Calc; 
     options{
         language=CSharp2;
     } 
    expr returns [int tvalue=0]
        : a = INT PLUS b = INT
          {
              int aValue = int.Parse($a.text);
              int bValue = int.Parse($b.text);
              tvalue = aValue + bValue;
          }
        ;  
    PLUS  : '+' ; 
    INT   : ('0'..'9')+ ; 
   编译后生成CalcLexer.cs和CalcParser.cs文件.
   新建一个项目.
   添加antlr.runtime.dllAntlr3.Runtime.dll引用
    在某个事件下添加如下代码: 
          Antlr.Runtime.ICharStream intStr = new Antlr.Runtime.ANTLRStringStream(textBox1.Text);
          CalcLexer lexer = new CalcLexer(intStr);
          Antlr.Runtime.CommonTokenStream tok = new CommonTokenStream(lexer);
          CalcParser parser = new CalcParser(tok);
          try
            {
               textBox3.Text= parser.expr().ToString();
            }
            catch
            {
            }
   在输入1+1进行测试过程中,发现
   

public int expr() // throws RecognitionException [1]
    {  
        int tvalue = 0;

        IToken a = null;
        IToken b = null;

        try
     {
            // C:\\Calc.g:7:9: (a= INT PLUS b= INT )
            // C:\\Calc.g:7:11: a= INT PLUS b= INT
            {
             a=(IToken)Match(input,INT,FOLLOW_INT_in_expr40); 
             Match(input,PLUS,FOLLOW_PLUS_in_expr42);
             b=(IToken)Match(input,INT,FOLLOW_INT_in_expr48);
             
                           int aValue = int.Parse(((a != null) ? a.Text : null));
                           int bValue = int.Parse(((b != null) ? b.Text : null));
                           tvalue = aValue + bValue; 
                      

            }

        }
        catch (RecognitionException re)
     {
            ReportError(re);
            Recover(input,re);
        }
        finally
     {
        }
        return tvalue;
    }

   当执行到红色标示的地方时,就会抛出一个异常.因为是调用的Antlr3.Runtime.dll中的方法.
   里面如何执行不得而知,连这么简单的都得不到正确的结果,很让人郁闷.
   于是反编译一下: 
  
    幸好发现可以重载,于是将代码拷贝到子类中,将this都去掉.再编译测试.发现竟然能够输出正确结果了.
    Antlr能够支持多种语言,不知道在其他语言环境下是否有这样的问题,记录在此,希望能够相互学习和
    借鉴.也请各位能够给予批评和建议.

posted @ 2008-07-01 22:11 伯约 阅读(1286) 评论(1) 编辑

2008年6月5日 #

VS2008 快捷键

新建项目 Ctrl+shift+N
新建网站 shift+Alt+N
文件  Ctrl+N
打开项目/解决方案 Ctrl+shift+O
打开网站 shift+Alt+O
打开文件 Ctrl+O
保存当前文件 Ctrl+S
全部保存 Ctrl+Shift+S
添加新项 Ctrl+Shift+A
添加现有项 Shift+Alt+A
添加类 Shift+Alt+C
撤消 Ctrl+Z
重复 Ctrl+Y
转到 Ctrl+G
循环应用剪贴板中的复制项Ctrl+Shift+V
设置文档的格式 Ctrl+E,D
设置选定内容的格式Ctrl+E,F
转换为大写 Ctrl+Shift+U
转换为小写 Ctrl+U
删除水平空白Ctrl+E,\
查看空白Ctrl+E,S
自动换行Ctrl+E,W
渐进式搜索Ctrl+I
注释选定内容Ctrl+E,C
取消注释选定内容Ctrl+E,U
快速查找 Ctrl+F
快速替换 Ctrl+H
在文件中查找 Ctrl+Shift+F
 查找下一个 F3
 查找上一个 Shift+F3
在文件中替换 Ctrl+Shift+H
查找符号 Alt+F12
切换书签 Ctrl+B,T
启用书签 Ctrl+B,E
上一书签 Ctrl+B,P
下一书签 Ctrl+B,N
清除书签 Ctrl+B,C
添加任务列表快捷方式Ctrl+E,T
切换大纲显示展开Ctrl+M,M
切换所有大纲显示Ctrl+M,L
停止大纲显示 Ctrl+M,P
折叠到定义 Ctrl+M,O
生产方法存根 Ctrl+K,M
列出成员 Ctrl+K,L
参数信息 Ctrl+K,P
快速信息 Ctrl+K,I
完成单词 Ctrl+K,W
插入代码段 Ctrl+K,X
外侧代码 Ctrl+K,S
代码 F7
设计器 Shift+F7
服务器资源管理器 Ctrl+W,L
解决方案资源管理器 Ctrl+W,S
类视图 Ctrl+W,c
代码定义窗口Ctrl+W,D
对象浏览器 Ctrl+W,J
错误列表 Ctrl+W,E
输出 Ctrl+W,O
属性窗口 Ctrl+W,P
任务列表 Ctrl+W,T
工具箱 Ctrl+W,X
全屏显示shift+Alt+Enter
向后定位 Ctrl+-
向前定位 Ctrl+Shift+-
属性页 Shift+F4
查找符号结果 Ctrl+W,Q
书签窗口 Ctrl+W,B
命令窗口 Ctrl+W,A
文档大纲 Ctrl+W,U
资源视图 Ctrl+W,R
宏资源管理器 Alt+F8
Web浏览器 Ctrl+W,W
重命名 F2
提取方法 Ctrl+R,M
封装字段 Ctrl+R,E
提取接口 Ctrl+R,I
将局部变量提升为参数 Ctrl+R,P
移除参数 Ctrl+R,V
重新排列参数 Ctrl+R,O
生成解决方案 F6
生成当前项目 Shift+F6
启动调试 F5
继续 F5
全部中断 Ctrl+Alt+Break
停止调试 Shift+F5
重新启动 Ctrl+Shift+F5
开始执行(不调试)Ctrl+F5
异常 Ctrl+D,E
逐语句 F11
跳出 Shift+F11
逐过程 F10
切换断点 F9
删除所有断点 Ctrl+Shift+F9
断点 Ctrl+D,B
即时 Ctrl+D,I
快速监视 Ctrl+D,Q
监视1 Ctrl+D,W
监视2 Ctrl+D+W,2
监视3 Ctrl+D+W,3
监视4 Ctrl+D+W,4
自动窗口Ctrl+D,A
局部变量 Ctrl+D,L
调用堆栈 Ctrl+D,C
线程 Ctrl+D,T
切换当前线程标志状态 Ctrl+8
仅显示标志的线程 Ctrl+9
模块 Ctrl+D,M
进程 Ctrl+D,P
反编译 Ctrl+Alt+D
寄存器 Ctrl+D,R
内存1 Ctrl+D,Y
内存2 Ctrl+Alt+M,2
内存3 Ctrl+Alt+M,3
内存4 Ctrl+Alt+M,4
附加到进程 Ctrl+Alt+P
代码段管理器 Ctrl+K,Ctrl+B
运行当前宏 Ctrl+Shift+P
记录当前宏 Ctrl+Shift+R
宏IDE Alt+F11
当前上下文中的测试 Ctrl+R,T
解决方案中的所有测试 Ctrl+R,A
如何实现 Ctrl+F1,H
搜索 Ctrl+F1,S
目录 Ctrl+F1,C
索引 Ctrl+F1,I
帮助收藏夹 Ctrl+F1,F
动态帮助 Ctrl+F1,D
索引结果 Ctrl+F1,T

posted @ 2008-06-05 14:59 伯约 阅读(744) 评论(2) 编辑

2007年10月7日 #

MSDN和TechNet HTML Help似乎有乱码问题?

    不知道什么时间迷上了到微软网站上下载资料,不过主要是下载MSDN和TechNet的资料。好久没有来了,今天到上面一看改版了。遗憾的是好像存在一些问题( 也许是我个人的问题)我本来想给微软发一封邮件来报告这件事,可是也不知道应该发到那个邮箱才能最快捷。先在这里贴出来,大家看看是否也存在和我同样
的问题,虽然是小问题,也希望能够得到及时的修改。
 我们分别打开MSDNMSDN HTML help和TechnetTechnet Html help的链接,发现多了语言的选择,我选择了简体中文,发现文件名带有zh-TW的字样,如果
没有记错的话,zh-TW才是标示繁体字的,打开文件后如下:

   右边的文字的确是简体字,但是左边是乱码。我又下载了繁体的资料,结果发现点击后的文件名却带有Zh-cn的标示,而打开文件后右边是繁体字,左边也是乱码。

posted @ 2007-10-07 09:42 伯约 阅读(130) 评论(0) 编辑

2007年9月30日 #

从女足世界杯看团队协作

      北京时间9月30日,第五届女足世界杯在上海落下帷幕,在速度、技术上占有优势的巴西队在上半场占有一定的优势,然而却颗粒未收.下半场虽然凭借个人能力获得一次点球的机会,结果却被德国门将扑出.与巴西队相反,德国队没有超强的个人能力,却以整理缜密的防守和进攻最终以2:0战胜了巴西队.同时也创造了6场没有丢一球的奇迹.
      在我们祖国的建设中,在我们日常生活中,在我们的软件项目中这样的例子也是屡见不鲜.我们需要牛人,强人来引领一种潮流,一种变革.然而绝大部分的工作是需要一般人员来完成的.这当然不是说我们不需要牛人强人.不过我们也可以问:到底什么样子的才算是牛人呢.绝大部分的人应该是平凡的人,所以要想做好事,一定要有团队精神.注意团队协作.我想当我们认为自己是牛人的时候,是否应该反思和检讨一下自己到底算不算牛人.一种可能是你天赋突然间被发掘出来成为确确实实的牛人,还有一种可能就是自我感觉良好,正在脱离团队.
     足球是11个人的运动,一个人的能力再好,团队整体实力不行,不知道协作,也许可以赢得某一场比赛.在软件行业中,绝大部分项目都不可能是一个人就能够完成的,所以我们要学会分享和协作.每个人因为成长环境,家庭背景,地域,文化等等原因导致我们看待问题的角度和深度存在一定的差异,每个人的知识的深度,广度也是有区别的,我想我们只有不断地交流,分享自己的观点,认识到不同看法存在的客观性,不断地改正自己,影响别人,我们才能共同进步.无论我们是一个部门,一个公司,还是有竞争性的两家公司里,当我们上升到另外一个高度来看待下一层次的时候我们就会发现,我们共同进步的必要性大于竞争的必要性.比如:一个部门的两个人,我想他们了解的东西一定会存在不同,如果相互把对方看做升职的竞争对手的话,相互保留.当我们上升到公司的角度看待这样的问题时,你是否发现两个人的共同进步是不是可以更好更快地完成任务,为公司创造更多的价值.我们无论在什么公司工作,当站在民族的高度看时,其实大家都在为中国的软件发展做着不可磨灭的贡献.都在为社会建设贡献自己的力量.
      在此衷心地祝愿我们的伟大的祖国永远繁荣富强,国泰民安.同时也祝各位朋友十一快乐.
     

posted @ 2007-09-30 23:52 伯约 阅读(45) 评论(0) 编辑

2007年9月28日 #

个人博客开张

摘要: 之前一直停留在和自己行业的人士和同事交流,现在才发现以前的心态是多么的消极,错过了多少次和大家一起交流,一起成长的机会.所以今天才在这里申请了一个账号,希望在此能够结交更多的朋友,以积极的心态去参与大家的讨论.希望各位今后多多帮助.阅读全文

posted @ 2007-09-28 11:01 伯约 阅读(21) 评论(0) 编辑

仅列出标题