几个礼拜前,介绍了CSHELL。http://www.cnblogs.com/hhao020/p/4974542.html今天再试着介绍下,希望能有更多C程序员留意到它,从中获益。

很多年前,我在调试程序或是排查系统故障的时候,就希望有个SHELL。理想中,它应该是这个样子:

从exe文件读取elf符号,在内存中生成符号表表;
开启一个SHELL交互界面,接受修改变量或是函数的命令行;
要能够允许用户使用复杂的C语法,做到C程序编程一样;
用户回车后,自动从符号表找到相关函数,或是变量对应地址,然后执行;
函数的参数列表会被正确解析;
所有的非静态或内联的函数,变量,只要是代码里有的,都应该能在这个界面使用;
最好,能支持脚本,批量执行函数。

那些年,哥苦苦研究,但限于技术面的不足,始终未能找到入手方法。最接近的,也就是让在编码时,hardcode一组函数;而SHELL界面,则是如一般SHELL技术那样,要求按照严格的格式输入,依赖strcmp等字符处理技术判断如何调用函数。其中的限制和无奈,在此不赘述。

再后来,哥开始做VxWorks开发。做过vxWorks的人都应该知道WindShell,那东西真心好,让无数程序员爱不释手。哥也很喜欢啊,它就是理想中的那个SHELL,写上几个函数,编译一下,就能在SHELL下直接运行测试,真的方便的很;甚至有时候,要计算点东西,也会用WindShell,特别是编程过程中查16进制和10进制数的转换,或是某个字符的ascii值。

但哥终究是不那么容易被满足的程序员,很快就研究明白windshell的原理。涉及几个主要知识:
1,编译技术,比如LEX 词法分析、YACC 语法生成等;
2,ELF文件格式,以及GCC编译过程和链接技术;
3,某个脚本语言,处理文本必需要。
当然,C语言知识和Makefile知识是必须的,当然,C语言或是Makefile不过关的也没做SHELL的需求。

这三块技术,只有ELF格式和编译链接技术略有研究,另外两项都需要潜心研究。

脚本语言,哥选择了Perl入手,最开始的时候,是考虑Java和Python来着,因为算是有点基础;但很快改变了想法,对于复杂的文本处理来说,Perl可能才是王道。这期间,断断续续经历了好几个月,才算学成Perl,虽然不能说随心所欲的用Perl和正则表达式,但终于不再磕磕碰碰了。下次给大家介绍个自己用Perl做的Lex,Yacc,证明下哥没撒谎。

编译技术就没么容易了,首先要学理论。惭愧,工作后发现大学错过了两样东西:数学和编译原理。高等数序和离散数学没学好,让前些年做系统分析时缺了支柱;幸好编译原理要容易点,自学了一段时间后,终于有所领悟。说到这,倒是提醒玩正则表达式的同学们,记得学点编译原理的词法技术,否则写正则表达式很难摆脱花拳绣腿的尴尬。

接下来,是研究LEX和YACC的运用。这个挺难,网上有很多很多介绍的,十有八九是抄来抄去的一样的东西,偶尔不一样的,也只是谈及皮毛,根本没什么参考价值,跟小编写出来骗大爷大妈的医学养生文章一个水平。当然也就牛叉的,讲的云里雾里,可就是没个实例,全是理论介绍,再仔细一瞧,丫的所谓原创竟然是把LEX和YACC的技术文档摘录翻译出来。就这样,大概挣扎了几个月,一步步积累后,哥终于明白LEX和YACC怎么用了。

接下来的过程就比较自然了,用了一两个周末和晚间休息时间,哥终于做出了CSHELL。最开始规划的时候,还预留了if,while这些逻辑控制,以及cshell下的宏操作支持;但后来发现,价值不是很大,实现需要的时间也蛮多的,就暂时放弃了。或许将来会做吧!

为了方便cshell移植,又花了一个周末将其模块化,整合到项目makefile里。然后,又花了个把钟头,把p_readelf.pl从perl版的zlib中独立出来,以便于大家更容易的移植cshell到自己的项目中。

哥前两天写的trace文章,阅读量破千,但CSHELL却没几个。其实,如果trace是一屌丝,那CSHELL绝非一般高富帅,它们所能带来的价值也是天上地下!

献上cshell的词法文件,供有志于研究lex的同学参考:
http://files.cnblogs.com/files/hhao020/cshell.l.rar

欢迎lex学习者留言探讨。

