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

📄 compilecomplex_hss.pas

📁 酒店管理VB源码
💻 PAS
📖 第 1 页 / 共 3 页
字号:
    procedure FunctionStackIn(const s:string);    //
    Function  FunctionStackOut():string;          //管理  函数符号调用堆栈
    Function  FunctionStackRead():string;         //

    function  ParameterListIn(const PName:string):integer;overload;  //将参数插入参数堆栈 并返回序号
    function  GetParameterListConstIndex(const PName:string):integer;
    function  ParameterListIn(const dValue:TComplex):string;overload; //将常数插入参数堆栈 并返回由系统定义的别名
    function  GetParameterIndex(const PName:string):integer;       //得到指定名称参数的序号

    procedure T_PTrueNowListIN(const TP:TT_PTrueCmCx);  //管理   (编译优化常数时) 参数性质堆栈
    function  T_PTrueNowListOut():TT_PTrueCmCx;         //

    function  OptimizeStackCall(const IfFxch:boolean=true):boolean;    // 优化堆栈调用


    //传入参数str,通过s返回
    function  Dbxch(var s:string;var str:string):boolean; // 书写格式转换函数  f(x,y) => ((x)f(y))
    
    procedure DelStrNote(var str:string); // 去掉str注释部分

    {编译 函数}
    //约定:  单元函数 通过 st(0)传复数实部x值st(1)传复数虚部y值 ,
    //                通过 st(0)返回复数实部x值st(1)返回复数虚部y值
    //       双元函数 通过 st(0) st(1) 传第一参数值,通过 [ecx] [ecx+SYS_EFLength] 传第二个参数 ,
    //                通过 st(0) st(1) 返回结果值
    //       函数可以 通过 [edx] 及以后的临时数据交换区来保存、修改或读取数据
    //       函数可以随意使用EAX
    
    Procedure F_Sys_Function_i(); //处理 i  //但因为编译优化的原因,所以该函数从不会被调用
    Procedure F_Add();
    Procedure F_Sub();
    Procedure F_Mul();
    Procedure F_Div();
    Procedure F_Real();
    Procedure F_Imag();
    Procedure F_Power();
    Procedure F_PowerX();
    Procedure F_XPower();
    Procedure F_Bracket(); { ()函数 }
    Procedure F_Rev();
    Procedure F_Conj();
    Procedure F_Flip();
    Procedure F_Unity();
    Procedure F_Distance();
    Procedure F_Sqr();
    Procedure F_Sqr2Z();
    Procedure F_Sqr3();
    Procedure F_Sqr4();
    Procedure F_Sqrt();
    Procedure F_SqrtN();
    Procedure F_Ln();
    Procedure F_Log();
    Procedure F_Log2();
    procedure F_LogN();
    Procedure F_Abs();
    Procedure F_AbsSqr();
    //Procedure F_AbsV();
    Procedure F_Angle();
    Procedure F_Max();
    Procedure F_Min();
    Procedure F_MaxX();
    Procedure F_MinX();
    Procedure F_FromPolar();
    Procedure F_ToPolar();
    Procedure F_Floor();
    Procedure F_Trunc();
    Procedure F_Round();
    Procedure F_Ceil();
    Procedure F_Sgn();
    Procedure F_Exp();
    procedure F_Rnd();

    Procedure F_Sin();
    Procedure F_Cos();
    Procedure F_Tan();
    procedure F_Ctg();
    procedure F_Csc();
    procedure F_Sec();
    Procedure F_ArcSin();
    Procedure F_ArcCos();
    Procedure F_ArcTan();
    Procedure F_ArcCot();
    Procedure F_ArcCsc();
    Procedure F_ArcSec();

    Procedure F_SinH();
    Procedure F_CosH();
    Procedure F_TanH();
    procedure F_CtgH();
    procedure F_CscH();
    procedure F_SecH();
    Procedure F_ArcSinH();
    Procedure F_ArcCosH();
    Procedure F_ArcTanH();
    Procedure F_ArcCotH();
    Procedure F_ArcCscH();
    Procedure F_ArcSecH();

    procedure F_SYS_IF_0();   //IF函数0
    procedure F_SYS_IF_1();   //IF函数1


    //布尔运算
    //所有布尔运算只考虑复数的实部
    //procedure FB_True();  //常量函数 true 真=1+0*
    //procedure FB_False(); //常量函数 false 假=0+0*i
    procedure FB_AND();   //逻辑 与
    procedure FB_OR();    //逻辑 或
    procedure FB_XOR();   //逻辑 异或
    procedure FB_NOT();   //逻辑 非
    //关系运算(返回布尔值)
    procedure FB_EQ();    //相等
    procedure FB_NE();    //不等于
    procedure FB_LT();    //小于
    procedure FB_GT();    //大于
    procedure FB_LE();    //小于等于
    procedure FB_GE();    //大于等于

    //procedure FB_ABS();    //|Z|,返回实数


    //编译函数调用的编译子函数(实数函数) ,一般完成 st=f(st)的工作
    procedure FF_Exp();
    procedure FF_Ln();
    procedure FF_Log2();
    procedure FF_Log10();

    procedure F_SYS_Fld_Value();//代码中载入值

    //procedure FF_Floor();
    //procedure FF_Trunc();
    //procedure FF_Round();
    //procedure FF_Ceil();

    procedure FF_FldHalf(); //载入0.5
    procedure FF_Fld_X(const x:extended); //载入x
    procedure FF_Fld_C(const Value:TComplex); //载入TComplex


    {有限状态自动机}

    function  DbxchSYS_FunctionIf(var s:string;var str:string):boolean; // 书写格式转换函数  If(a,b,c) =>TCmCxSYS_IF_1(TCmCxSYS_IF_0(b,c),a)

    function  DefineMarker(var Text:string;const Key,Value : string):boolean;  // 替换标识符 将Text 中 Key=>Value
    // 得到字符串中标识符的位置(源字符串,标识符,起始位置);
    function  GetMarkerPos(const str:string;const key:string;const ifirst:integer):integer;
    // myPos=pos
    function  myPos(const str:string;const key:string;const ifirst:integer):integer;

    function  Conversion0(var s:string;var str:string):boolean; //得到参数(常数)列表、函数转换
    procedure GetMarker(const Str:string;const iFirst:integer;var iEnd:integer); //含'@'、'&'取出标识符

    procedure GetMarkerValue0(const Str:string;const iFirst:integer;var iEnd:integer);{取出标识符的有限状态自动机}
    procedure GetMarkerValue1(const Str:string;const iFirst:integer;var iEnd:integer);

    procedure GetFloatValue0(const Str:string;const iFirst:integer;var iEnd:integer); {取出常数的有限状态自动机}
    procedure GetFloatValue1(const Str:string;const iFirst:integer;var iEnd:integer);
    procedure GetFloatValue2(const Str:string;const iFirst:integer;var iEnd:integer);
    procedure GetFloatValue3(const Str:string;const iFirst:integer;var iEnd:integer);
    procedure GetFloatValue4(const Str:string;const iFirst:integer;var iEnd:integer);
    procedure GetFloatValue5(const Str:string;const iFirst:integer;var iEnd:integer);
    procedure GetFloatValue6(const Str:string;const iFirst:integer;var iEnd:integer);

    

  public
    { Public declarations }
    constructor Create();
    destructor  Destroy();Override;
  end;

  {$IFDEF MSWINDOWS}

  TSystemTime = record
          wYear   : Word;
          wMonth  : Word;
          wDayOfWeek  : Word;
          wDay    : Word;
          wHour   : Word;
          wMinute : Word;
          wSecond : Word;
          wMilliSeconds: Word;
          reserved    : array [0..7] of char;
  end;
  procedure GetSystemTime(var lpSystemTime: TSystemTime); stdcall;
  {$EXTERNALSYM GetSystemTime}

  {$ENDIF}

  type TCmCx=TCompileComplex;     {简写 , :) }

  //错误号定义
  const csTCmCx_NoError              =   0;   //没有发现错误!
        csTCmCx_NoKnownError         = 101;   //不知道的错误!
        csTCmCx_NoErrorCode          = 102;   //找不到错误号所对应的错误描述!
        csTCmCx_CompileHexCodeError  = 103;   //编译时指令的十六进制代码错误!
        csTCmCx_HexMod2_EQ_1_Error   = 104;   //编译时传入指令长度错误!
        csTCmCx_PMMarker_Error       = 105;   //编译得到参数名称时发生错误!
        csTCmCx_FMMarker_Error       = 106;   //编译得到函数名称时发生错误!
        csTCmCx_Wording_Error        = 107;   //语法发生错误!
        csTCmCx_Bracket_Error        = 108;   //语法错误,在 ( ) 处!
        csTCmCx_Optimize_Error       = 109;   //编译优化时发生错误!
        csTCmCx_Define_Error         = 110;   //函数编译错误(或超出定义域)!
        csTCmCx_Handwriting_Error    = 111;   //函数书写格式错误!
        
        csTCmCx_ReadFloat_Error      = 113;   //编译读取常数数字时发生错误!
        csTCmCx_ReadMarker_Error     = 114;   //编译读取标识符时发生错误!
        csTCmCx_Read_Error           = 115;   //语法错误,有不识别的字符!
        csTCmCx_Note_Match_Error     = 116;   //注释符号不匹配!  { } 或 /*  */
        csTCmCx_FPList_Error         = 117;   //参数列表错误!
        csTCmCx_IFHandwriting_Error  = 118;   //If函数书写格式错误!


