无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
楼主: shoulea
打印 上一主题 下一主题

一个新的命令解释器:v1.3 预览 wtcmd(by shoulea)

[复制链接]
31#
发表于 2010-9-15 16:51:29 | 只看该作者
回复

使用道具 举报

32#
 楼主| 发表于 2010-9-15 17:31:35 | 只看该作者
原帖由 jianliulin 于 2010-9-15 15:08 发表
楼主,能帮我看看我哪里弄错了?

我在vs2008 里面建了一个空的项目,然后把wtcmd的*.c,*.h的文件都加进项目里面去,编译的时候跑出两个异常:
99631


99632


用VS2003编译没有发生错误,看截图发生的是连接错误,且错误编号为29、30,因此可能是前面某个文件未编译成功。

而看到缺少的两个函数为makelinev和strfile,因此应是util/file.c编译失败。

失败的原因可能是高版本的VS对C运行库函数的使用有些限制,曾经帮同学看代码时遇到使用fopen编译时就会出现警告,为成功编译代码也许需要设置某些选项,然而我现在没有VS2008,因此就不知道了,等上网查查再说吧。
回复

使用道具 举报

33#
发表于 2010-9-15 18:16:36 | 只看该作者
原帖由 shoulea 于 2010-9-15 17:31 发表


用VS2003编译没有发生错误,看截图发生的是连接错误,且错误编号为29、30,因此可能是前面某个文件未编译成功。

而看到缺少的两个函数为makelinev和strfile,因此应是util/file.c编译失败。

失败的原 ...


按你#22说的方法可以在命令行编译通过

[ 本帖最后由 jianliulin 于 2010-9-15 18:19 编辑 ]
回复

使用道具 举报

34#
 楼主| 发表于 2010-9-15 20:21:38 | 只看该作者
实现了环境变量的读写及四则运算,现在可以演示循环和子程序的使用了。

还将运行库检测内存泄露的头文件<ctrdbg.h>包含了进来,如果解释器运行过程发生内存错误,则调试版解释器可给出诊断信息,这样可使解释器更为健壮。

下一步要实现 pecmd 中 team、find、ifex、forx 的等效命令,以使命令文件更简洁,在不使用命令文件时也能使用循环。
回复

使用道具 举报

35#
发表于 2010-9-15 20:45:39 | 只看该作者
提个建议:
      最好能有像c语言的“{}”,用来表示一组命令序列。这样,在设计条件语句及循环语句的时候,既方便又直观。个人觉得,PECMD中用TEAM和“|”表示一组命令序列,不够方便、灵活。
      对不起,没有仔细看,原来已经用if…end、while…loop来支持命令组了。
      请问:if没有设计else子句?

[ 本帖最后由 lmle 于 2010-9-15 21:36 编辑 ]
回复

使用道具 举报

36#
发表于 2010-9-15 20:47:27 | 只看该作者
看了一下,基本上可以认为是一种脚本解释器了,而不是命令解释器那么简单。
完善下去,做成一个国人的C++脚本解释器。不过对一般人来说,上手的要求可能就高些。

也提个建议,不要受PECMD那种落后的命令行方式限制,参照C++语法,做成真正的C++脚本解释器,而不是命令解释器。

[ 本帖最后由 lxl1638 于 2010-9-15 20:50 编辑 ]
回复

使用道具 举报

37#
 楼主| 发表于 2010-9-15 21:18:00 | 只看该作者
非常感谢大家的支持。其实我写这个解释器的原因这一,就是要积累经验,争取做一个简单的脚本解释器,既有严格但易懂的语法,又有易用的命令。
回复

使用道具 举报

38#
 楼主| 发表于 2010-9-15 21:51:14 | 只看该作者
原帖由 lmle 于 2010-9-15 20:45 发表
提个建议:
      最好能有像c语言的“{}”,用来表示一组命令序列。这样,在设计条件语句及循环语句的时候,既方便又直观。个人觉得,PECMD中用TEAM和“|”表示一组命令序列,不够方便、灵活。
      对不起 ...


if ... end,while...loop这样都是两个关键字配对的,便于任意地嵌套,加上 else 不好处理,其实最开始的时候不仅考虑过 else,甚至 else if 结构都考虑过,但后来发现关键字难以定位,就去掉了。其实命令文件往往没有那么复杂,没有 else 也没多大关系,多用几个子程序就可以了,else 分支可用提前调用 exit/return 退出子程序来模拟。
回复

使用道具 举报

39#
发表于 2010-9-15 22:48:27 | 只看该作者
越看越有意思,有空研究一下。
回复

使用道具 举报

40#
发表于 2010-9-16 09:15:43 | 只看该作者
原帖由 shoulea 于 2010-9-15 21:18 发表
非常感谢大家的支持。其实我写这个解释器的原因这一,就是要积累经验,争取做一个简单的脚本解释器,既有严格但易懂的语法,又有易用的命令。


不错,一定要保持体积不要太大
回复

使用道具 举报

41#
 楼主| 发表于 2010-9-16 15:59:40 | 只看该作者
