明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3934|回复: 13

[原创]发布一个的程序

  [复制链接]
发表于 2009-7-12 17:59:00 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2009-7-22 3:57:27 编辑

有经验的编程人员都有一个好习惯:程序的函数和变量都要有封装性,尽量少用全局的函数和变量,以防止不同程序之间发生冲突。而LSP程序的封装性比较差,为了检查程序中用到的函数和变量的作用域,特编写这个程序,现发布出来与网友共享。希望有人能够喜欢和支持,并提出意见,以便改进和完善,谢谢!

 

用法:先加载Common.fas和解析LSP程序的变量和函数.fas,再执行tbP命令即可。

实例:以附件中的<测试文件.lsp>为例,结果生成<测试文件.lsp.txt>,其内容如下:

★语句完整★

函数名:nil
全局变量:
继承变量:
局部变量:
未用变量:
符号表:
私有子函数:
重载子函数:C:tbCount

函数名:C:tbCount
全局变量:
继承变量:
局部变量:
未用变量:fuzz
符号表:
私有子函数:Main Unique
重载子函数:

函数名:C:tbCount.Main
全局变量:
继承变量:fuzz
局部变量:lst tmp ids2 ids1 acme2 acme1 enType en el SSet SS
未用变量:
符号表:
私有子函数:
重载子函数:

函数名:C:tbCount.Main.lambda
全局变量:
继承变量:en
局部变量:x
未用变量:
符号表:
私有子函数:
重载子函数:

函数名:C:tbCount.Main.lambda
全局变量:
继承变量:en
局部变量:x
未用变量:
符号表:
私有子函数:
重载子函数:

函数名:C:tbCount.Unique
全局变量:
继承变量:
局部变量:lst b el a
未用变量:
符号表:
私有子函数:
重载子函数:

函数名:C:tbCount.Unique.lambda
全局变量:
继承变量:fuzz b a
局部变量:x
未用变量:
符号表:
私有子函数:
重载子函数:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下

本帖被以下淘专辑推荐:

发表于 2009-7-12 22:35:00 | 显示全部楼层

很好,支持一下。

能不能讲一下怎么解析的???

发表于 2009-7-12 22:47:00 | 显示全部楼层

支持

不知道是否支持set函数定义的变量

目前的编辑器都没有支持set函数变量定义的解析

 楼主| 发表于 2009-7-12 23:27:00 | 显示全部楼层

回3楼,我没有特别针对set函数变量定义的解析,但可能会将其归为符号表中。

至于解析的原理,很简单:先读取源程序,再根据LISP的语法分解出各部分,利用堆、栈及递归调用,结合上下文,逐个分析每部分的含义,以区别符号、函数、变量说明、参数、注释、字符串、表等。

感兴趣的朋友可以测试一下。

发表于 2009-7-12 23:58:00 | 显示全部楼层

还有一种思路,不知是否可行,缺点可能速度太慢:

1.储存当前所有符号

 (setq symlst (atoms-family 0)
       vallst (mapcar 'eval symlst)
 )

2.运行测试程序:

3.获取新符号列表

 (setq newSymlst (atoms-family 0)
       newvallst (mapcar 'eval newsymlst)
 )

 比较 vallst 和 newsymlst 得到新产生的符号和变化的符号
 这就是我们要得到的东东

4.恢复原有符号

  (mapcar '(lambda (a b) (set a b))
          symlst
          vallst
  )

发表于 2009-7-13 09:14:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2009-7-13 09:18:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2009-7-13 15:08:00 | 显示全部楼层

回6楼和7楼:

你说的把参数变成局部变量这个问题确实存在,我在变量的分类时,是按其作用域分的,参数与局部变量的作用域是一样的,所以都放在一起,当然也可以将其分开。但你说这样会把人害惨,我认为没有这么严重吧,这个程序是用来检查LSP程序的变量和函数作用域的辅助工具,不会有人根据这个结果去将参数改成局部变量吧。

至于vlax-vbDouble,难道不是全局变量吗?

还有“;;;;上面的有好多不对啊,”,请详细指出好吗?如果程序有问题,我好分析并改正程序,谢谢!

发表于 2009-7-14 01:07:00 | 显示全部楼层

支持原创 !赞一个

 楼主| 发表于 2009-7-15 16:43:00 | 显示全部楼层

请各位网友测试这个程序,如果大家到源代码有兴趣,我也愿意提供。

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-24 14:27 , Processed in 0.207125 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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