SPR verwendet kurze Befehlspräfixe und Variablen wie $$SUM. Die gezeigten nativen Beispiele verbinden explizite Werte, Berechnungen und Ausgabe.
SPR verwendet kurze Befehlspräfixe und Variablen wie $$SUM. Die gezeigten nativen Beispiele verbinden explizite Werte, Berechnungen und Ausgabe. Grafik in voller Größe öffnen

SPR: Beispiele und Erklärung

Reifegrad und Grenzen: experimentell

Umgesetzter Umfang: Der vorhandene Befehlsbestand sowie 73 ausgewählte neue Befehlswurzeln und ausgewählte Bitmap-, Queue-, Prozess-, Registry- und Windows-Helfer sind dokumentiert.

Grenzen: 60 Wurzeln bleiben unfertig; es gibt keinen MiniRobot-Vergleichsnachweis, SAP und SPR Browser sind verschoben und viele Selektoren/Provider offen.

Zur PBXB64-V9-Übersicht English

SPR unterstützte Befehlswurzeln und Umfang

Die sprachspezifische Referenz der unterstützten Befehle und des Umfangs mit durchsuchbaren Kategorien und klaren Grenzen öffnen.

Umfangsreferenz öffnen

SPR verwendet kurze Befehlspräfixe und Variablen wie $$SUM. Die gezeigten nativen Beispiele verbinden explizite Werte, Berechnungen und Ausgabe.

Zwölf Kurzbeispiele und ein größeres Programm. Wählen Sie ein Thema oder arbeiten Sie die Beispiele der Reihe nach durch.

1. 1 + 2 + 3 + 4 + 5 = 15

Die Zahlen 1 bis 5 werden zu 15 addiert. Das Programm gibt 15 aus und endet mit Exitcode 0.

VAR.$$SUM=0
FOR.$$III|1|5|1
    VIC.$$SUM|$$III
NEX.
OUT.$$SUM
ENR.

Erwarteter Exitcode: 0; Ausgabe-Prüfmuster (Regex): '15'

PBXB64.exe sum15-spr.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Nativ geprüft mit dem V22-Kandidaten vom 30.09.2026; Prüfung mit dem finalen Compiler noch ausstehend.

2. Arithmetik mit CAL. und CAX.

VAR. legt 1 und 2 an. CAL. berechnet 1 + 2 * 3 zu 7; CAX. verwendet sqrt(16). Der Fall erzeugt keine eigene Ausgabe und prüft den erfolgreichen Programmabschluss.

' Minimal SPR math-coverage fixture.
VAR.$$AAA=1
VAR.$$BBB=2
CAL.$$CCC=$$AAA+$$BBB*3
CAX.$$DDD=sqrt(16)
END.

Erwarteter Exitcode: 0

PBXB64.exe math.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Kanonischer Testfall mit erwartetem Ergebnis; hier keine neue native V22-Prüfung. Finale Ausführung noch ausstehend.

3. String-Wert ergänzen und ausgeben

VAR. legt den Text an, VAS. ergänzt ihn und OUT. gibt die Variable aus. Die exakte Zusammensetzung richtet sich nach dem SPR-Befehlsvertrag; der kanonische Ausgabetest erwartet helloworld.

' SPR string-coverage fixture.
VAR.$$MSG=hello
VAS.$$MSG+ world
VAU.$$INP=test
OUT.$$MSG
END.

Erwarteter Exitcode: 0; Ausgabe-Prüfmuster (Regex): 'helloworld'

PBXB64.exe strings.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Kanonischer Testfall mit erwartetem Ergebnis; hier keine neue native V22-Prüfung. Finale Ausführung noch ausstehend.

4. FOR und eine nachgeprüfte Schleife

Ablauf Schritt für Schritt

  1. VAR. legt SUM an; FOR. und NEX. bilden die Zählschleife über 1 bis 5.
  2. Im Schleifenrumpf wird SUM über den vorhandenen VAR.-Befehlsvertrag aktualisiert.
  3. DOL./OOP. zeigt anschließend eine Nachprüfung. Der kanonische Fall erwartet einen Abschluss ohne eigene Konsolenausgabe.
