考考大家<<怎样除去源代码的注释>>//zswang

zswangII 2001-12-10 12:42:50
<<怎样除去源代码的注释>>不简单哦
No.1 编译指令不能除(如:{$I+})
No.2 字符表达式中不能除(如:'{ 我不是注释,我是字符串 }')
No.3 其他情况
如:
begin
//{要小心哦
Inc(I);//}
end;
...全文
202 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
zswangII 2002-01-20
  • 打赏
  • 举报
回复
谷谷谷强强强
acgzdbbaczg
谷谷谷强谷谷
zswangII 2001-12-16
  • 打赏
  • 举报
回复
to xzgyb(老达摩):谢谢你的关注
zswangII 2001-12-15
  • 打赏
  • 举报
回复
给分用
xzgyb 2001-12-15
  • 打赏
  • 举报
回复
zswang
我终于看懂了你的代码,累得我直喘,我真是笨哪
不过真不错,谢谢你的代码,看来偶得好好学习阿
王集鹄 2001-12-12
  • 打赏
  • 举报
回复
type
TModalStr = record
rBegin: string;
rEnd: string;
rAppend: string;
rSingle: Byte;
end;

const
cPascalCount = 5;
cPascalList: array[0 .. Pred(cPascalCount)] of TModalStr =
(
(rBegin: ''''; rEnd: ''''; rAppend: ''; rSingle: 1),
(rBegin: '{$'; rEnd: '}'; rAppend: ''; rSingle: 2),
(rBegin: '{'; rEnd: '}'; rAppend: ''; rSingle: 3),
(rBegin: '(*'; rEnd: '*)'; rAppend: ''; rSingle: 4),
(rBegin: '//'; rEnd: #13#10; rAppend: #13#10; rSingle: 5)
);

const
cSQLCount = 4;
cSQLList: array[0 .. Pred(cSQLCount)] of TModalStr =
(
(rBegin: ''''; rEnd: ''''; rAppend: ''; rSingle: 1),
(rBegin: '"'; rEnd: '"'; rAppend: ''; rSingle: 2),
(rBegin: '/*'; rEnd: '*/'; rAppend: ''; rSingle: 3),
(rBegin: '--'; rEnd: #13#10; rAppend: #13#10; rSingle: 4)
);

function GetModalStr(mStr: string; mModalStrList: array of TModalStr;
mSingles: TIntegerSet): string;
var
vSingle: Integer;
I, J: Integer;
T, K: Integer;
vEnd: string;
vAppend: string;
begin
Result := '';
vSingle := 0;
T := 0;
K := 0;
for I := 1 to Length(mStr) do begin
if T > 1 then begin
Dec(T);
Continue;
end;
if vSingle = 0 then begin
vEnd := '';
for J := Low(mModalStrList) to High(mModalStrList) do begin
K := Length(mModalStrList[J].rBegin);
if Copy(mStr, I, K) = mModalStrList[J].rBegin then begin
vEnd := mModalStrList[J].rEnd;
vAppend := mModalStrList[J].rAppend;
vSingle := mModalStrList[J].rSingle;
if vSingle in mSingles then
Result := Result + mModalStrList[J].rBegin;
T := K;
K := Length(vEnd);
Break;
end;
end;
if (vEnd = '') and (vSingle in mSingles) then
Result := Result + mStr[I];
end else if Copy(mStr, I, K) = vEnd then begin
if vSingle in mSingles then
Result := Result + vEnd
else Result := Result + vAppend;
vSingle := 0;
T := K;
end else if vSingle in mSingles then
Result := Result + mStr[I];
end;
end; { GetModalStr }

procedure TForm1.Button1Click(Sender: TObject);
begin
Memo2.Text := GetModalStr(Memo1.Text, cPascalList, [0..cPascalCount] - [3, 4, 5]);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Memo2.Text := GetModalStr(Memo1.Text, cSQLList, [0..cSQLCount] - [3, 4]);
end;
rockhard 2001-12-12
  • 打赏
  • 举报
回复
很有意思,上推!且关..注中!
王集鹄 2001-12-11
  • 打赏
  • 举报
回复
没有人想自己思考思考吗?
明晚我就公布参考答案哦!
王集鹄 2001-12-11
  • 打赏
  • 举报
回复
没有人想自己思考思考吗?
明晚我就公布参考答案哦!
kylion 2001-12-11
  • 打赏
  • 举报
回复
用LR分析。我的毕业设计可以自动生成LR分析表,有了LR分析表不就简单了!
王集鹄 2001-12-11
  • 打赏
  • 举报
回复
“上一次密码掉了才注册的,后来找了”
(zswang递给cobi一颗珠珠糖)
“快去做功课,不要学警察叔叔,问这问哪的”
cobi 2001-12-11
  • 打赏
  • 举报
回复
看看!
伴水,你也太无聊了,一个人两个帐户轮着上
zswangII 2001-12-10
  • 打赏
  • 举报
回复
<输入举例>
procedure TForm1.Button1Click(Sender: TObject);
begin
{$I+}
Caption := '{ wjhu111@21cn.com }'; //我邮箱
{ 情况还不少 }
(* 情况还不少 *)
//{ //我喜欢用这种方法屏蔽代码
Color := clRed;
Font.Color := clBlue;
//}
end;

<输出举例>
procedure TForm1.Button1Click(Sender: TObject);
begin
{$I+}
Caption := '{ wjhu111@21cn.com }';
Color := clRed;
Font.Color := clBlue;
end;
王集鹄 2001-12-10
  • 打赏
  • 举报
回复
IDE有除掉注释的功能?在哪里?我怎么不知道呀!
这是算法问题,和工具没有关系
也可以是除掉C、SQL、BASIC注释呀!
gaden007 2001-12-10
  • 打赏
  • 举报
回复
我很菜,做就不会做了,
但如果能跟delphi的IDE连接可能可以吧
enlightenment 2001-12-10
  • 打赏
  • 举报
回复

跟括号比对类似的,可以用数组、链表堆栈等方式存储关键字。以前有帖子讨论和贴源程序的!

zhuxiaozhu 2001-12-10
  • 打赏
  • 举报
回复
look,look
王集鹄 2001-12-10
  • 打赏
  • 举报
回复
关编译原理什么事?
greenspan 2001-12-10
  • 打赏
  • 举报
回复
有没有学过编译原理呀?
王集鹄 2001-12-10
  • 打赏
  • 举报
回复
to copy_paste(木石三):
总用别人的方法不好哟!很难提高
这个问题,自己先想想看吧!
我是考考大家,我已经写过测试过
copy_paste 2001-12-10
  • 打赏
  • 举报
回复
我以前下了一控件,那源码的关键字是大写,而且写的风格不是VCL,是C的,我就写了一个程序转换,不过我不知丢哪去了。基本上是对每行字符串中的每一个字符进行分析,基本上所有的可能都加上去了。可惜,不然贴出来看看
加载更多回复(1)

5,379

社区成员

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

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