再谈CSHELL对C程序员的价值的更多相关文章

  1. 浅谈Android移动开发程序员的职业发展之路

    现在几乎每个it公司都在开发移动产品,我最早知道Android还是在09年成都某学院上大学的时候,从新闻上知道有这么一家公司,创始人安迪·鲁宾很有名,但安卓到底是做什么的,我并没有关注. 到2010年 ...

  2. 浅谈月薪3万 iOS程序员 的职业规划与成长!(进阶篇)

    前言: 干了这么多年的iOS,虽然接触了许多七七八八的东西.技术,但是感觉本身iOS却没有什么质的飞越,可能跟自己接触的项目深度有关,于是决定在学习其他技术的同时,加强自己在iOS方面的学习,提高自己 ...

  3. 月薪3万的程序员告诉你:这样工作才能拿高薪(转 IT之家)

    习惯即刻回报 他不懂得只有春天播种,秋天才会有收获.刚刚付出一点点,甚至还没有付出,就想要得到回报.技术刚刚掌握,能一边百度一边干活了就觉得该拿到多少多少钱了.找工作先想着多少多少钱,入职了没干几个月 ...

  4. 谈谈Java程序员进阶的那些知识和方向

    谈谈Java程序员进阶的那些知识和方向 记得前段时间看过一篇文章谈到一种程序员叫野生程序员,战斗力极强,可以搞定一切问题,但是通常看问题抓不到本质,或者说是google/baidu/stackover ...

  5. PHP 程序员危机(转载)

    感谢有这样的机会,能和大家一起来聊聊开发者的那些事儿. 其实程序员危机是一个真实存在的问题.也有人说是互联网行业的下滑或者互联网行业已过了风口等等.我在这儿主要谈的是 PHP 程序员的危机,而这种危机 ...

  6. 程序员需要经纪人吗?10x 最好的程序员其生产力相当于同行的 10 倍~

    原文地址 10x 起源于技术界一个流行的说法,即最好的程序员是超级明星,其生产力相当于同行的 10 倍: Google 园区以好玩的设施闻名:小憩舱.球坑.按摩.干洗.随便吃到饱的自助餐.(为了拍人才 ...

  7. 9大行为导致Java程序员薪资过低, 你有几个?

    Java程序员薪水有高有低,有的人一个月可能拿30K.50K,有的人可能只有2K.3K.同样有五年工作经验的Java程序员,可能一个人每月拿20K,一个拿5K.是什么因素导致了这种差异?本文整理导致J ...

  8. DevStore分享:月薪3万的程序员都避开了哪些坑

    程序员薪水有高有低,有的人一个月可能拿30K.50K,有的人可能只有2K.3K.同样有五年工作经验的程序员,可能一个人每月拿20K,一个拿5K.是什么因素导致了这种差异?我特意总结了容易导致薪水低的九 ...

  9. 程序员段子:世界上最大的同性交友平台github

    程序员(又名程序猿)因为总是冲锋在网络的最前端,还有程序猿的各种特殊性,大家在茶余饭后都有很多关于程序员的段子流传.大多都是程序员自黑的,先说在前面,程序猿还是很好的!下面看看你有没有中枪的那一条呢? ...

随机推荐

  1. centos网卡配置和防火墙停止和启动

    Linux 设置网卡配置ip vi /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0 ONBOOT=yes BOOTPROTO=static ...

  2. 配置 samba 实现文件共享

    用于实现文件共享 netstat -apn|grep smb 可以按到 smb服务,需要开启139 .445端口号 需要在防火墙添加如下规则vi /etc/sysconfig/iptables -A ...

  3. oracle合并版本

    1)   添加字段,并自增 第一步:alter table TOWN add ID int 第二步:Update TOWN set id=rownum; Commit; 2)   更新表(另一张表) ...

  4. DOCTYPE的重要性

    <!DOCTYPE>是文档类型声明: 声明必须是 HTML 文档的第一行,位于 <html> 标签之前.明不是 HTML 标签:它是指示 web 浏览器关于页面使用哪个 HTM ...

  5. eclipse项目自动发布到tomcat目录,缺文件。

    eclipse项目自动发布到tomcat目录,缺文件. 解决方案: 项目--Properties-->Deployment Assembly-->Add--> Folder Add- ...

  6. SQL Server 2008 修改表所有者,架构

    ALTER SCHEMA 新架构 TRANSFER 旧架构.对象名称

  7. win10使用小技巧以及常见问题处理方案

    1.win10开机一直处于黑屏状态或者反复重启怎么处理? 处理小方法:开机按win+X组合件进入高级修复模式---选择修复开启模式---f4进入安全模式开机状态---管理控制面板---禁用或者卸载显卡 ...

  8. Java 枚举7种常见用法

    (转)原创地址:http://blog.lichengwu.cn/java/2011/09/26/the-usage-of-enum-in-java/ JDK1.5引入了新的类型--枚举.在 Java ...

  9. flash中网页跳转总结

    浏览器中,程序同时跳转两个网页地址,第一个地址不会跳转,只会跳转第二个地址,如果第二个地址做延时,则第一个正常跳转,第二个地址会被拦截: 浏览器中,接口返回事件的函数中不能程序跳转网页地址. 这两条结 ...

  10. sap 常用表

    MM    表名 EBAN 采购申请