' SPR loop fixture
VAR.$$SUM=0
FOR.$$CTR|1|5
VAR.$$SUM=$$SUM+$$CTR
NEX.
DOL.
OOP.$$SUM>10
END.

Erwarteter Exitcode: 0

PBXB64.exe spr-loop.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

5. Eine Unterroutine mit einem Parameter

Ablauf Schritt für Schritt

  1. GSB. mit dem Ziel :add5 und dem Argument 10 übergibt einen Wert an die Unterroutine.
  2. Der Rumpf verwendet den Legacy-Parameteralias $$000 in seiner Zuweisung und kehrt mit RET. zurück.
  3. JMP.:done verhindert, dass der Rumpf anschließend im normalen Ablauf erneut betreten wird. Der Fall prüft den Abschluss, nicht einen ausgegebenen Zahlenwert.
' SPR subroutine fixture
VAR.$$AAA=0
GSB.:add5|10
JMP.:done
:add5
VAR.$$AAA=$$000+5
RET.
:done
END.

Erwarteter Exitcode: 0

PBXB64.exe spr-subroutine.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

6. Anzahl und Werte der Unterroutinenparameter

Ablauf Schritt für Schritt

  1. GSB. übergibt die beiden Werte 42 und hello.
  2. $$_00 bezeichnet in diesem dokumentierten Vertrag die Argumentanzahl 2.
  3. $$_01 und $$_02 enthalten die ersten beiden Argumente. PRT. gibt daher 2, 42 und hello aus.
' SPR reference contract: documented subroutine parameter aliases.
GSB.:SHOW|42|hello
END.

:SHOW
PRT.$$_00
PRT.$$_01
PRT.$$_02
RET.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
2
42
hello
PBXB64.exe spr-spr_subroutine_documented_params.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

7. Nach einem Collection-Eintrag verzweigen

Ablauf Schritt für Schritt

  1. ATC. legt alpha in Collection 7 ab.
  2. JNU. verzweigt beim vorhandenen Eintrag alpha zur Marke seen.
  3. OUT.bad wird übersprungen; der erreichte Ausgabebefehl schreibt seen.
ATC.7|alpha
JNU.7|alpha|seen
OUT.bad
END.
:seen
OUT.seen
END.
END.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
^seen\n$
PBXB64.exe spr-spr_reference_collection.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

8. Collection-Elemente mit FEC. durchlaufen

Ablauf Schritt für Schritt

  1. CLC. leert Collection 9, ATA. fügt alpha und beta hinzu.
  2. FEC. und FEN. umschließen den Durchlauf; $$ITM erhält jeweils das aktuelle Element.
  3. OUT. zeigt beide Texte in der Reihenfolge des konkreten Testvertrags, durch Leerraum getrennt.
' Source-backed FEC collection enumerator contract.
VAR.$$OUT=
CLC.9
ATA.9|alpha
ATA.9|beta
FEC.LAB|$$ITM|9
OUT.$$ITM
OUT.$sp$
FEN.
END.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
alpha\s+beta
PBXB64.exe spr-spr_fec_collection_contract.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

9. Mehrere Stack-Push-Varianten

Ablauf Schritt für Schritt

  1. PUS. legt einen Literaltext ab; PUV., PVS., PSS. und PNS. zeigen die variablenbezogenen Varianten.
  2. POV. entnimmt die fünf Werte in umgekehrter Ablagereihenfolge: 42, alpha, alpha, alpha, lit.
  3. STV.DUPL wird anschließend über zwei Pop-Ergebnisse geprüft. Für diesen konkreten Vertrag folgen 1 und zzz; der Test behauptet keine allgemeine Forth-Stack-Semantik.
' Source-backed stack push variants and POV compatibility pop.
VAR.$$S00=alpha
VAN.$$N00=42
PUS.lit
PUV.$$S00
PVS.$$S00
PSS.$$S00
PNS.$$N00
POV.$$A00|$$A01|$$A02|$$A03|$$A04
OUT.$$A00
OUT.$sp$
OUT.$$A01
OUT.$sp$
OUT.$$A02
OUT.$sp$
OUT.$$A03
OUT.$sp$
OUT.$$A04
PUS.zzz
STV.DUPL
POV.$$B00|$$B01
OUT.$sp$
OUT.$$B00
OUT.$sp$
OUT.$$B01
END.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
42\s+alpha\s+alpha\s+alpha\s+lit\s+1\s+zzz
PBXB64.exe spr-spr_stack_push_variants.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

