亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? draak.pas

?? Draak is a multi-language, macro compiler, meaning all syntax and code generation is defined in a si
?? PAS
字號:
(* Draak.pas: Please consult the end of this file for copyright information   *)
unit Draak;

interface

uses
  SysUtils, Classes,
  StrUtils,
  Contnrs,
  filedrv,
  gmrdrv,
  cmddrv,
  parser,
  hashs,
  error;

type
  TDraakNotify = procedure(sender: TObject; s: string) of object;

  TDraakFlags = set of (TimeStat, HashTime);

  TDraak = class(TComponent)
  private
    error: TError;
    Grammar: TGmr;
    root: PParseNode;
    FonError: TDraakNotify;
    FonStatus: TDraakNotify;
    FonStream: TdraakNotify;
    FonNodeCreate: TDraakNotify;
    FonNodeChild: TDraakNotify;
    FonNodePop: TDraakNotify;
    FonCompile: TDraakNotify;
    FonAssemble: TDraakNotify;
    FonLink: TDraakNotify;
    Flag: TDraakFlags;
    FSearchPath: string;
    finalSuccess: boolean;
  public
    property rootNode: PParseNode read root;
    property success: boolean read finalSuccess;
  published
    property Flags: TDraakFlags read Flag write Flag;
    property SearchPath: string read FSearchPath write FSearchPath;
    property onError: TDraakNotify read FonError write FonError;
    property onStatus: TDraakNotify read FonStatus write FonStatus;
    property onStream: TDraakNotify read FonStream write FonStream;
    property onNodeCreate: TDraakNotify read FonNodeCreate write FonNodeCreate;
    property onNodeChild: TDraakNotify read FonNodeChild write FonNodeChild;
    property onNodePop: TDraakNotify read FonNodePop write FonNodePop;
    property onCompile: TDraakNotify read FonCompile write FonCompile;
    property onAssemble: TDraakNotify read FonAssemble write FonAssemble;
    property onLink: TDraakNotify read FonLink write FonLink;
    constructor create(AOwner: TComponent); override;
    procedure compile(outStream: TFileStream; inFile: string);
    procedure parse(inFile: string);
    procedure clearGrammer;
    procedure produceCopyright;
    { Published declarations }
  end;

  EDraakNoCompile = class(Exception)

  end;

procedure Register;

implementation

{$ifdef MSWindows} uses windows; {$endif}

function timeCount(var t: int64): double;
var i, f: int64;
begin
  {$ifdef MSWindows}
  if t = 0 then
  begin
    QueryPerformanceCounter(t);
    result := 0;
  end else
  begin
    QueryPerformanceCounter(i);
    QueryPerformanceFrequency(f);
    result := (i-t) / f;
  end; {$endif}
  {$ifdef Linux}
  result := 0;{$Endif}
end;

constructor TDraak.create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  error := TError.create(self);
end;

procedure TDraak.parse(inFile: string);
var loadedFile: string;
    ext, gmrfile: string;
    name: string;
    noext: string;
    lPath: PChar;
    t: int64; tim: double;
    parse: TParser;
begin
  loadedFile := inFile;
  ext := AnsiStrRScan(PChar(loadedFile), '.')+1;
  lPath := AnsiStrRScan(PChar(loadedFile), PathDelim);
  if lPath <> nil then
    name := lPath+1
  else
    name := loadedFile;
  noext := Leftstr(name, AnsiPos('.', name)-1);
  gmrFile := FileSearch({ext+PathDelim+}ext+'.gmr', FSearchPath);

  t := 0; timeCount(t);
  if Grammar = nil then
    Grammar := TGmr.init(TFile.init(gmrFile));
  tim := timeCount(t);
  if HashTime in Flag then error.status(FloatToStrF(tim,ffFixed, 0, 2)+' seconds to hash.');
  t := 0; timeCount(t);
  parse := TParser.Create;
  parse.err := error;
  parse.parse(TFile.init(inFile), Grammar);
  if (parse.rootNode <> nil) AND (root = nil) then
    root := parse.rootNode;
  tim := timeCount(t);
  if TimeStat in Flag then error.status(FloatToStrF(tim, ffFixed, 0, 2)+' seconds.');
end;

procedure TDraak.compile(outStream: TFileStream; inFile: string);
var loadedFile: string;
    ext, gmrFile: string;
    name: string;
    noext: string;
    lPath: PChar;
    t: int64; tim: double;
    macro: TMacro;
    parse: TParser;
