Startseite › Sprach-Frontends › BASIC Frontend › Übersicht Hilfe zum PBXB64-Compiler

PBXB64 - BASIC-Sprachreferenz

PBXB64 unterstützt einen wachsenden PowerBASIC-kompatiblen Dialekt. V12+ fügt Typsuffixe, Literalpräfixe, #DEFINE/#COMPILE, dynamische Arrays (DIM/REDIM/ERASE), OPTIONALE Parameter, SELECT CASE mit IS/TO, ON GOTO/GOSUB, DATA/READ/RESTORE, CODEPTR/FUNCPTR und über 60 integrierte Funktionen hinzu.

Kategorie: Übersicht

Beschreibung

PBXB64 unterstützt einen wachsenden PowerBASIC-kompatiblen Dialekt. V12+ fügt Typsuffixe, Literalpräfixe, #DEFINE/#COMPILE, dynamische Arrays (DIM/REDIM/ERASE), OPTIONALE Parameter, SELECT CASE mit IS/TO, ON GOTO/GOSUB, DATA/READ/RESTORE, CODEPTR/FUNCPTR und über 60 integrierte Funktionen hinzu.

Referenzseiten

Diese Seite ist die Uebersicht zum Frontend. Die verlinkten Einzelseiten enthalten Syntax, getestete Beispiele, Status und Grenzen fuer die jeweiligen Befehle oder Sprachkonstrukte.

Programm-Einstiegspunkt

FUNCTION PBMAIN() AS LONG ... END FUNCTION
FUNCTION PBMAIN() AS LONG
    FUNCTION = 0   ' Return code
END FUNCTION

Variablendeklarationen

LOCAL x AS LONG          ' Stack variable (explicit type)
LOCAL s AS STRING        ' Heap-managed string
LOCAL f AS SINGLE        ' 32-bit float
DIM arr(10) AS LONG      ' Static array (0-10)
GLOBAL g AS LONG         ' Module-level global

' Type suffixes (PBWin style)
LOCAL intvar%            ' INTEGER via % suffix
LOCAL longvar&           ' LONG via & suffix
LOCAL sngvar!            ' SINGLE via ! suffix
LOCAL dblvar#            ' DOUBLE via # suffix
LOCAL strvar$            ' STRING via $ suffix
LOCAL curvar##           ' CURRENCY via ## suffix
LOCAL cuxvar?#           ' CURRENCYX via ?# suffix
LOCAL extvar??           ' EXTENDED via ?? suffix

Literale Präfixe

x = &HFF                 ' Hex: 255
x = &O77                 ' Octal: 63
x = &B1010               ' Binary: 10

Entspricht

%WIN_WIDTH  = 800        ' Integer equate
%MAX_ITEMS  = 100
$APP_NAME   = "MyApp"    ' String equate

' Usage in expressions:
w = %WIN_WIDTH
n = %MAX_ITEMS

Zuweisung und Betreiber

x = 42
s = "Hello World"
x = x + 1
y = a * b - c / d
z = (x > 0) AND (y < 10)

PRINT-Anweisung

PRINT-Ausdruck [; Ausdruck] [, Ausdruck]
PRINT "Hello"
PRINT "A"; "B"       ' Semicolon: no separator
PRINT "A", "B"       ' Comma: tab stop (~8 chars)
PRINT TAB(4); "D"    ' TAB(n): pad with spaces

Kontrollfluss

' IF/THEN/ELSE
IF x > 0 THEN
    PRINT "positive"
ELSE
    PRINT "negative"
END IF

' FOR/NEXT
FOR i = 1 TO 10 STEP 2
    PRINT i
NEXT i

' WHILE/WEND
WHILE x < 100
    x = x * 2
WEND

WinAPI-Integration

#INCLUDE "windows_core.pbi"

FUNCTION PBMAIN() AS LONG
    CALL MessageBoxA(0, "Hello", "PBXB64", 0)
    CALL Sleep(1000)
    FUNCTION = 0
END FUNCTION

String-Operationen (V7/V8)