发一个为 wtcmd 提供语法高亮显示的 editplus。

测试方法,解压文件后,后键点“script.inf”进行安装,再打开“editplus.exe”,选“文件-新建-其他-wtcmd”,现在输入代码即有高亮显示效果。

未命名.JPG (45.28 KB, 下载次数: 70)

未命名.JPG

editplus with wtcmd v1.0 beta2.part01.rar

240 KB, 下载次数: 41, 下载积分: 无忧币 -2

editplus with wtcmd v1.0 beta2.part02.rar

240 KB, 下载次数: 39, 下载积分: 无忧币 -2

editplus with wtcmd v1.0 beta2.part03.rar

240 KB, 下载次数: 40, 下载积分: 无忧币 -2

editplus with wtcmd v1.0 beta2.part04.rar

221.71 KB, 下载次数: 43, 下载积分: 无忧币 -2

回复

使用道具 举报

42#
发表于 2010-9-16 20:04:02 | 只看该作者
很好用,太强大了,谢谢
回复

使用道具 举报

43#
发表于 2010-9-17 08:48:46 | 只看该作者
高手纷纷登场啊!支持!希望弄个双PECMD更牛X的出来!方便大家使用!
回复

使用道具 举报

44#
发表于 2010-9-17 10:10:22 | 只看该作者
原帖由 sbyguli 于 2010-9-17 08:48 发表
高手纷纷登场啊!支持!希望弄个双PECMD更牛X的出来!方便大家使用!


双PECMD??
回复

使用道具 举报

45#
发表于 2010-9-17 10:43:09 | 只看该作者
看了下.

想替代老九PECMD.不大可能.况且老九在不断更新中.
回复

使用道具 举报

46#
发表于 2010-9-17 10:55:53 | 只看该作者
希望楼主继续努力走下去,不要在乎别人的说法,最终必将成功
回复

使用道具 举报

47#
发表于 2010-9-17 11:24:00 | 只看该作者
原帖由 66369 于 2010-9-17 10:43 发表
看了下.

想替代老九PECMD.不大可能.况且老九在不断更新中.


若完善后,会用的人是可以使用它代替 PECMD 的,PECMD 则重于命令解释,一般人上手觉得难度不大;
而这个工具则重于脚本解释,一般人上手的起点要求会高些。
实际上,用 AutoIt3 这个脚本解释器,或类似的工具,如 lua 也可以代替 PECMD 的,但能写脚本的人并不是很多。
所以 PECMD 走的路是,以命令解释为主,脚本解释为辅,每一个命令关键词就是一条命令,
每一条命令就象控制台命令一样能独立完成一项任务。一些控制台命令与PECMD命令的对比:

功能控制台命令PECMD命令
格式化FormatDFMT
执行另一命令StartEXEC
复制、移动、删除文件Copy、Ren、DelFILE
挂载映像ImageXMOUN


可以肯定地说,能写脚本的人并不多,能独立写完成脚本解释器的人更少,这个不是会编程的人就能完成的,本人支持楼主,做成一个国人的C++解释器。
另一方面,以脚本语言表达肯定比命令方式表达更自由、更灵活,这个工具一旦完善功能将十分强大。

也给楼主一些建议,不要受PECMD命令关键词是4个字母的习惯影响,参考C++语法的关键词和语言表达方式,作为PECMD的补充,走脚本解释为主,命令解释为辅的路。

[ 本帖最后由 lxl1638 于 2010-9-17 11:31 编辑 ]
回复

使用道具 举报

48#
发表于 2010-9-17 14:05:38 | 只看该作者
有意思,下载下来看看!
回复

使用道具 举报

49#
 楼主| 发表于 2010-9-17 16:34:34 | 只看该作者
原帖由 66369 于 2010-9-17 10:43 发表
看了下.

想替代老九PECMD.不大可能.况且老九在不断更新中.


我并不想做一个 pecmd 的替代品,如果那样做的话就要重复做一次老九的工作,这种重复劳动没有多大意义,况且 pecmd 很多功能是怎样实现的我也不明白,想做一个也做不出来啊。

此程序完善的理想结果,是做成一个比VBScript语法更灵活的脚本解释器,其中可直接嵌入命令——或者说将命令行格式吸呐为脚本语法——用命令行指定参数和选项的方式调用子程序/函数,同时命令的编写是模块化的,方便扩充、增强功能。

wtcmd 现在分为4个模块,其中command和util基本上是独立的模块,而core和expr目前的处理方式和 pecmd 没有太大差别,仍是直接解析字符串,惟一的差别在于我从VC的运行库中提炼出了一个名为 makeargv 的函数,简化了解析过程。这对于命令的处理已经足够,但对于表达式的处理就不够了,对于条件、循环的处理也不够灵活。

为了实现最终目标,编译原理的知识是必需的,然而我不是学计算机的,我只是非常喜欢编程,最想做一个编译器。以前好几次都打算好好学编译原理,但最终看一两章后都停下了,现在想来是实践太少。而这一次先不看书,完全凭自己感觉先做一个命令解释器,wtcmd v0,却感到非常有意思,后来经过一定完善即有现在的 v1。