implementation

function  TCompileComplex.GetError():string;
begin
  result:=GetErrorGB(ErrorCode);
end;

function  TCompileComplex.GetErrorGB(const xErrorCode:integer):string;     //返回错误描述
begin
  case xErrorCode of
    csTCmCx_NoError              :result:='';//没有发现错误!
    csTCmCx_NoKnownError         :result:='不知道的错误!';
    csTCmCx_NoErrorCode          :result:='找不到错误号所对应的错误描述!';
    csTCmCx_CompileHexCodeError  :result:='编译时指令的十六进制代码错误!';
    csTCmCx_HexMod2_EQ_1_Error   :result:='编译时传入指令长度错误!';
    csTCmCx_PMMarker_Error       :result:='编译得到参数名称时发生错误!';
    csTCmCx_FMMarker_Error       :result:='编译得到函数名称时发生错误!';
    csTCmCx_Wording_Error        :result:='语法发生错误!';
    csTCmCx_Bracket_Error        :result:='语法错误,在 ( ) 处!';
    csTCmCx_Optimize_Error       :result:='编译优化时发生错误!';
    csTCmCx_Define_Error         :result:='函数编译错误(或超出定义域)!';
    csTCmCx_Handwriting_Error    :result:='函数书写格式错误!';
    
    csTCmCx_ReadFloat_Error      :result:='编译读取常数数字时发生错误!';
    csTCmCx_ReadMarker_Error     :result:='编译读取标识符时发生错误!';
    csTCmCx_Read_Error           :result:='语法错误,有不识别的字符!';
    csTCmCx_Note_Match_Error     :result:='注释符号不匹配!  { } 或 /*  */';
    csTCmCx_FPList_Error         :result:='参数列表错误!';
    csTCmcX_IfHandwriting_Error  :result:='If函数书写格式错误!';
  else result:=GetErrorGB(csTCmCx_NoErrorCode);
  end;
end;

function  TCompileComplex.GetErrorBIG5(const xErrorCode:integer):string;     //返回错误描述
begin
  //注意:以下使用的是中文繁体BIG5码,要使用内码转换器才能察看
  case xErrorCode of
    csTCmCx_NoError              :result:='';//⊿Τ祇瞷岿粇!
    csTCmCx_NoKnownError         :result:='ぃ

⌨️ 快捷键说明

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