LOCAL s AS STRING, t AS STRING
s = "Hello"
t = s + " World"     ' Concatenation
s = ""               ' Reassignment frees old heap string automatically
s = LEFT$(t, 5)      ' Built-in string functions

Makros (V9+)

PBXB64 unterstützt mehrzeilige MACRO-Definitionen mit Parameterersetzung, lokalen Labels und MACROTEMP-Variablen.

Mehrzeiliges MAKRO

MACRO AddEm(a, b, result)
    result = a + b
END MACRO

' Usage:
AddEm x, y, z         ' Expands to: z = x + y

MACROTEMP (lokale Variablen)

MACROTEMP deklariert Variablen, die pro Erweiterung eindeutige Namen erhalten, wodurch Kollisionen verhindert werden.

MACRO DoSwap(p, q)
    MACROTEMP t
    LOCAL t AS LONG
    t = p : p = q : q = t
END MACRO

DoSwap x, y          ' t_1 = x; x = y; y = t_1
DoSwap a, b          ' t_2 = a; a = b; b = t_2

Lokale Etiketten

Beschriftungen in Makros werden automatisch entstellt, um Konflikte zwischen Erweiterungen zu vermeiden.

MACRO CheckVal(n)
    IF n > 0 THEN GOTO Done
    n = 0
    Done:
END MACRO

CheckVal 42           ' goto Done_1 ... Done_1:
CheckVal -1           ' goto Done_2 ... Done_2:

%PARAMCOUNT

Gibt die Anzahl der an das Makro übergebenen Argumente zurück.

MACRO LogArgs(a, b, c)
    x = %PARAMCOUNT     ' x = 3
END MACRO

Präprozessoranweisungen (V12+)

#COMPILE EXE              ' Output type (EXE/DLL/CONSOLE)
#DEFINE MAX_SIZE 100       ' Text replacement (resolved in expressions)
#UNDEF MAX_SIZE            ' Remove a #DEFINE
#INCLUDE ONCE "file.pbi"  ' Include with guard against re-inclusion

' Conditional compilation with comparison operators
%VERSION = 5
#IF %VERSION >= 3
    PRINT "Version 3+"
#ELSEIF %VERSION = 2
    PRINT "Version 2"
#ELSE
    PRINT "Version 1"
#ENDIF

Dynamische Arrays (V12+)

DIM arr(5) AS LONG         ' Allocate 5-element heap array
arr(2) = 100                ' Write to element
x = arr(2)                  ' Read from element
REDIM arr(10) AS LONG       ' Resize (discards old data)
REDIM PRESERVE arr(20)     ' Resize (preserves old data)
ERASE arr()                 ' Free heap buffer

' Bounds
n = LBOUND(arr())           ' Lower bound (usually 0)
n = UBOUND(arr())           ' Upper bound = element count - 1

OPTIONALE Parameter (V12+)

FUNCTION add(a AS LONG, OPTIONAL b AS LONG) AS LONG
    FUNCTION = a + b        ' b defaults to 0 if not passed
END FUNCTION

result = add(10)            ' b = 0
result = add(10, 20)        ' b = 20

ON GOTO / ON GOSUB (V12+)

ON choice GOTO lab1, lab2, lab3     ' Computed goto
ON choice GOSUB sub1, sub2, sub3    ' Computed gosub
DATA 1, 2, 3, 4, 5                   ' Data block
READ a, b, c                         ' Read from data
RESTORE                              ' Reset to start of data

Verschachtelung und Grenzen

Notiz:Einzeilige MACRO-SyntaxMACRO name(x) = expressiongibt ein C ab#defineund wird auch unterstützt.
String-Lifetime-Management:V7/V8 gibt automatisch Heap-gestützte STRING-Werte bei Neuzuweisung vor RETURN, EXIT FUNCTION und natürlichem Funktionsende frei. Kein manuelles STRFREE erforderlich.

Wide-Integer-Typen (V8+)

PBXB64 unterstützt native 128-Bit-, 256-Bit- und 512-Bit-Ganzzahlen mit und ohne Vorzeichen mit Inline-x64-Arithmetik – keine Laufzeitbibliotheksaufrufe.