begin
  loadedFile := inFile;
  ext := AnsiStrRScan(PChar(loadedFile), '.')+1;
  lPath := AnsiStrRScan(PChar(loadedFile), PathDelim);
  if lPath <> nil then
    name := lPath+1
  else
    name := loadedFile;
  noext := Leftstr(name, AnsiPos('.', name)-1);
  gmrFile := FileSearch({ext+PathDelim+}ext+'.gmr', FSearchPath);

  t := 0; timeCount(t);
  if Grammar = nil then
    Grammar := TGmr.init(TFile.init(gmrFile));
  tim := timeCount(t);
  if HashTime in Flag then error.status(FloatToStrF(tim, ffFixed, 0, 2)+' seconds to hash.');
  t := 0; timeCount(t);
  parse := TParser.Create;
  parse.err := error;
  parse.parse(TFile.init(inFile), Grammar);
  if parse.rootNode <> nil then
  begin
    if root = nil then
      root := parse.rootNode;
    macro := TMacro.create;
    macro.vars := TVars.Create(noext, nil, error);
    macro.err := error;
    macro.gmr := Grammar;
    macro.searchDirs := FSearchPath;
    macro.execute(parse.rootNode);
    if macro.giantError = false then
    begin
      macro.outCode.SaveToStream(outStream);
      macro.outData.SaveToStream(outStream);
      error.status(noext+'.pas: Compiled! ('+intToStr(parse.lines)+' lines)' );
      finalSuccess := true;
    end else begin finalSuccess := false; error.err('Error compiling file.'); end;
//    macro.destroy;
    Grammar.Destroy;
  end;
  tim := timeCount(t);
  if TimeStat in Flag then error.status(FloatToStrF(tim, ffFixed, 0, 2)+' seconds.');
end;

procedure TDraak.clearGrammer;
begin
  Grammar := nil; root := nil;
end;

procedure TDraak.produceCopyright;
begin
  error.status('(* ************************************************************ *)');
  error.status('(* Copyright (c) 1999-2004 Jon Gentle, All right reserved.      *)');
  error.status('(* ************************************************************ *)');
end;

procedure Register;
begin
  RegisterComponents('TOASC', [TDraak]);
end;

(* ************************************************************ *)
(* Copyright (c) 1999-2004 Jon Gentle, All right reserved.      *)
(* ************************************************************ *)
(* This software is given As-Is.  No warranties of any kind,    *)
(* implied or expressed, are given to anyone.  The author(s)    *)
(* shall not be held for any liability under any circumstances. *)
(* Permission is granted to anyone who wishes to alter, use or  *)
(* distribute this software, as long as the following           *)
(* restrictions are met:                                        *)
(*                                                              *)
(* 1) The above copyright and this notice must appear in the    *)
(* software in source code form.  Under no circumstance are     *)
(* these to be removed.                        			            *)
(* 2) The above copyright notice must appear in the software in *)
(* binary form							                                    *)
(* 3) Anyone other then the copyright owner that alters source  *)
(* code must mark the source code and resulting binary form as  *)
(* altered.                                                     *)
(* 4) Original authorship of part or whole must not be          *)
(* misrepresented.                                              *)
(* 5) Any original or modified source code under this licence   *)
(* must be made available upon request.                         *)
(* ************************************************************ *)

