📄 dftokens.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 + -