10. Textbearbeitung und XML-Dekodierung

Ablauf Schritt für Schritt

  1. CiSingleReplace ersetzt nur den ersten Treffer unabhängig von der Großschreibung: Cat wird dog.
  2. FindAny findet d an Position 4; LTrim, RTrim und RetainAny liefern left, right und 123.
  3. XML.unclean wandelt a&amp;&lt;b&gt; in a&<b> um. Die HTML-Seite zeigt beide Schreibweisen als Quelltext, nicht als ausführbares Markup.
' Source-backed STR/XML selectors not covered by the earlier text wave.
VAR.$$SRC=Cat cat CAt
VAR.$$CSR=
STR.CiSingleReplace|$$SRC|cat|dog|$$CSR
VAN.$$FAY=0
STR.FindAny|abcdef|xzdy|$$FAY
VAR.$$LTR=$sp$$sp$left
VAR.$$LTO=
STR.LTrim|$$LTR|$sp$|$$LTO
VAR.$$RTR=right$sp$$sp$
VAR.$$RTO=
STR.RTrim|$$RTR|$sp$|$$RTO
VAR.$$RTN=
STR.RetainAny|abc123xyz|123|$$RTN
VAR.$$XML=
XML.unclean|a&amp;&lt;b&gt;|$$XML
OUT.$$CSR
OUT.$sp$
OUT.$$FAY
OUT.$sp$
OUT.$$LTO
OUT.$sp$
OUT.$$RTO
OUT.$sp$
OUT.$$RTN
OUT.$sp$
OUT.$$XML
END.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
dog\s+cat\s+CAt\s+4\s+left\s+right\s+123\s+a&<b>
PBXB64.exe spr-spr_string_xml_gap_subcommands.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

11. FOR. mit gebrochenen Schrittweiten

Ablauf Schritt für Schritt

  1. Die erste Schleife beginnt bei 0.5, schließt 2.5 ein und verwendet Schrittweite 0.5.
  2. Nach NEX. enthält ihr Zähler 3; diese zusätzliche Ausgabe zeigt den Zustand nach der Schleife.
  3. Weitere Schleifen verwenden eine Variable als Grenze und $$NNN+0.5 als Schrittformel. Der Ausgabevertrag hält auch die Schreibweise .5 ohne führende Null fest.
' SPR FOR EXTENDED variant (A1.1): float literals, FLOAT var bounds, formula step.
CAL.$$FLT=0.25
VAR.$$NNN=1
FOR.$$AAA|0.5|2.5|0.5
OUT.$$AAA
NEX.
OUT.$$AAA
FOR.$$BBB|$$FLT|1.75|0.25
OUT.$$BBB
NEX.
FOR.$$CCC|$$NNN|3|$$NNN+0.5
OUT.$$CCC
NEX.
END.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
^\.5
1
1\.5
2
2\.5
3
\.25
\.5
\.75
1
1\.25
1\.5
1\.75
1
2\.5$
PBXB64.exe spr-spr_for_float.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

12. Bedingte Sprünge und Fehlerstatus lesen

Ablauf Schritt für Schritt

  1. JIU. und JNU. prüfen hier fehlende beziehungsweise vorhandene Collection-Einträge.
  2. Der absichtlich unvollständige CAX.-Ausdruck setzt einen weichen Fehlerstatus, den JIT. oder JNT. abfragt.
  3. Die Abfrage liest und löscht diesen Status. Deshalb nehmen zwei aufeinanderfolgende Prüfungen unterschiedliche Pfade.