LOCAL a AS INT128          ' 128-bit signed
LOCAL b AS I128            ' Alias for INT128
LOCAL c AS UINT128         ' 128-bit unsigned
LOCAL d AS U128            ' Alias for UINT128

LOCAL e AS INT256          ' 256-bit signed
LOCAL f AS I256            ' Alias for INT256
LOCAL g AS UINT256         ' 256-bit unsigned
LOCAL h AS U256            ' Alias for UINT256

LOCAL i AS INT512          ' 512-bit signed
LOCAL j AS I512            ' Alias for INT512
LOCAL k AS UINT512         ' 512-bit unsigned
LOCAL l AS U512            ' Alias for UINT512

' All standard arithmetic operators are supported:
a = 1000000000000000000000  ' 10^21
b = a + a                   ' 2*10^21
c = a * b                   ' 2*10^42 (fits in 128 bits)

MODUL-System (V8+)

Kapseln Sie Code mit Sichtbarkeitskontrolle in benannte Bereiche.

MODULE MyModule
  ' Private by default — only visible inside this module
  FUNCTION PrivateHelper() AS LONG
      FUNCTION = 42
  END FUNCTION

  ' Public — callable from outside via module prefix
  PUBLIC FUNCTION PublicFunc() AS LONG
      FUNCTION = PrivateHelper()
  END FUNCTION

  ' Module-scoped equates and globals
  %MY_CONST = 100
  GLOBAL gCounter AS LONG
END MODULE

' Call from another module or the main program:
FUNCTION PBMAIN() AS LONG
    result = MyModule.PublicFunc()   ' OK: PUBLIC
    ' result = MyModule.PrivateHelper()  ' ERROR: PRIVATE
    FUNCTION = result
END FUNCTION

Native H-Lib-Container (V8+)

23 Containerfamilien mit automatischer Initialisierung, Methodenverteilungssyntax und UDT-Nutzlastunterstützung.

LOCAL q AS LNQUE        ' FIFO queue of LONGs
q = q.New
q.Push 10
q.Push 20
PRINT q.Pop             ' 10
q.Final

LOCAL h AS LNHSH        ' Hash table (LONG key, LONG value)
h = h.New
h.Set(1, 100)
PRINT h.Get(1)          ' 100
h.Final

' Subscript access:
LOCAL a AS LNARR
a = a.New
a[0] = 42
PRINT a[0]              ' 42
a.Final

LIKE/ALIKE-Operator (V8+)

Mustervergleich mit Platzhaltern und Zeichenklassen.

IF "Hello" LIKE "H*" THEN          ' true: * matches any sequence
IF "abc" LIKE "a[bc]c" THEN       ' true: bracket list
IF "abc" LIKE "a[!b]c" THEN       ' false: complemented class
IF "abc" LIKE "a[a-z]c" THEN       ' true: character range
IF "test.txt" LIKE "*.txt" THEN    ' true: wildcard extension

' ALIKE is always case-insensitive:
IF "Hello" ALIKE "h*" THEN         ' true

Qualifizierte V15-Erweiterungen

Bekannte Einschränkungen (V15)

PBXB64-Prüfung

Diese Referenzseite soll durch ein fokussiertes Compile- oder Laufzeitbeispiel belegt sein. Das Beispiel soll Eingaben, erwartete Ausgabe oder Exit-Code und erforderliche Windows-Ressourcen oder Include-Dateien nennen.

Übersichtshinweise

Allgemeine Übersichtsseiten sollten trotzdem sagen, welche Familie gemeint ist, welche konkreten Befehlsseiten die Implementierung tragen und welche Formen nur der Navigation dienen. So bleibt die Seite detailliert genug, ohne so zu tun, als wäre sie eine vollständige Befehlsreferenz.

Zurück zum Befehlsindex

Überblick vom Quelltext bis zur ausführbaren Datei über die PBXB64-Frontends.

Überblick vom Quelltext bis zur ausführbaren Datei über die PBXB64-Frontends.