关于开发Delphi的IDE插件的问题。

forgot2000 2005-02-20 05:03:33
我想开发一个IDE插件,其中一个功能就是在当前.dpr文件中所有.pas中每一个主函数的'Begin’之后和'End'之前加入自己的自定义注释。
比如
procedure TForm1.Button1Click(Sender: TObject);
begin
...//mycode
end;
就变成
procedure TForm1.Button1Click(Sender: TObject);
begin
//函数说明:
...//mycode
//函数结束
end;
遇到这种情况:
procedure TForm1.Button1Click(Sender: TObject);
begin
...
Function aa():Boolean;
begin
end;
...
end;
中间的'Begin'和'end’不用处理,因为它是嵌套在主函数内部的。
处理所有.pas单元文件可以调用EnumProc,主要问题是如何找到主函数的Begin和End,进行相关的处理呢?
...全文
177 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
forgot2000 2005-02-28
  • 打赏
  • 举报
回复
原来是这样,谢谢chechy的帮忙,我分析了一下,DelForDll应该是用Delphi编译的,但没有使用VCL类库。
kuki84 2005-02-26
  • 打赏
  • 举报
回复
哈哈,再学习!
chechy 2005-02-24
  • 打赏
  • 举报
回复
DelForEx的词法和语法分析的代码应该在DelForDll.dll中,你分析一下Delfor1.pas,就可以知道。
这个DLL挺小的,看来应该没有借助VCL类库来构建。要么是纯C,要么是纯Pascal。
kuki84 2005-02-23
  • 打赏
  • 举报
回复
学习
forgot2000 2005-02-23
  • 打赏
  • 举报
回复
To chechy(www.qdocuments.net):谢谢你的指导。我感到奇怪的就是,既然DelForEx是公开源码的,而且可以完整编译成Dll文件,为什么还会有代码封装在Dll中呢?是哪个Dll文件呢?但语法分析的关键代码我也确实没有看到,所以感到很奇怪。
chechy 2005-02-23
  • 打赏
  • 举报
回复
DelForEx的源码我也读过,主要是OpenToolsAPI的代码,而真正词法、语法分析的代码都封装在DLL中,无法看的。
对于搜索begin...end,我个人认为,在没有现成函数库的情况下,只能自己开发。先编写词法分析,然后编写一个简单的语法分析就应该可以实现了。
词法分析可以参考我编写QDocuments的词法分析器,呵呵。语法分析器就得自己写咯,我的语法分析器主要是分析interface区域的,implementation区域的代码基本上都跳过了。
何鲁青 2005-02-22
  • 打赏
  • 举报
回复
我的想法是将.pas文件作为文本来处理的
何鲁青 2005-02-22
  • 打赏
  • 举报
回复
我觉得可以把procedure function begin end 等词作为关键字在.pas当中查询
当你查询到一对begin end的时候检查在begin 和 离它最近的一个function 或者 procedure
之间是不是还有begin end存在,如果存在表明这个begin end是在程序当中用到的
否则就可以给它添加注释了。
forgot2000 2005-02-22
  • 打赏
  • 举报
回复
唉,那么哪位朋友可以谈谈具体的想法呢?
aiirii 2005-02-21
  • 打赏
  • 举报
回复
DelForEx 還是有點復雜, 要花點時間, 而且, 用的是d4, 還是d5的open ToolsAPI, 當然到d7還兼容, 但函數是比較舊的!!!
forgot2000 2005-02-21
  • 打赏
  • 举报
回复
To zswang(伴水清清)(专家门诊清洁工):我就是特地看了DelForEx源码,但没发现,理解能力有限,没看懂。
redmoon_line 2005-02-21
  • 打赏
  • 举报
回复
关注
herman~~ 2005-02-20
  • 打赏
  • 举报
回复
上去看看先
aiirii 2005-02-20
  • 打赏
  • 举报
回复
应该不难,当然,分析算法要好,可能就难点!

ToolsAPI 可以得到打开.pas的消息,也可得到当前.pas的所有代码,剩下的就是一个算法来分析了,估计也可简单的实现!

具体代码,可参考陈省的 <<Delphi深度探索>>
imhappyboy 2005-02-20
  • 打赏
  • 举报
回复
建议你参考下cnpack,网址:www.cnpack.org
上面有完整的源代码,也有你要的功能.
数字蛋糕 2005-02-20
  • 打赏
  • 举报
回复
没有概念,关注!

不知道能不能在扫描的时候用一个栈来缓存出现的procedure或者function,以及begin/end关键字,当扫描到begin的时候检查栈中的记录,如果只有一个procedure或者function那么就说明应该在这个begin的后面添加注释。

也不知道Delphi的ToolsApi是否持对文件内容的扫描……
王集鹄 2005-02-20
  • 打赏
  • 举报
回复
没有这样的语句
procedure TForm1.Button1Click(Sender: TObject);
begin
...
Function aa():Boolean;
begin
end;
...
end;

是这样
procedure TForm1.Button1Click(Sender: TObject);
Function aa():Boolean;
begin
end;
begin
...
...
end;

你可以参考DelFox,是怎样分析排版的
  • 打赏
  • 举报
回复
想想不太好处理,能不能从其它地方想想呢?比如判断缩进为0的begin 与end 或其它的标志,呵呵。
forgot2000 2005-02-20
  • 打赏
  • 举报
回复
请大家给点想法好吗?

5,379

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