栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

BCX 7.9.0修改

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

BCX 7.9.0修改

BCX : MIT and Open Source

1、修改PROPERTY满足Sub(Setter)和Function(Getter)功能.(利用C++函数多态特性"实现")
   '*********************************************************************
   '    Transform METHOD, PROPERTY, PROPSET, and PROPGET - 787 MrBcx
   '*********************************************************************
   IF UseCpp THEN
      IF iMatchNQ(Src$, "propget")  THEN IREPLACe "propget"  WITH "FUNCTION" IN Src$
      IF iMatchNQ(Src$, "propset")  THEN IREPLACE "propset"  WITH "SUB"      IN Src$
        ''PROPERTY Getter(Optional Value As DataType) AS DOUBLE==>"FUNCTION(Getter)";PS:可增加临时变量(FSetter、FGetter),将之与Setter()、Getter()关联起来。
      IF iMatchNQ(Src$, "property") AND ( iMatchNQ(Src$, ") AS ") OR iMatchNQ(Src$, ")  AS ") OR iMatchNQ(Src$, ")   AS ") OR iMatchNQ(Src$, ")    AS") OR iMatchNQ(Src$, "%(") OR iMatchNQ(Src$, "!(") OR iMatchNQ(Src$, "#(") OR iMatchNQ(Src$, "$(") OR iMatchNQ(Src$, "`(") OR iMatchNQ(Src$, "@(") OR iMatchNQ(Src$, "*(")) THEN
     DIM szTmp$
         szTmp$ = SPC$ + Src$ + SPC$
         IF INSTR(szTmp$, " property ", 0, 1) OR INSTR(szTmp$, " property=", 0, 1) THEN
            IREPLACE "property" WITH "FUNCTION"  IN Src$
         END IF
    ''PROPERTY Getter(Optional Value As DataType)=... ==>"FUNCTION(Getter)=...";PS:可增加临时变量(FSetter、FGetter),将之与Setter()、Getter()关联起来。
      ELSEIF iMatchNQ(Src$, "property") AND iMatchNQ(Src$, "=") THEN
        DIM szTmp$
         szTmp$ = SPC$ + Src$ + SPC$
         IF INSTR(szTmp$, " property ", 0, 1) OR INSTR(szTmp$, " property=", 0, 1) THEN
            IREPLACE "property" WITH "FUNCTION"  IN Src$
         END IF
    ''PROPERTY Setter(n AS DOUBLE)==>"SUB(Setter)";PS:可增加临时变量(FSetter、FGetter),将之与Setter()、Getter()关联起来。
      ELSEIF iMatchNQ(Src$, "property") THEN
          DIM szTmp$
         szTmp$ = SPC$ + Src$ + SPC$
         IF INSTR(szTmp$, " property ", 0, 1) THEN
            IREPLACE "property" WITH "SUB"  IN Src$
         END IF 
      END IF
      IF iMatchNQ(Src$, "method") THEN
         DIM szTmp$
         szTmp$ = SPC$ + Src$ + SPC$
         IF INSTR(szTmp$, " method ", 0, 1) OR INSTR(szTmp$, " method=", 0, 1) THEN
            IREPLACE "method" WITH "FUNCTION"  IN Src$
         END IF
      END IF
   END IF

2、修改To处理,兼容Select Case Case Condition1...Condition2范围方式。
''(增加:OR iMatchWrd(Stk$[i],"...") )''处理Case附近。CASE "case"

IF iMatchWrd(Stk$[i],"to")  OR iMatchWrd(Stk$[i],"...") THEN

3、修改Type和Union字符串处理方式。(增加:OR i = vt_UNIOn)
FUNCTION IM_UDT_SINGLE (szArg$)
   DIM RAW A$
   DIM RAW VarName$              ' Variable Name  ex.  A.tree  => "A"
   DIM RAW Member$               ' Member Name    ex.  A.tree  => "tree"
   DIM RAW i
   A$ = Clean$(szArg$)
   i = INSTR(A$, ".")
   IF i = 0 THEN FUNCTION = FALSE
   INCR i
   VarName$ = EXTRACT$(A$, ".")
   Member$  = MId$(A$,INSTRREV (A$, ".") + 1) ' MrBcx 790 Changed from 789
   i = CheckType(VarName$)
   IF i = vt_UDT OR i = vt_STRUCT  OR i = vt_UNIOn THEN
      FOR INT y = 1 TO TypeDefsCnt
         FOR INT z = 0 TO TypeDefs[y].EleCnt
            IF TypeDefs[y].Elements[z].ElementName$ = Member$   AND _
               TypeDefs[y].Elements[z].ElementType  = vt_SINGLE THEN
               FUNCTION = TRUE
            END IF
         NEXT
      NEXT
   END IF
   FUNCTION = FALSE
END FUNCTION

