摘要: 上一篇:C语言解释器的实现--词法分析(二)1.类型的表示 C语言的类型是相当灵活的,除了标准的类型(int char float double long 等等)外,自己根据需求,能定义出无穷的类型。一个具体的例子: int * a[10]; 它表示的意思是: a is ARRAY 0..9 of POINTER to INT 仔细观察它的意思,就会发现,这个类型是其他基本类型按照一定顺序的组合:ARRAY|POINTER|INT。要表示这种形式,链表是最合适不过的了。如下图: (图2.1类型的表示) 还有一些情况,比如结构体类型,那么上述的表示就不大合适了。例如下面的结构体: struct. 阅读全文
posted @ 2011-12-27 20:44 linxr 阅读(4833) 评论(3) 推荐(3) 编辑
摘要: 上一篇:C语言解释器的实现--存储结构(一) 词法分析是编译原理中最容易理解的,就算没有了解过编译原理,也能写出一个词法分析器。我们不用理解正则表达式,不用理解状态机原理,就可以轻松的完成词法的分析。 这里首先介绍下自顶向下的解析过程,所谓的自顶向下,按我的理解,就是从一个大的集合解析到小的集合。例如:解析一个文件,那么进入文件,解析一个函数,进入一个函数,解析局部变量,解析表达式,进入表达式,解析变量、常量等等,最终完成一个C文件的解析过程。整个过程,其实就是一个猜测的过程。但是这个过程中,我们必须依赖于文件中的每个词(token),token可以看成是解析过程中的一个单位。 例如: 1.. 阅读全文
posted @ 2011-12-27 13:20 linxr 阅读(6235) 评论(0) 推荐(0) 编辑
摘要: 上一篇:C语言解释器的实现--序(零)目录: 1. 内存池 2. 栈 3. Hash表1.内存池 在一些小的程序里,没什么必要添加内存管理模块在里面。但是对于比较复杂的代码,如果需要很多的内存操作,那么加入自己的内存管理是有必要的。至少有一些好处:能够加快内存的申请和释放;能够轻松的查找内存泄露问题;能够对整个软件的内存消耗做一个比较精确的统计;对以后的优化有很大的好处等等。所以,在我的解释器里,我加入了一个简单的内存管理模块,仿造了内存池的做法。 主要思想是这样的: a.记录所有的申请的内存 b.当释放内存时,记录下来以供下次申请使用 c.申请内存时,可以直接使用前面释放过的内存 为了达到以 阅读全文
posted @ 2011-12-16 17:37 linxr 阅读(9151) 评论(7) 推荐(6) 编辑
摘要: 在写CuteC文本编辑器的同时,为了使之有脚本执行能力。特意实现了一个简易的C语言解释器,所谓的解释器,就是它是解析执行脚本文件的,并不产生可执行的目标代码。它具备了C语言的几乎全部的语法。随着时间的推移,我打算把它作为一个独立的项目来开发了。在这个过程中,自己也学到了不少的知识,所以也打算跟大家分享。写这些东西,虽然是重复发明轮子的事,但也不至于是在浪费生命。程序员嘛,我总觉得应该是要理解我们每天所编译出来的程序是怎么被执行,应该明白我们敲打的每行代码的实际意义。 我打算写一个系列的文章来说明这个解释器的实现过程,其中对于编译原理的理论知识不做太多的讲解,一是不容易提高大家的积极性,二是自. 阅读全文
posted @ 2011-12-16 17:18 linxr 阅读(13364) 评论(8) 推荐(4) 编辑
摘要: 有好多计划,都没时间去做好好深入的学学编译原理,重写设计编写自己的C语言解释器好好完善CuteC Editor等我觉得完善的差不多了,就可以把代码放出来了至少还能写一篇C语言解释器的实现方法供大家看看可惜...加班完,回到家,没什么精神再搞这些东西~ 阅读全文
posted @ 2011-11-16 22:30 linxr 阅读(644) 评论(2) 推荐(0) 编辑
摘要: 本文宗旨在于提出一种给软件添加注册码的方法。至于所提出的方法是否有效,是否能够经得起一些逆向高手的破解,还得经过验证。我只是提出我个人的看法。一、目标。 目标很明确,就是根据需要注册软件的个人信息,产生注册码。并且软件本身必须可以校验该注册码是否有效。并且能够防止别人逆向算出校验算法,产生注册机;能够防止别人用暴力破解方法,直接修改软件执行代码,绕过注册。 二、方法论述 要做到以上的目标,有两个方面特别重要。一是,注册码产生算法的选择;二是,要使软件具有自身校验机制,防止可执行程序别篡改。下面我们分别论述这两点。1. 注册码产生算法的选择 现在很多软件都存在注册机,很大原因是因为软件本身的注册 阅读全文
posted @ 2011-11-08 16:08 linxr 阅读(28959) 评论(48) 推荐(19) 编辑
摘要: 这一年来我花了很多的时间在写一个代码编辑器。大部分时间都是在实现各种各样的功能,其中也遇到了不少的问题。现在把实现这个编辑控件的一些问题的解决方法写出来,以供参考。这里说明下,我用的是MFC,当然了,没有用现成的控件,而是直接从CWnd继承来实现自己的编辑控件。先给大家弄个效果图吧,你可以在这里CuteC Editor下载,欢迎大家提出意见。问题1:如何让控件接受所有的按键和汉字。问题2:如何计算光标的位置。问题3:如何存储编辑控件的文本内容。问题4:如何实现关键字高亮。问题5:如何实现自动换行。问题6:如何解析脚本。呵呵,我自己写了个C语言解释器,那它来用还是很不错的。一. 如何让控件接受. 阅读全文
posted @ 2011-10-30 13:53 linxr 阅读(8021) 评论(21) 推荐(14) 编辑
摘要: CuteC 下载更新内容:1. 修改了便笺管理界面,添加了加解密功能2. 添加了FTP功能3. 添加了代码的符号显示该软件还在开发过程中,由于个人的时间有限,开发进度受到多方因素的影响,但我将不断的更新完善。希望大家多多支持~命令界面如上。FTP界面如上。符号界面如上。便笺文件界面如上。 阅读全文
posted @ 2011-10-24 15:01 linxr 阅读(1081) 评论(4) 推荐(0) 编辑
摘要: 1. 新建一个ca目录。 mkdir ca 2. 新建一个openssl.cnf文件。内容如下:dir = .[ req ] default_bits = 1024 # Size of keys default_keyfile = key.pem # name of generated keys default_md = md5 # message digest algorithm string_mask = nombstr # permitted characters distinguished_name = req_distinguished_name req_extensions = v 阅读全文
posted @ 2011-10-17 13:15 linxr 阅读(1106) 评论(0) 推荐(0) 编辑
摘要: >>用C实现WebService,gsoap是最好的选择了。近一个月都在折腾这个,做个总结吧,估计会写得比较长。因为其中碰到了不少问题,但最终都解决调了。>>快速开始 1. gsoap官网。遇到问题时,官网往往是最能提供帮助的地方。 http://gsoap2.sourceforge.net/ 2. 几个值得参考的链接。 GSoap使用心得: http://www.cppblog.com/qiujian5628/archive/2008/10/11/54019.html GSoap接口定义: http://blog.sina.com.cn/s/blog_5ee9235c 阅读全文
posted @ 2011-10-17 12:50 linxr 阅读(41791) 评论(0) 推荐(5) 编辑