收藏本站 收藏本站
积木网首页 - 软件测试 - 常用手册 - 站长工具 - 技术社区
积木学院 > 黑客技术 > 黑客编程 > 正文

编译原理的一个简单的枚举算法

来源:互联摘选 日期:2008-08-01 19:05

 
模仿C

能判断#include<>;main();int;char;for;printf;scanf;{};

 


 private
  //在str中找第一个单词 如果 找到则返回第一个单词的地址(phrase)和下一个要分析单词的入口(nextptr)
   //如果str是空串则返回false
    function phrase(str:string;phrase,nextptr:pchar):bool; //
    //括号匹配函数
    //p;判断字符的地址,char:什么括号(包括:<>;()2种),deep:允许嵌套么?匹配成功返回true;
    function brkmatch(p:pchar;brk:char;deep:bool;next:pchar):bool;
    function corbeil(r:trichedit;line,col:pinteger):bool; //line 返回出错的行,col返回出错的列;
    function semicolon(p,next:pchar):bool;//p:入口地址  next:下一个字符的地址
     //semicolon   如果没找到 返回false next=nil 找到其他字符 返回false且 next便指向他的下一个
    function analys(sour,dest:trichedit):bool;

  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
function tform1.corbeil(r:trichedit;line,col:pinteger):bool;
var
n,l,i,c:integer;
temp:pchar;
ptr:pchar;
begin
i:=0;
c:=r.Lines.Count;
n:=0;
  while c>1 do
  begin
  getmem(temp,length(r.Lines.Strings[i])+1);
  strcopy(temp,pchar(r.Lines.Strings[i]));
  ptr:=temp;
  l:=length(r.Lines.Strings[i]);
    while  l>1 do
    begin
      if ptr^='{' then
      begin
      n:=n+1;
      end
      else
        if ptr^='}'then
        if n>0 then
        n:=n-1
        else
          begin
          result:=false;
          break;
          line^:=r.Lines.Count-c+1;
          col^:=length(r.Lines.Strings[i])-l+1;
          end;

推荐阅读

 

热点信息

 
强悍的草根IT技术社区,这里应该有您想要的! 友情链接:b2b电子商务
Copyright © 2010 Gimoo.Net. All Rights Rreserved  京ICP备05050695号