FUNCTION IM_UDT_DOUBLE (szArg$)
   DIM RAW A$
   DIM RAW VarName$              ' Variable Name  ex.  A.tree  => "A"
   DIM RAW Member$               ' Member Name    ex.  A.tree  => "tree"
   DIM RAW i
   A$ = Clean$(szArg$)
   i = INSTR(A$, ".")
   IF i = 0 THEN FUNCTION = FALSE
   INCR i
   VarName$ = EXTRACT$(A$, ".")
   Member$  = MId$(A$,INSTRREV (A$, ".") + 1) ' MrBcx 790 Changed from 789
   i = CheckType(VarName$)
   IF i = vt_UDT OR i = vt_STRUCT  OR i = vt_UNIOn  THEN
      FOR INT y = 1 TO TypeDefsCnt
         FOR INT z = 0 TO TypeDefs[y].EleCnt
            IF TypeDefs[y].Elements[z].ElementName$ = Member$ THEN
               IF  TypeDefs[y].Elements[z].ElementType = vt_DOUBLE OR _
                  TypeDefs[y].Elements[z].ElementType = vt_LDOUBLE THEN
                  FUNCTION = TRUE
               END IF
            END IF
         NEXT
      NEXT
   END IF
   FUNCTION = FALSE
END FUNCTION

FUNCTION IM_UDT_STRING(szArg$)
   DIM RAW A$
   DIM RAW VarName$              ' Variable Name  ex.  A.tree  => "A"
   DIM RAW Member$               ' Member Name    ex.  A.tree  => "tree"
   DIM RAW i
   A$ = Clean$(szArg$)
   i = INSTR(A$, ".")
   IF i = 0 THEN FUNCTION = FALSE
   INCR i
   VarName$ = EXTRACT$(A$, ".")
   Member$  = MId$(A$,INSTRREV (A$, ".") + 1) ' MrBcx 790 Changed from 789
   i = CheckType(VarName$)
   IF i = vt_UDT OR i = vt_STRUCT  OR i = vt_UNIOn  THEN
      FOR INT y = 1 TO TypeDefsCnt
         FOR INT z = 0 TO TypeDefs[y].EleCnt
            IF TypeDefs[y].Elements[z].ElementName$    = Member$   THEN
               IF TypeDefs[y].Elements[z].ElementType  = vt_STRVAR OR _
                  TypeDefs[y].Elements[z].ElementType  = vt_LPSTR  OR _
                  TypeDefs[y].Elements[z].ElementType  = vt_CHAR   THEN
                  FUNCTION = TRUE
               END IF
            END IF
         NEXT
      NEXT
   END IF
   FUNCTION = FALSE
END FUNCTION

4、OOP "using"增加"extends"兼容;
搜索所有 "using",增加OR ...="extends",(小写,BcxKeyWords[]除外)。

5、增加注释掉#include
//#include

6、修改版本标识。
MACRO VERSION$   = "7.9.0(Mod By IBMInfo78) (06/18/2022)"   ' Burn this into the executable

7、修改BCC32C编译#include 、#include 错误:
增加BCC32C对应stdbool.h、inttypes.h空文件。
''并在项目包含文件中添加以下宏定义:
#define _strlwr strlwr
#define _strupr strupr
#define _stricmp stricmp
#define _chdir chdir
#define _mkdir mkdir


//========================================================================
//========================================================================

''!!!修改后,可以处理如下Basic伪码(脚本???)。

''Test01:
CLASS bcx_vector
  PROTECTED:
  DIM RAW AS  DOUBLE x
  DIM RAW AS  DOUBLE y
  PUBLIC: 
  PROPERTY Prop_X (n AS DOUBLE)    ''Setter
   x = n
  END PROPERTY

  PROPERTY Prop_X()  AS DOUBLE    ''Getter
    PROPERTY = x
  END PROPERTY
  PROPERTY Prop_Y(n AS DOUBLE)    ''Setter
   y = n
  END PROPERTY

  PROPERTY Prop_Y() AS DOUBLE        ''Getter
    PROPERTY = y 
  END  PROPERTY
 
  PROPERTY Surface() AS DOUBLE    ''Function/Method
   DIM RAW AS  DOUBLE s
   s = x * y
   IF s < 0 THEN s = -s
   PROPERTY = s
  END PROPERTY
END CLASS

SUB MAIN
  DIM RAW AS bcx_vector clsTest
  clsTest.Prop_X(3)
  clsTest.Prop_Y(4)
  Print  "The surface of clsTest: ", clsTest.Surface()
  Print  "Prop_X:",clsTest.Prop_X()
  Print  "Prop_Y:",clsTest.Prop_Y()
END SUB

''Test02:
Dim a$
a$="Some Value$"
Select Case a$
Case "a" ... "z"        ''Both "to" and "..." done well.
print "Complex Select,case is LCase alpha"
Case  "A" to "Z"        ''Both "to" and "..." done well.
print "Complex Select,case is UCase alpha"
Case Else
print "Complex Select,case is not alpha."
End Select

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/983027.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号