⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dftokens.pas

📁 C,C++ To Delphi转换器 C,C++ To Delphi转换器
💻 PAS
字号:
unit DFTokens;
// Free for any project that try to translate C to Pascal
// (c)2002 by Paul TOTH <tothpaul@free.fr>

interface

uses
 Classes;

Type
 TToken=class
  name:string;
  function Execute:boolean; virtual; abstract;
 end;

 TAction=procedure of object;

 TActionToken=class(TToken)
  action:TAction;
  function Execute:boolean; override;
 end;

 TMacroToken=class(TToken)
  value:string;
  function Execute:boolean; override;
 end;

 TType=(tOrdinal);

 TTypeToken=class(TToken)
  kind:TType;
  size:integer;
 end;

 TTokens=class
 private
  Tokens:TList;
  Types :TList;
 public
  Constructor Create;
  function SetAction(name:string; action:TAction):TActionToken;
  function SetMacro(name:string; value:string):TMacroToken;
  function DefineType(name:string; kind:TType; size:integer):TTypeToken;
  function Eval(Token:string):boolean;
 end;

var
 Tokens:TTokens;

implementation

uses
 DFParser;

function TActionToken.Execute:boolean;
 begin
  result:=true;
  Action;
 end;

function TMacroToken.Execute:boolean;
 begin
  Parser.PutMacro(value);
 end;

Constructor TTokens.Create;
 begin
  Tokens:=TList.Create;
  Types :=TList.Create;
  DefineType('int',tOrdinal,32);
 end;

function TTokens.SetAction(name:string; action:TAction):TActionToken;
 begin
  Result:=TActionToken.Create;
  Result.name:=name;
  Result.action:=action;
  Tokens.Add(Result);
 end;

function TTokens.SetMacro(name:string; value:string):TMacroToken;
 begin
  Result:=TMacroToken.Create;
  Result.name:=name;
  Result.value:=value;
  Tokens.Add(Result);
 end;

function TTokens.DefineType(name:string; kind:TType; size:integer):TTypeToken;
 begin
  Result:=TTypeToken.Create;
  Result.name:=name;
  Result.kind:=kind;
  Result.size:=size;
  Types.Add(Result);
  Tokens.Add(Result);
 end;

function TTokens.Eval(token:string):boolean;
 var
  i:integer;
 begin
  Result:=True;
  for i:=Tokens.Count-1 downto 0 do begin
   with TToken(Tokens[i]) do if (Name=token)and(Execute) then exit;
  end;
  Result:=False;
 end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -