1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
|
#page nr ("%",97)#
#head#
EUMEL-BASIC-Compiler 9. Anpassung von Programmen an den EUMEL-BASIC-Compiler %
#end#
9. Anpassung von Programmen an den EUMEL-BASIC-Compiler
9.1. Unterschiede zwischen BASIC-Inter
pretern und dem EUMEL-BASIC-
Compiler
Bei der Anpassung von Programmen für BASIC-Interpreter an den EUMEL-
BASIC-Compiler gibt es einige Besonderheiten zu beachten, die auf den unterschied
lichen Arbeitsweisen von Compilern gegenüber Interpretern beruhen.
Bei Interpretern fällt die Übersetzung und Ausführung des Quellprogramms zeitlich
zusammen (genau genommen gibt es ja gar keine Übersetzung, sondern das Quell
programm wird #on("i")#interpretiert#off("i")#). Dies hat zur Folge, daß auch nicht zur Ausführung
bestimmte Anweisungen (z.B. Dimensionierungen, Typfestlegungen etc.) erst während
der Ausführung des Programms erkannt und ausgewertet werden.
Bei Compilern hingegen muß deutlich zwischen der Übersetzungszeit (Compiletime)
und der Laufzeit (Runtime) eines Programms unterschieden werden.
Der wesentliche Unterschied zwischen Compilern und Interpretern liegt nun in der
Reihenfolge der Kenntnisnahme von den Anweisungen. Während der Interpreter von
den Anweisungen in der Reihenfolge ihres Auftretens entlang des Programmablaufs
Kenntnis nimmt, werden die Anweisungen vom Compiler in der Reihenfolge ihres
textuellen Auftretens zur Kenntnis genommen.
Da es sich bei dem EUMEL-BASIC-Compiler um einen One-Pass-Compiler
handelt, ist es zwingend notwendig, daß
- DIM-Anweisungen vor dem ersten Zugriff auf das zu dimensionierende Feld
stehen.
- OPTION BASE-Anweisungen vor den betreffenden Dimensionierungen stehen.
- DEF FN-Anweisungen vor dem ersten Aufruf der zu definierenden Funktion ste
hen.
- DEFINT- beziehungsweise DEFSTR-Anweisungen vor der ersten Verwendung der
betreffenden Variablen erscheinen.
Einige Interpreter lassen sogar den Abschluß von FOR-NEXT- und WHILE-
WEND-Schleifen an mehreren Stellen im Programm zu (z.B. mehrere NEXT-
Anweisungen zu einer FOR-Anweisung). Auch solche "Kunstgriffe" gestattet der
EUMEL-BASIC-Compiler (aus den oben geschilderten Gründen) nicht.
9.2. Abweichungen von ISO 6373-1984
(Minimal-BASIC)
Der EUMEL-BASIC-Compiler weicht in folgenden Punkten von der ISO-Norm
6373-1984 für Minimal-BASIC ab:
- Treten bei der Auswertung von numerischen Ausdrücken Überläufe auf, so wird
nicht, wie im Standard vorgesehen, eine Warnung ausgegeben und mit bestimmten
Höchstwerten weitergerechnet, sondern die Ausführung des BASIC-Programms
wird mit einer entsprechenden Fehlermeldung abgebrochen.
- Nimmt die Sprungziel-Nummer bei der ON-Anweisung einen fehlerhaften Wert an
(Nummer < 1 oder Nummer > Anzahl Sprungziele), dann wird nicht, wie im
Standard empfohlen, mit einer Fehlermeldung abgebrochen, sondern es wird (wie
auch in Microsoft-BASIC üblich) das Programm mit der der ON-Anweisung fol
genden Anweisung fortgesetzt.
- Bei der DATA-Anweisung müssen nicht unbedingt Zeichenfolgen angegeben
werden. Werden sie weggelassen, dann wird bei Ausführung der READ-
Anweisung null beziehungsweise Leertext geliefert (vergleiche Kapitel 8, DATA-
Anweisung).
- Bei den Eingaben für eine INPUT-Anweisung können ebenfalls die Daten wegge
lassen werden. Auch hier wird null beziehungsweise Leertext geliefert (vergleiche
Kapitel 8, INPUT-Anweisung)
Die Erweiterungen gegenüber ISO 6373 sollen hier nicht im einzelnen aufgeführt
werden. Bitte vergleichen Sie in Zweifelsfällen die Normungsschrift mit dieser Doku
mentation!
9.3. Anpassung von Microsoft-BASIC Pro
grammen an den EUMEL-BASIC-
Compiler
Bei der Entwicklung des EUMEL-BASIC-Compilers wurde zwar auf Übereinstim
mung mit Microsoft-BASIC Wert gelegt, von einer echten Kompatibilität kann aber
aufgrund einer ganzen Reihe fehlender Anweisungen und Funktionen nicht gespro
chen werden.
Gegenüber Microsoft-BASIC fehlen vor allem:
- alle "Direkt-Kommandos" (RUN, LIST, LOAD, SAVE, MERGE usw.). Die Aufgaben
dieser Anweisungen werden von den Prozeduren des EUMEL-Systems über
nommen.
- im weiteren Sinne "hardware-nahe" oder an Maschinensprache orientierte Anwei
sungen und Funktionen (CALL, PEEK, POKE, USR, WAIT usw.)
- die ERROR-Handling Anweisungen (ON ERROR, RESUME)
- die Dateiverarbeitungs-Anweisungen und -Funktion (INPUT\#, PRINT\# u.a.; die
INPUT- und PRINT-Anweisungen wurden aber auf Zusammenarbeit mit 'sysin'
und 'sysout' abgestimmt.)
- die Single-Precision-Variablen (Single- und Double-Precision-Variablen wer
den beide auf den Datentyp REAL abgebildet.)
- die hexadezimalen und oktalen Konstanten
Anweisungen und Funktionen, die sich abweichend vom Microsoft-Standard verhal
ten, sind vor allem:
- CALL, CHAIN, USR
- ERROR, ERR, ERL
- LSET, RSET
Wichtige Erweiterungen gegenüber Microsoft-BASIC sind:
- Möglichkeit des Aufrufs von ELAN-Prozeduren
- Maximale Anzahl von Zeichen pro Zeile: 32000
- Maximale Anzahl von Zeichen pro TEXT-Objekt: 32000
- OPTION BASE wirkt auf einzelne Felder (und nicht unbedingt auf ein ganzes
Programm)
#on ("b")#
Hinweis zur Verwendung von MS-BASIC-Programmen im EUMEL-System#off ("b")#
Sollen Microsoft-BASIC-Programme in das EUMEL-Systemm übernommen wer
den, so ist dabei so vorzugehen:
1. Speichern Sie das Programm von MS-BASIC aus mit der ASCII-SAVE-Option
ab.
Beispiel: SAVE "PROGRAMM.BAS",A
2. Lesen Sie das Programm mittels "DOSDAT" (Programm zum Lesen von MS-
DOS-Dateien) im "file ascii"-Modus ein:
reserve ("file ascii", /"DOS"); fetch ("PROGRAMM.BAS", /"DOS")
Danach steht ihnen das BASIC-Program in der EUMEL-Textdatei
"PROGRAMM.BAS" zur Verfügung.
#page#
#head#
EUMEL-BASIC-Compiler Anhang A: Reservierte Wörter %
#end#
Anhang A: #ib(4)#Reservierte Wörter#ie(4)#
Dieser Anhang enthält eine Übersicht über alle vom EUMEL-BASIC-Compiler
erkannten reservierten Wörter.
ABS Funktion
AND Operator
AS Anweisungsbestandteil
ASC Funktion
ATN Funktion
BASE Anweisungsbestandteil
CALL Anweisung
CDBL Funktion
CHAIN Anweisung
CHR$ Funktion
CINT Funktion
CLEAR nicht implementiert
CLOSE nicht implementiert
CLS Anweisung
COMMON nicht implementiert
FIELD nicht implementiert
COS Funktion
CSRLIN Funktion
CVD Funktion
CVI Funktion
DATA Anweisung
DATE$ Funktion
DEF Anweisung
DEFDBL Anweisung
DEFINT Anweisung
DEFSNG Anweisung
DEFSTR Anweisung
DIM Anweisung
ELSE Anweisungsbestandteil
END Anweisung
EOF Anweisungsbestandteil
EQV Operator
ERL Funktion
ERM$ Funktion
ERR Funktion
ERROR Anweisung
EXP Funktion
FIX Funktion
FOR Anweisung
FRE Funktion
GET nicht implementiert
GO Anweisungsbestandteil
GOSUB Anweisung
GOTO Anweisung
HEX$ Funktion
IF Anweisung
IMP Operator
INKEY$ Funktion
INPUT Anweisung
INPUT$ Funktion
INSTR Funktion
INT Funktion
KILL Anweisung
LEFT$ Funktion
LEN Funktion
LET Anweisung
LINE Anweisungsbestandteil
LOC nicht implementiert
LOG Funktion
LPOS Funktion
LPRINT Anweisung
LSET Anweisung
MID$ Anweisung/Funktion
MKD$ Funktion
MKI$ Funktion
MOD Operator
NAME Anweisung
NEXT Anweisung
NOT Operator
OCT$ Funktion
ON Anweisung
OPEN nicht implementiert
OPTION Anweisung
OR Operator
OUT nicht implementiert
POS Funktion
PRINT Anweisung
PUT nicht implementiert
RANDOMIZE Anweisung
READ Anweisung
REM Anweisung
RESTORE Anweisung
RESUME nicht implementiert
RETURN Anweisung
RIGHT$ Funktion
RND Funktion
RSET Anweisung
SGN Funktion
SIN Funktion
SPACE$ Funktion
SPC Funktion
SQR Funktion
STEP Anweisungsbestandteil
STOP Anweisung
STR$ Funktion
STRING$ Funktion
SUB Anweisungsbestandteil
SWAP Anweisung
TAB Anweisungsbestandteil
TAN Funktion
THEN Anweisungsbestandteil
TIME$ Funktion
TIMER Funktion
TO Anweisungsbestandteil
TROFF Anweisung
TRON Anweisung
USING Anweisungsbestandteil
USR Funktion
VAL Funktion
WAIT nicht implementiert
WEND Anweisung
WHILE Anweisung
WIDTH Anweisung
WRITE Anweisung
XOR Operator
#page#
#head#
EUMEL-BASIC-Compiler Anhang B: Vom Scanner erkannte Symboltypen %
#end#
Anhang B: Vom #ib(3)#Scanner#ie(3)# erkannte #ib(3)#Symbol
typen#ie(3)#
Der Scanner (ein Paket des EUMEL-BASIC-Systems) hat die Aufgabe, den Pro
grammtext Zeichen für Zeichen durchzugehen und auszulesen ('scannen'). Dabei
werden die Zeichen immer zu logischen Gruppen, sogenannten #on("i")#Symbolen#off("i")# zusammen
gefaßt. Diese Symbole werden dann dem eigentlichen Compilerprogramm geliefert.
Der Scanner entscheidet nach recht komplizierten Regeln, welche Zeichen aus der
Quelldatei zu einem Symbol zusammengefaßt werden. Dennoch soll in diesem An
hang der Begriff des Symbols etwas näher erklärt werden, da der Anwender (vor allem
bei den Fehlermeldungen) mit Symboltypen konfrontiert wird.
Reservierte Wörter
#on ("b")#
Anfangszeichen:#off ("b")# Buchstaben
#on ("b")#
Folgezeichen:#off ("b")# Buchstaben
#on ("b")#
Beispiele:#off ("b")# PRINT, VAL, TAB, SUB, TO
#on ("b")#
Vergleiche:#off ("b")# Anhang A
Operatoren
+ - * / \ ^ MOD
NOT AND OR XOR EQV IMP
< > = <= >= <>
#on ("b")#
Vergleiche:#off ("b")# Kapitel 4.4.
numerische Konstanten
#on ("b")#
Anfangszeichen:#off ("b")# Ziffern 0 bis 9, Dezimalpunkt '.'
#on ("b")#
Folgezeichen:#off ("b")# zusätzlich: 'd', 'D', 'e' oder 'E', am Schluß auch '%', '!' oder '\#'
#on ("b")#
Beispiele:#off ("b")# 1.0, 1.256d123, 12!
#on ("b")#
Vergleiche:#off ("b")# Kapitel 4.2.
TEXT-Konstanten
#on ("b")#
Anfangszeichen:#off ("b")# Anführungszeichen
#on ("b")#
Folgezeichen:#off ("b")# Alle Zeichen, sogar Doppelpunkte, Apostrophe und Steuerzei
chen. Anführungszeichen dürfen #on("i")#innerhalb#off("i")# von
TEXT-Konstanten nicht vorkommen. Eine
TEXT-Konstante #on("i")#muß#off("i")# aber mit einem Anfüh
rungszeichen enden.
#on ("b")#
Beispiele:#off ("b")# "tadellos", "!?': alles mögliche"
#on ("b")#
Vergleiche:#off ("b")# Kapitel 4.2.
Variablen
#on ("b")#
Anfangszeichen:#off ("b")# Buchstaben
#on ("b")#
Folgezeichen:#off ("b")# zusätzlich: Punkt '.', Ziffern 0 bis 9, Zeichen '$', '%', '!' und '\#'
#on ("b")#
Beispiele:#off ("b")# zeiger, A$, Zahl!, n%, var\#4.3%
#on ("b")#
Vergleiche:#off ("b")# Kapitel 4.3.
Felder/Feldelemente
wie Variablen, jedoch gefolgt von '(', den Indexangaben und ')'
#on ("b")#
Beispiele:#off ("b")# zeiger (3), A$ (pointer), Zahl! (7), n% (a, b, c + d)
#on ("b")#
Vergleiche:#off ("b")# Kapitel 4.3.
Benutzer-definierte Funktionen
#on ("b")#
Anfangszeichen:#off ("b")# FN
#on ("b")#
Folgezeichen:#off ("b")# Buchstaben, Punkt '.', Ziffern 0 bis 9,
Zeichen '$', '%', '!' und '\#'
#on ("b")#
Beispiele:#off ("b")# FNfunct, FNgauss%, FNf!4.5.6d\#
#on ("b")#
Vergleiche:#off ("b")# Kapitel 4.5.
EOS (End of Statement, Anweisungsende)
Doppelpunkt ':'
#on ("b")#
Vergleiche:#off ("b")# Kapitel 4.1.
EOL (End of Line, Zeilenende)
Apostrophzeichen ' oder Ende der Dateizeile
EOL bedeutet gleichzeitig auch EOS
#on ("b")#
Vergleiche:#off ("b")# Kapitel 4.1.
EOF (End of File, Dateiende)
Ende der Quelldatei
EOF bedeutet gleichzeitig auch EOL (und somit auch EOS)
#on ("b")#
Vergleiche:#off ("b")# Kapitel 4.1.
Trennzeichen
Alle bisher nicht genannten Zeichen werden vom Scanner als Trennzeichen behan
delt. In BASIC benötigte Trennzeichen sind das Komma (','), das Semikolon (';') sowie
die beiden runden Klammern '(' und ')'.
Zeichen mit Codes kleiner als 32 (Steuerzeichen) werden vom Scanner überlesen.
#page#
#head#
EUMEL-BASIC-Compiler Anhang C: Übersicht über die Fehlermeldungen %
#end#
Anhang C: Übersicht über die Fehlermeldungen
Übersicht über die verwendeten Fehlermeldungen zur
Übersetzungszeit
Diese Übersicht enthält alle zur Übersetzungszeit möglichen Fehler, mit Ausnahme
der internen Fehler.
Die Erläuterungen geben die üblichen Ursachen für die Fehlermeldung an. Es wird
empfohlen, sich im Falle eines Fehlers außerdem in Kapitel 8 über die genaue Syntax
der betreffenden Anweisung beziehungsweise Funktion zu informieren.
#on ("b")#AS ohne NAME#off ("b")#
AS darf nur in NAME-Anweisungen vorkommen.
#on ("b")#Accessrecht VAR erwartet, CONST gefunden#off ("b")#
Beim Aufruf einer ELAN-Prozedur (CALL, CHAIN oder USR) wurde ein VAR-Para
meter verlangt. Angegeben wurde aber ein CONST-Parameter (zum Beispiel ein
Ausdruck).
#on ("b")#Ausdruck erwartet#off ("b")#
Es wurde ein numerischer oder TEXT-Ausdruck erwartet. Diese Fehlermeldung
erscheint zum Beispiel, wenn nach einem Operator kein Ausdruck mehr gefunden
wird.
#on ("b")#BASE ohne OPTION#off ("b")#
BASE darf nur in OPTION BASE-Anweisungen vorkommen.
#on ("b")#Bei SWAP nur gleiche Variablentypen erlaubt#off ("b")#
Mit SWAP können nur Variablen von genau dem gleichen Typ bearbeitet werden.
#on ("b")#Das Feld ist bereits dimensioniert#off ("b")#
Diese Fehlermeldung erscheint bei DIM-Anweisungen, wenn das Feld vorher schon
explizit oder automatisch dimensioniert wurde.
#on ("b")#ELSE ohne IF#off ("b")#
ELSE darf nur in IF-Anweisungen vorkommen. ELSE muß in der gleichen Zeile
stehen wie die zugehörige IF-Anweisung.
#on ("b")#Falsche Felddimension:
Dimensioniert in ... Dimensionen, gefundene Anzahl Indizes: ...#off ("b")#
Beim Zugriff auf ein Feldelement wurden zu viele oder zu wenig Indizes angegeben.
#on ("b")#FOR ohne NEXT#off ("b")#
Diese Fehlermeldung erscheint, wenn am Programmende für eine FOR-Anweisung
kein korrespondierendes NEXT gefunden wurde.
#on ("b")#Falsche Reihenfolge der Zeilennummern#off ("b")#
Die Zeilennummern wurden nicht in aufsteigender Reihenfolge angegeben.
#on ("b")#Falscher Typ#off ("b")#
Es wurde ein anderer Datentyp erwartet als angegeben, und es konnte keine automa
tische Konvertierung vorgenommen werden.
#on ("b")#Falscher Typ der Operanden#off ("b")#
Bei einem dyadischen Operator wurden Operanden angegeben, für deren Typen
dieser Operator nicht definiert ist (vergleiche Kapitel 4.4.).
#on ("b")#Falscher Typ des Operanden#off ("b")#
Bei einem monadischen Operator wurde ein Operand angegeben, für dessen Typ
dieser Operator nicht definiert ist (vergleiche Kapitel 4.4.).
#on ("b")#Fehlerhafte Bereichsangabe#off ("b")#
Diese Fehlermeldung kann bei den Anweisungen DEFDBL, DEFINT, DEFSNG und
DEFSTR auftreten, wenn bei einer Bereichsangabe der Buchstabe vor dem Binde
strich im Alphabet nach dem Buchstaben hinter dem Bindestrich steht.
#on ("b")#Fehlerhafte Dimensionierung: Die Obergrenze muß >= 1 sein#off ("b")#
Es wurde versucht, ein Feld mit dem größten Index null in einer Dimension zu
dimensionieren, obwohl die Index-Untergrenze mit OPTION BASE auf eins einge
stellt war.
#on ("b")#Fehlerhafte Laufvariable#off ("b")#
Nach einer NEXT-Anweisung wurde eine Laufvariable gefunden, die nicht zur letzten
anhängigen FOR-Anweisung gehört. Der Fehler tritt auf, wenn Schleifen geschachtelt
wurden.
#on ("b")#Fehlerhafte Zeilennummer#off ("b")#
Die Zeilennumer entspricht nicht der Syntax für Zeilennumern.
#on ("b")#Fehlerhafter Funktionsaufruf#off ("b")#
- Die Prozedur liefert keinen Wert
Es wurde versucht, eine Prozedur mit USR aufzurufen, die keinen Wert liefert.
- Der Typ des Resultats ist nicht erlaubt, gefunden: ...
Es wurde versucht, eine Prozedur mit USR aufzurufen, die ein Objekt liefert,
dessen Datentyp in BASIC nicht bekannt ist.
- Kein Argument erwartet
Es wurde versucht, eine benutzer-definierte Funktion, die ohne Parameter definiert
wurde, mit Argument(en) aufzurufen.
- ... Argument(e) erwartet
Die Anzahl der angegebenen Argumente ist kleiner als die Anzahl der bei der
Funktionsdefinition angegebenen Parameter.
- Nur ... Argument(e) erwartet
Die Anzahl der angegebenen Argumente ist größer als die Anzahl der bei der Funk
tionsdefinition angegebenen Parameter.
- Kein Resultat erlaubt (gefunden: ...)
Bei CALL oder CHAIN wurde versucht, eine wertliefernde Prozedur aufzurufen.
#on ("b")#Funktionsaufruf ohne Zusammenhang#off ("b")#
Es wurde ein Funktionsaufruf angegeben, wo eine Anweisung erwartet wurde.
#on ("b")#GO ohne TO oder SUB#off ("b")#
Das reservierte Wort GO kann nur in GO SUB oder GO TO auftreten.
#on ("b")#Interner Fehler#off ("b")#
Bei der Übersetzung wurde innerhalb des Compilerprogramms ein interner Fehler
ausgelöst. (vergleiche Kapitel 7.1.)
#on ("b")#Nach OPTION BASE ist nur 0 oder 1 erlaubt#off ("b")#
Es wurde versucht, eine Zahl > 1 nach OPTION BASE anzugeben.
#on ("b")#NEXT ohne FOR#off ("b")#
Es wurde eine NEXT-Anweisung gefunden, die keiner FOR-Anweisung zuzuordnen
ist, da keine "offenen" FOR-Schleifen mehr anhängig sind.
#on ("b")#Nicht implementiert#off ("b")#
Einige reservierte Wörter werden vom BASIC-Compiler erkannt, obwohl die zugehö
rigen Anweisungen oder Funktionen nicht implementiert sind (vgl. Anhang A).
#on ("b")#Parametervariable kommt mehrmals vor#off ("b")#
Bei der Definition einer "user function" kommt ein Parameter in der Parameterliste
mehr als einmal vor.
#on ("b")#Rekursive Funktionsdefinition#off ("b")#
Es wurde versucht, in der Definition einer "user function" die zu definierende Funk
tion aufzurufen.
#on ("b")#STEP ohne FOR#off ("b")#
STEP darf nur in FOR-Anweisungen vorkommen.
#on ("b")#SUB ohne GO#off ("b")#
SUB darf nur in GOSUB vorkommen.
#on ("b")#Syntaxfehler: <nähere Fehlerangabe>#off ("b")#
Wenn dieser Fehler erscheint, wurde vom Compiler eine Angabe gefunden, die nach
den Syntaxregeln dort nicht erwartet wurde oder fehlerhaft ist.
#on ("b")#TAB ohne (L)PRINT#off ("b")#
TAB darf nur in PRINT- und LPRINT-Anweisungen vorkommen.
#on ("b")#THEN ohne IF#off ("b")#
THEN darf nur in IF-Anweisungen vorkommen. THEN muß in der gleichen Zeile
stehen wie die zugehörige IF-Anweisung.
#on ("b")#TO ohne Zusammenhang#off ("b")#
TO darf nur in FOR-Anweisungen oder in GO TO vorkommen.
#on ("b")#Text zu lang#off ("b")#
Dieser Fehler erscheint, wenn ein Anführungszeichen fehlt beziehungsweise ein
Anführungszeichen zu viel gefunden wird.
#on ("b")#Unbekannte Funktion, Argument(e) angegeben: ...#off ("b")#
Es wurde versucht, eine Funktion mit einem Argument aufzurufen, für dessen Typ die
Funktion nicht definiert ist.
#on ("b")#Unbekannte Prozedur, Parameter angegeben: ...#off ("b")#
Die angegebene Prozedur konnte mit den angegebenen Parametertypen nicht gefun
den werden.
#on ("b")#Undefinierte 'user function'#off ("b")#
Es wurde versucht, eine benutzer-definierte Funktion aufzurufen, die (noch) nicht
definiert wurde.
#on ("b")#USING ohne (L)PRINT#off ("b")#
USING darf nur in PRINT- und LPRINT-Anweisungen vorkommen.
#on ("b")#WEND ohne WHILE#off ("b")#
Es wurde eine WEND-Anweisung gefunden, die keiner WHILE-Anweisung zuzuord
nen ist, da keine "offenen" WHILE-Schleifen mehr anhängig sind.
#on ("b")#WHILE ohne WEND#off ("b")#
Diese Fehlermeldung erscheint, wenn am Programmende für eine WHILE-Anweisung
kein korrespondierendes WEND gefunden wurde.
#on ("b")#Zeile mit dieser Nummer existiert nicht#off ("b")#
Es wurde versucht, mit GOTO oder GOSUB zu einer Zeilennumer zu verzweigen, die
im Programm nicht angegeben wurde.
Übersicht über die innerhalb des BASIC-Systems
ausgelösten Laufzeitfehler
Die meisten Laufzeitfehler werden auch bei BASIC-Programmen im EUMEL-System
erzeugt (vergleiche Kapitel 7.2.). Einige werden aber innerhalb des BASIC-Systems
erzeugt. Die nachfolgende Übersicht enthält die innerhalb des BASIC-Systems aus
gelösten Fehler mit Angabe des gelieferten Fehlercodes und der Fehlermeldung.
#on ("b")#Fehlercode:#off ("b")# 1003
#on ("b")#Fehlermeldung:#off ("b")# RETURN ohne GOSUB
Eine RETURN-Anweisung wurde gefunden, obwohl keine GOSUB-Anweisung mehr
anhängig war.
#on ("b")#Fehlercode:#off ("b")# 1004
#on ("b")#Fehlermeldung:#off ("b")# RESTORE: Keine DATA-Anweisung in oder nach
#right#Zeile ... gefunden
Eine RESTORE-Anweisung konnte nicht ausgeführt werden, weil in oder nach der in
der Anweisung angegebenen Zeilennummer keine DATA-Anweisung mehr steht.
#on ("b")#Fehlercode:#off ("b")# 1005
#on ("b")#Fehlermeldung:#off ("b")# bei ^: negative Basis, gebrochener Exponent: ...
Es wurde versucht, eine negative Zahl mit einer gebrochenen Zahl zu potenzieren.
#on ("b")#Fehlercode:#off ("b")# 1005
#on ("b")#Fehlermeldung:#off ("b")# USING: kein Format gefunden
Bei einer PRINT USING-Anweisung wurde kein Format für die Ausgabe angegeben
oder die Formatzeichenkette enthält keine Formatzeichen.
#on ("b")#Fehlercode:#off ("b")# 1005
#on ("b")#Fehlermeldung:#off ("b")# USING-Format fehlerhaft: ...
Bei einer PRINT USING-Anweisung wurde ein fehlerhaftes Format angegeben.
#on ("b")#Fehlercode:#off ("b")# 1004
#on ("b")#Fehlermeldung:#off ("b")# Keine Daten mehr für READ
Es stehen keine Daten mehr für die READ-Anweisung zur Verfügung; der READ-
DATA-Zeiger zeigt hinter das Ende der letzten DATA-Anweisung.
#on ("b")#Fehlercode:#off ("b")# 1005
#on ("b")#Fehlermeldung:#off ("b")# WIDTH: negative Angabe: ...
Nach WIDTH wurde eine negative Zahl gefunden.
#on ("b")#Fehlercode:#off ("b")# 1013
#on ("b")#Fehlermeldung:#off ("b")# READ: Falscher Datentyp, ... ist kein INT
Einer INT-Variablen konnte kein Wert zugewiesen werden, da das aktuelle Objekt
aus der DATA-Liste keine gültige Darstellung eines INT-Wertes war oder ein
"quoted string" gefunden wurde.
#on ("b")#Fehlercode:#off ("b")# 1013
#on ("b")#Fehlermeldung:#off ("b")# READ: Falscher Datentyp, ... ist kein REAL
Einer REAL-Variablen konnte kein Wert zugewiesen werden, da das aktuelle Objekt
aus der DATA-Liste keine gültige Darstellung eines REAL-Wertes war oder ein
"quoted string" gefunden wurde.
#on ("b")#Fehlercode:#off ("b")# 1051 (interner Fehler)
#on ("b")#Fehlermeldung:#off ("b")# variierend
Bei der Ausführung des Programms trat in einer Prozedur des BASIC-Systems ein
interner Fehler auf. (Vergleiche Kapitel 7.)
#on ("b")#Fehlercode:#off ("b")# 1080
#on ("b")#Fehlermeldung:#off ("b")# INPUT-Fehler ( Fehlerart ) : > Eingabezeile <
Bei einer INPUT-Anweisung, die auf eine mit 'sysin' eingestellte Datei wirken sollte,
kam es zu einem Fehler der angegebenen Fehlerart. Nach dem Doppelpunkt wird die
Eingabezeile aus der Eingabedatei ausgegeben.
#page#
#head#
EUMEL-BASIC-Compiler Anhang D: ELAN-Prozeduren des Compilers %
#end#
Anhang D: ELAN-Prozeduren des Compilers
#on ("b")#PROC #ib(3)#basic#ie(3)# (TEXT CONST dateiname)#off ("b")#
Das in der Datei 'dateiname' enthaltene BASIC-Programm wird dem BASIC-
Compiler zur Übersetzung übergeben. Werden keine Fehler gefunden, so wird das
Programm direkt nach der Übersetzung ausgeführt.
Beispiel:
basic ("Mein liebstes BASIC-Programm")#off ("b")#
#on ("b")#PROC basic (TEXT CONST dateiname, prozedurname)#off ("b")#
Das in der Datei 'dateiname' enthaltene BASIC-Programm wird dem BASIC-
Compiler zur Übersetzung übergeben. Werden keine Fehler gefunden, dann wird
das Programm unter dem Namen 'prozedurname' dauerhaft eingetragen (inser
tiert).
Das Programm wird nicht ausgeführt. Beachten Sie, daß der Prozedurname den
Vorschriften für ELAN-Prozedurnamen entsprechen muß und außerdem #on ("b")#keine
Leerzeichen#off ("b")# enthalten darf. (Zur Namenswahl siehe auch Kapitel 3.)
Beispiel:
basic ("Mein liebstes BASIC-Programm", "liebstesprogramm")#off ("b")#
#on ("b")#PROC #ib(3)#basic list#ie(3)# (BOOL CONST status)#off ("b")#
Mit der Prozedur 'basic list' kann eingestellt werden, ob die gerade vom Compiler
übersetzten Programmzeilen angezeigt werden sollen oder nicht (vergleiche Kapitel
3.).
basic list (TRUE)#off ("b")#: Die übersetzten Zeile werden angezeigt
basic list (FALSE)#off ("b")#: Die übersetzten Zeile werden nicht angezeigt
#on ("b")#PROC #ib(3)#basic page#ie(3)# (BOOL CONST status)#off ("b")#
Mit der Prozedur 'basic page' kann eingestellt werden, wie die Ausgaben von
BASIC-Programmen behandelt werden, wenn der Bildschirm voll ist (vergleiche
Kapitel 5, Steuerung der Bildschirmausgaben).
basic page (TRUE): Beim Erreichen des Bildschirmendes wird auf einen
Tastendruck gewartet (vgl. Kap. 5.)
basic page (FALSE): Beim Erreichen des Bildschirmendes wird 'gescrollt'.
|