begin
end.

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩欧美一级二级| 色激情天天射综合网| 亚洲欧美色一区| 国产女主播在线一区二区| 欧美日本国产视频| 在线亚洲高清视频| 欧美午夜精品久久久久久超碰 | 亚洲国产综合色| 亚洲欧美怡红院| 国产精品久久久久影院亚瑟| 国产精品网站一区| 国产精品免费人成网站| 国产精品每日更新在线播放网址| 日本一区二区三区久久久久久久久不 | 日本成人在线网站| 日韩影院在线观看| 乱一区二区av| 国产精品原创巨作av| 粉嫩av亚洲一区二区图片| www.色精品| 在线观看国产日韩| 日韩欧美在线一区二区三区| www国产亚洲精品久久麻豆| 久久婷婷国产综合精品青草| 国产精品久久久久久久久久免费看| 国产精品美女www爽爽爽| 亚洲一区二区三区四区不卡| 免费日韩伦理电影| 国产激情一区二区三区四区| www.激情成人| 欧美日韩高清一区| 日韩美女啊v在线免费观看| 亚洲蜜臀av乱码久久精品蜜桃| 亚洲成人你懂的| 国内精品免费**视频| 成人18视频日本| 欧美肥大bbwbbw高潮| 国产亚洲精品aa午夜观看| 夜夜爽夜夜爽精品视频| 国内外成人在线视频| 色av成人天堂桃色av| 欧美精品一区二区三区蜜臀| 一区二区三区在线看| 久久成人免费日本黄色| 色婷婷综合久久久久中文一区二区| 欧美高清一级片在线| 中文字幕乱码亚洲精品一区| 五月天欧美精品| 国产 日韩 欧美大片| 7777精品伊人久久久大香线蕉最新版| 亚洲精品一区二区三区香蕉| 亚洲国产cao| 成人免费va视频| 精品美女一区二区| 亚洲v中文字幕| 色婷婷综合久久久| 欧美高清在线视频| 麻豆极品一区二区三区| 欧美伊人久久大香线蕉综合69| 久久蜜桃av一区精品变态类天堂 | 一本色道久久加勒比精品| 精品少妇一区二区三区 | 欧美影院一区二区| 国产精品萝li| 国产一区高清在线| 91精品国产乱| 亚洲福利电影网| 在线亚洲高清视频| 中文字幕字幕中文在线中不卡视频| 国产尤物一区二区| 欧美成人性战久久| 日韩成人午夜精品| 欧美理论片在线| 亚洲成人免费观看| 欧美三区在线观看| 亚洲一区免费观看| 欧美色图12p| 亚洲第一会所有码转帖| 欧美午夜片在线看| 亚洲国产一区视频| 欧美日韩国产一区| 婷婷开心激情综合| 日韩视频免费观看高清完整版在线观看| 亚洲裸体在线观看| 色婷婷久久99综合精品jk白丝| 国产精品乱码久久久久久| 丁香五精品蜜臀久久久久99网站| 国产人成一区二区三区影院| 国产精品888| 国产精品成人网| 一本色道综合亚洲| 亚洲第一成人在线| 欧美一区二区视频观看视频| 久久不见久久见中文字幕免费| 日韩女优电影在线观看| 国产精品中文字幕日韩精品| 国产清纯白嫩初高生在线观看91 | 国产日韩欧美精品电影三级在线| 国产**成人网毛片九色| 亚洲人一二三区| 欧美色倩网站大全免费| 奇米精品一区二区三区四区| www激情久久| 色综合天天在线| 天天免费综合色| 日韩欧美在线网站| av中文字幕一区| 午夜精品久久久久久久久| 精品日产卡一卡二卡麻豆| 国产精品中文字幕一区二区三区| 亚洲视频1区2区| 日韩欧美的一区二区| 成人av在线播放网址| 亚洲一区在线视频观看| 欧美刺激脚交jootjob| 99久久免费国产| 自拍av一区二区三区| 国产欧美一区视频| 精品一区二区三区在线观看| 欧美国产综合色视频| 欧美视频中文一区二区三区在线观看| 日韩电影免费一区| 国产精品电影院| 日韩精品一区国产麻豆| 91麻豆国产在线观看| 久久99精品国产91久久来源| 亚洲精品中文字幕在线观看| 久久综合久久综合久久综合| 欧美亚洲丝袜传媒另类| 成人免费av网站| 蜜臀av性久久久久av蜜臀妖精| 综合自拍亚洲综合图不卡区| 精品国产一区二区精华| 欧美少妇bbb| 99久免费精品视频在线观看| 国产一区二区女| 日本在线不卡一区| 一区二区三区鲁丝不卡| 国产精品日韩成人| 久久这里只有精品视频网| 欧美精品久久久久久久多人混战 | 日韩国产欧美三级| 一区二区三区四区av| 国产精品久久久久久久久快鸭| 欧美精品一区二区三区很污很色的| 欧美日韩小视频| 一本到不卡免费一区二区| 成人在线视频一区| 国产成人免费视频网站高清观看视频 | 男男视频亚洲欧美| 亚洲国产精品精华液网站| 亚洲私人影院在线观看| 国产精品女人毛片| 国产精品久久久久婷婷二区次| 久久夜色精品国产欧美乱极品| 亚洲人妖av一区二区| 国产精品视频观看| 国产亲近乱来精品视频| 久久精子c满五个校花| 久久这里只有精品首页| 久久精品视频在线看| 国产亚洲一二三区| 国产欧美在线观看一区| 日本一区二区三级电影在线观看| 久久久久久亚洲综合影院红桃 | 国产欧美一区二区精品性色超碰 | 成人一区二区在线观看| 不卡大黄网站免费看| 色综合一区二区三区| 欧洲色大大久久| 欧美日韩精品欧美日韩精品一综合| 欧美日韩国产高清一区二区| 91精品国产综合久久久久| 精品国精品自拍自在线| 久久精品亚洲精品国产欧美kt∨| 日本一区二区视频在线观看| 亚洲日本免费电影| 亚洲成av人影院在线观看网| 热久久一区二区| 国产精品一区在线观看你懂的| 成人黄色软件下载| 欧美丝袜自拍制服另类| 亚洲精品一区二区三区精华液| 国产精品久久午夜| 午夜久久久久久电影| 黄页视频在线91| aaa国产一区| 欧美一级片在线| 亚洲国产精品高清| 亚洲国产精品久久不卡毛片| 国产一区二区三区在线观看免费视频| 成人午夜看片网址| 欧美精品一卡两卡| 国产欧美日韩麻豆91| 亚洲第一av色| 成人教育av在线| 日韩视频免费观看高清完整版| 国产精品美女久久久久久久久久久 | 国产网红主播福利一区二区| 亚洲在线视频免费观看|