' Wave 5 jump-if family: JIU./JNU. collection-membership jumps and
' JIT./JNT. branching on the CAX soft-error flag (read+clear semantics).
ATC.1|alpha
JIU.1|beta|jiu_hit
OUT.jiu_miss_beta
END.
:jiu_hit
OUT.jiu_hit
JIU.1|alpha|done
OUT.after_jiu_alpha
JNU.1|alpha|jnu_hit
OUT.jnu_miss_alpha
END.
:jnu_hit
OUT.jnu_hit
JNU.1|beta|done
OUT.after_jnu_beta
CAX.$$A01=(1+2
JIT.jit_hit
OUT.jit_miss
END.
:jit_hit
OUT.jit_hit
JIT.done
OUT.after_jit
CAX.$$B02=(1+2
JNT.done
OUT.after_jnt_set
JNT.jnt_hit
OUT.jnt_miss
END.
:jnt_hit
OUT.jnt_hit
:done
OUT.done
END.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
^jiu_hit
after_jiu_alpha
jnu_hit
after_jnu_beta
jit_hit
after_jit
after_jnt_set
jnt_hit
done$
PBXB64.exe spr-spr_jump_if_wave5.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

Großes Beispiel: Numerische und textuelle Fallauswahl kombinieren

Ablauf Schritt für Schritt

  1. SCN. wählt numerische, SCS. textuelle Fälle. Der erste Zahlenblock trifft CAN.14; der String gamma fällt in den Standardzweig.
  2. Zwei gleiche CAN.1-Fälle zeigen, dass nur der erste Treffer ausgeführt wird. Innerhalb der Zählschleife entstehen zero, one und many.
  3. ESC. beendet jeden Auswahlblock. Ein Block ohne Treffer und ohne Standardfall setzt danach bei after-select fort.
' SELECT-CASE (SCS./SCN. with CAS./CAN./CAE./ESC.) has no other coverage in
' this tree, and every select used to fault the compiler: an open frame left at
' end of input was closed by the IF auto-close path, which branched from the
' frame's null else block.  These cases pin the working behaviour.
' SCN. numeric select, multiple values and a formula in the case list.
VAR.$$NUM=14
SCN.$$NUM
CAN.12,45,(4*$$NUM)
PRT.wrong-case
CAN.14
PRT.formula-match
CAE.
PRT.numeric-default
ESC.
' SCS. string select falling through to the default.
VAR.$$TXT=gamma
SCS.$$TXT
CAS.alpha
PRT.alpha
CAS.beta
PRT.beta
CAE.
PRT.string-default
ESC.
' First matching case wins; the second case with the same value is skipped.
VAR.$$ONE=1
SCN.$$ONE
CAN.1
PRT.first-wins
CAN.1
PRT.second-case
ESC.
' Select inside a loop, so the merge block is revisited across iterations.
VAR.$$CNT=0
:LOOP
SCN.$$CNT
CAN.0
PRT.zero
CAN.1
PRT.one
CAE.
PRT.many
ESC.
CAL.$$CNT=$$CNT+1
IVV.$$CNT<3
GTO.LOOP
EIF.
' Select with no default and no match runs the code after ESC.
VAR.$$MIS=99
SCN.$$MIS
CAN.1,2,3
PRT.unreachable
ESC.
PRT.after-select
END.

Erwarteter Exitcode: 0

Kanonisches Ausgabe-Prüfmuster (Regex)
formula-match
string-default
first-wins
zero
one
many
after-select
PBXB64.exe spr-test_spr_select_case.spr -O2 -o example.exe
.\example.exe
$LASTEXITCODE

Quelltext herunterladen

Ergebnisvertrag aus tests/validate.toml. Keine neue native Compilerprüfung in dieser Website-Erweiterung. Finale Ausführung mit dem freigegebenen Compiler steht aus.

Alle Quellen dieser Lernseite

Jedes Beispiel hat einen eigenen Ordner; die README nennt die jeweiligen Compileraufrufe. Enthaltene Includes behalten ihre passenden Pfade.

Alle 13 Beispiele als ZIP

Bridging

VIP. bindet im konkreten Brückenvertrag eine SPR-Variable an eine BASIC-GLOBAL-Variable. Numerische Werte und Strings haben unterschiedliche Typverträge; das vollständige Quellenpaar steht auf der Bridging-Seite.

Vollständige Quellenpaare ansehen