大家的支持给了我很大的动力,现在我又在学编译原理,有了做这个命令解释器的经历,感觉很多东西也好理解多了,相信最终目标一定会实现!
回复

使用道具 举报

50#
发表于 2010-9-17 16:39:20 | 只看该作者

回复 #48 lxl1638 的帖子

老九很谦虚,不过老九大侠说的也很有道理。WTCMD和PECMD都是PE下的利器,按老九大侠的说法,二者到是可以互补的,侧重点不同,用途自然也不完全相同。

非常支持WTCMD的开发,也非常期待PECMD的继续完善,给我们初学者这么好的资料和工具,感激不尽!辛苦了。
回复

使用道具 举报

51#
发表于 2010-9-17 19:19:16 | 只看该作者
原帖由 shoulea 于 2010-9-17 16:34 发表


我并不想做一个 pecmd 的替代品,如果那样做的话就要重复做一次老九的工作,这种重复劳动没有多大意义,况且 pecmd 很多功能是怎样实现的我也不明白,想做一个也做不出来啊。

此程序完善的理想结果,是做 ...


makeargv 本人看过,而不是直接用,它的原理是按匹配成对的' '(空格) 或 '"'(引号)拆分为命令行,将结果(命令行参数的个数和各个参数)丢给控制台程序的入口主函数。
在PECMD中,本人按它的原理写了自己的makeargv。

[ 本帖最后由 lxl1638 于 2010-9-17 19:20 编辑 ]
回复

使用道具 举报

52#
 楼主| 发表于 2010-9-17 19:38:55 | 只看该作者
控制台程序调用 GetCommandLine 获取命令传递的串,调用 stdargv.c 中的一个 static 函数生成 argc 和 argv,传递给 main 或 wmain。最开始的时候我用的 win32 API中的 CommandLineToArgvW 来实现各命令,但由于其最后一个指针不是空指针,遍历 argv[] 判断结束不方便,所有才从 stdargv.c 中修改了一个出来,后来又进一步分割,使得可从字串中读一个程序名,或一个参数。
回复

使用道具 举报

53#
 楼主| 发表于 2010-9-17 21:14:00 | 只看该作者
原帖由 bsdx11 于 2010-9-17 10:10 发表


双PECMD??


五笔:

cc = 双
xx = 比
回复

使用道具 举报

54#
发表于 2010-9-18 10:36:24 | 只看该作者
希望搂住早日达到自己的目标
回复

使用道具 举报

55#
 楼主| 发表于 2010-9-18 19:35:06 | 只看该作者
经过一天的努力,终于实现一个强大的表达式计算函数。

可以支持以下运算符的混合运算:

    基本的算术运算           + - * / ^

    专门用于整数的运算       div mod

    计算平方根               sqrt x

    计算绝对值               |x|

    截去小数部分             [x]

支持一元的+和-算符;

任意深度的括号嵌套;

可读取环境变量的值用于计算;

内置 pi 和 e 两个常数。

这一模块就不加入到 wtcmd 中了,因为我打算重新构造 wtcmd,写一个更强的核心。

老九:可以把这个函数集成到 pecmd 中,增强 CALC 命令的功能,开启优化选项后代码仅增大约5~6KB。

image.jpg (124.73 KB, 下载次数: 68)

image.jpg
回复

使用道具 举报

56#
发表于 2010-9-18 20:03:38 | 只看该作者

回复 #56 shoulea 的帖子

可以推荐下编译WTCMD的工具吗?

这几天用 VC6.0 和 VS2010 都失败,请问老兄用的是 VS2003 ?
回复

使用道具 举报

57#
 楼主| 发表于 2010-9-18 20:10:44 | 只看该作者

回复 #57 Plantsoot 的帖子

你是怎样编译的?

我在VC6/VS2003的命令行,和VS2003的集成环境都编译通过。

jianliulin 在VS2008的集成环境编译失败#31,但在命令行编译也通过#34。

命令行编译方式见#22。
回复

使用道具 举报

58#
发表于 2010-9-18 20:25:58 | 只看该作者

回复 #58 shoulea 的帖子

我正在重装VC6,我的VC6是绿色版,命令行不好使。
vs2010 nmake报错,刚下载了个 安装版的VC6,试试看。

[ 本帖最后由 Plantsoot 于 2010-9-18 21:08 编辑 ]
回复

使用道具 举报

59#
发表于 2010-9-18 21:56:02 | 只看该作者
原帖由 shoulea 于 2010-9-18 19:35 发表
经过一天的努力,终于实现一个强大的表达式计算函数。

可以支持以下运算符的混合运算:

    基本的算术运算           + - * / ^

    专门用于整数的运算       div mod

    计算平方根            ...


试试看。。。。。。。。。。。
回复

使用道具 举报

60#
发表于 2010-9-21 09:42:07 | 只看该作者
顶  希望早日成熟起来,源代码开放是进步的最大动力!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-10-5 09:30

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表