
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.
SPR unterstützte Befehlswurzeln und Umfang
Die sprachspezifische Referenz der unterstützten Befehle und des Umfangs mit durchsuchbaren Kategorien und klaren Grenzen öffnen.
Umfangsreferenz öffnenSPR 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
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
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
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
- VAR. legt SUM an; FOR. und NEX. bilden die Zählschleife über 1 bis 5.
- Im Schleifenrumpf wird SUM über den vorhandenen VAR.-Befehlsvertrag aktualisiert.
- 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
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
- GSB. mit dem Ziel :add5 und dem Argument 10 übergibt einen Wert an die Unterroutine.
- Der Rumpf verwendet den Legacy-Parameteralias $$000 in seiner Zuweisung und kehrt mit RET. zurück.
- 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
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
- GSB. übergibt die beiden Werte 42 und hello.
- $$_00 bezeichnet in diesem dokumentierten Vertrag die Argumentanzahl 2.
- $$_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
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
- ATC. legt alpha in Collection 7 ab.
- JNU. verzweigt beim vorhandenen Eintrag alpha zur Marke seen.
- 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
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
- CLC. leert Collection 9, ATA. fügt alpha und beta hinzu.
- FEC. und FEN. umschließen den Durchlauf; $$ITM erhält jeweils das aktuelle Element.
- 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
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
- PUS. legt einen Literaltext ab; PUV., PVS., PSS. und PNS. zeigen die variablenbezogenen Varianten.
- POV. entnimmt die fünf Werte in umgekehrter Ablagereihenfolge: 42, alpha, alpha, alpha, lit.
- 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
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
- CiSingleReplace ersetzt nur den ersten Treffer unabhängig von der Großschreibung: Cat wird dog.
- FindAny findet d an Position 4; LTrim, RTrim und RetainAny liefern left, right und 123.
- XML.unclean wandelt a&<b> 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&<b>|$$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
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
- Die erste Schleife beginnt bei 0.5, schließt 2.5 ein und verwendet Schrittweite 0.5.
- Nach NEX. enthält ihr Zähler 3; diese zusätzliche Ausgabe zeigt den Zustand nach der Schleife.
- 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
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
- JIU. und JNU. prüfen hier fehlende beziehungsweise vorhandene Collection-Einträge.
- Der absichtlich unvollständige CAX.-Ausdruck setzt einen weichen Fehlerstatus, den JIT. oder JNT. abfragt.
- 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
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
- SCN. wählt numerische, SCS. textuelle Fälle. Der erste Zahlenblock trifft CAN.14; der String gamma fällt in den Standardzweig.
- Zwei gleiche CAN.1-Fälle zeigen, dass nur der erste Treffer ausgeführt wird. Innerhalb der Zählschleife entstehen zero, one und many.
- 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
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 ZIPBridging
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