|
|
DataMuseum.dkPresents historical artifacts from the history of: RC4000/8000/9000 |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about RC4000/8000/9000 Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - download
Length: 23040 (0x5a00)
Types: TextFile
Names: »comalsyntax«
└─⟦621cfb9a2⟧ Bits:30002817 RC8000 Dump tape fra HCØ. Detaljer om "HC8000" projekt.
└─⟦0364f57e3⟧
└─⟦this⟧ »comalsyntax«
└─⟦667bb35d6⟧ Bits:30007480 RC8000 Dump tape fra HCØ.
└─⟦4334b4c0b⟧
└─⟦this⟧ »comalsyntax«
; ***********************************************************
; * *
; * ******* ******* ** ** ******* * *
; * * * * * * * * * * * * *
; * * * * * * * * * * * *
; * * * * * * * ********* * *
; * * * * * * * * * *
; * * * * * * * * * * * *
; * ******* ******* * * * * ********* *
; * *
; ***********************************************************
;
;
; s y n t a x t a b l e
\f
; actions used by the syntaxtable
;
; a1 : store statement number
; a2 : store program byte
; a3 : store byte 544 (print)
; a4 : line delete
; a5 : store 1040 (eos), exit
; a6 : syntax error
; a7 : store program statement number
; a8 : store 1033 (then)
; a9 : output 556 (goto) then a7
; a10 : look up variable name then a2
; a11 : store variable name as dummyargument
; a12 : a16, then output null byte
; a13 : batch without filename
; a14 : output integer or real number
; a15 : check for statement number store byte
; and scan remark string
; a16 : check for statement number then a2
; a17 : statement number:=0, then a7
; a18 : stack monadic -
; a19 : scan and store string literal
; a20 : convert letter to user function
; a21 : store <get addr> stack := (numeric)
; a22 : output (.
; a23 : pop stack match:=true
; a24 : pop stack match:=false
; a25 : a14 then a23
; a26 : a20 then a50
; a27 : output subscripts comma
; a28 : output .), then a23
; a29 : scannerbackup:=true, then a23
; a30 : save console command
; a31 : execute saved console command
\f
; a32 : suply linenumber 0 then a35
; a33 : linenumber:= if linenumber1=0 then 9999
; else linenumber1,
; then a36
; a34 : suply linenumber 10, then a35
; a35 : linenumber1:=linenumber
; a36 : linenumber2:=linenumber
; a37 : bump linenumber count then a7
; a38 : replace with <exit subs>
; a39 : replace load with get addr, store exit addr
; a40 : read real number
; a41 : not used
; a42 : a19 then a23
; a43 : output 539 (let)
; a44 : output 556 (goto) then a37
; a45 : a2, then a23
; a46 : store ) (arithmetic)
; a47 : linenumber1:=9999
; a48 : delete lines
; a49 : store scratch, scan scratch string
; a50 : stack operator
; a51 : a52 then a23
; a52 : unstack operator
; a53 : stack string rel op
; a54 : stack := (numeric)
; a55 : stack := (string)
; a56 : replace load with get addr
; a57 : store = (not operator)
; a58 : stack , (string concat)
; a59 : a14 then a52
; a60 : store <load>
; a61 : store <load1>
; a62 : store <load2>
; a63 : store <exit subs>
; a64 : a61 then a23
; a65 : a60 then a29
; a66 : a62 then a23
; a67 : a62 then a29
; a68 : a46 then a51
; a69 : a46 then a45
\f
; syntax table for comal.
;
; each element in the table is 3 integers:
; word 1: if left halfword=0 then right
; halfword is the next expected
; value from scanner.
; if left halfword=1 then right halfword
; is the index of a subtree 'subroutine'.
; if left halfword=2 then right halfword
; is the number of a routine in the parser.
;
; word 2: left halfword: new node if match
; right halfword: action
;
; word 3: same as word 2, but for no match.
;
;
@1 ; statement number.
st1+a1
0
1040 ; eos (end of statement)
a4
0
11 ; run
run+a30
0
12 ; runl
run+a30
0
2 ; batch
btch+a30
0
6 ; list
list+a30
0
1 ; auto
auto1+a30
0
\f
10 ; renumber
auto1+a30
0
13 ; scratch
cend+a49
0
7 ; load
load+a30
0
9 ; punch
list+a30
0
15 ; time
time+a30
0
8 ; message
mess+a30
0
17 ; kill
kill+a30
0
@2 ; look for console command
cend+a30
0
\f
st1.
520 ; endproc
a15
0
514 ; proc
exec+a16
0
517 ; case
case+a16
0
525 ; when
when+a16
0
521 ; endcase
a15
0
516 ; while
while+a16
0
518 ; repeat
a15
0
524 ; until
until+a16
0
1039 ; ,
dp ; line delete
0
\f
526 ; else
a15
0
519 ; endif
a15
0
529 ; end
a15
0
522 ; endwhile
a15
0
557 ; on
on+a12
0
552 ; def
def+a16
0
515 ; for
for+a16
0
523 ; next
exec+a16
0
551 ; data
data+a16
0
527 ; rem
a15
0
\f
st2.
547 ; rename
renam+a2
0
550 ; tab
tab+a2
0
543 ; page
tab+a2
0
535 ; delete
save+a2
0
554 ; exec
exec+a16
0
541 ; new
end+a2
0
549 ; save
save+a2
0
537 ; enter
save+a2
0
533 ; chain
chain+a2
0
542 ; open
open+a2
0
534 ; close
close+a2
0
\f
545 ; randomize
end+a2
0
556 ; goto
goto+a16
0
555 ; gosub
goto+a16
0
513 ; if
if+a2
0
528 ; stop
a15
0
530 ; return
a15
0
539 ; let
let+a2
0
540 ; mat
mat+a2
0
536 ; dim
dim+a2
0
548 ; restore
rest+a2
0
538 ; input
input+a2
0
\f
544 ; print
print+a2
0
558 ; write
write+a2
0
1038 ; ';'
print+a3
0
546 ; read
read+a2
0
531 ; bye
end+a2
0
559 ; lowbound
delay+a2
0
560 ; lookup
save+a2
0
553 ; delay
delay+a2
0
572 ; kitoff
until+a2
0
573 ; kiton
until+a2
0
574 ; alfalock
alfa+a2
0
\f
561 ; create
create+a2
0
562 ; changesize
changesize+a2
0
563 ; copy
rename+a2
0
564 ; claim
end+a2
0
565 ; search
search+a2
0
566 ; scope
scope+a2
0
567 ; newclaim
newclaim+a2
0
568 ; scancat
search+a2
0
569 ; digits
tab+a2
0
571 ; printeps
tab+a2
0
570 ; printdate
prdate+a2
0
\f
1040 ; eos
a4
let+a43
dp. @1 ; statement number
a35
a47
1040 ; eos
a48
a6 ; syntax error
btch. 1537 ; "
cend+a19
cend+a13
run. @1 ; statement number
cend+a35
a32
1537 ; "
cend+a19
cend+a13
list. @1 ; statement number
a35
a32
1034 ; to
list2+0
0
1039 ; ,
0
list1+a33
list2. @1 ; statement number
a36
a6
list1. 1537 ; "
cend+a19
cend+a13
\f
auto1. @1 ; statement number
a35
a34
1032 ; step
auto2
0
1039 ; ,
0
cend+a33
auto2. @1 ; statement number
cend+a36
a6
until. expr ; expression
end
a6
renam. fn ; filename
0
a6
rena1.
1039 ; ,
a2
a6
\f
save. fn ; filename
end
a6
load. 1537 ; "
cend+a19
a6
time. 3599 ; =
0
a6
numbe. 0 ; number
cend+a40
a6
end. 1040 ; end of statement
a5
a6
cend. 1040 ; end of statement
a31
a6
goto. @1 ; statement number
end+a7
a6
\f
chain. fn ; filename
0
a6
1040 ; end of statement
a5
0
1033 ; then
a2
a8
556 ; goto
0
0
@1 ; statement number
end+a9
a6
rest. @1 ; statement number
end+a7
end+a17
open. fld ; filedesignator
save
a6
close. fld ; filedesignator
end
end
\f
if. expr ; expression
0
a6
1033 ; then
a2
a8
@1 ; statement number
end+a9
0
1025 ; do, don't store !
0
0
1040 ; eos
a5
st2
alfa. 3599 ; =
a57
a6
expr ; expression
end+0
a6
\f
on. 1027 ; esc
on4+a2
0
1026 ; err
on4+a2
0
expr ; expression
0
a6
1033 ; then
a2
on1+a8
@1 ; statement number
on2+a44
0
on1. 556 ; goto
on3+a2
0
555 ; gosub
a2
a6
on3. @1 ; statement number
a37
a6
on2. 1039 ; ,
on3
end
on4. 1033 ; then
st2+a2
st2+a8
\f
def. 2560 ; fn<array name>
a20
a6
1044 ; (
0
a6
2048 ; simple variable name
a11
a6
1045 ; )
0
a6
3599 ; =
until+a57
a6
\f
for. 2048 ; simple variable name
a10
a6
3599 ; =
a21
a6
expr ; expression
52
a6
1034 ; to
a2
a6
expr ; expression
0
a6
1032 ; step
until+a2
end
exec. 2048 ; simple variable name
end+a10
a6
\f
data. 1537 ; "
data2+a19
0
3594 ; +
data1
0
3595 ; -
a18
data1
0 ; number
data2+a59
a6
data1. 0 ; number
a14
a6
data2. 1039 ; ,
data+a2
end
delay. 3599 ; =
until+a57
a6
\f
let. nv ; numeric variable
a56
let1+0
3599 ; =
a54
a6
expr ; numeric expression
let3+a52
a6
let1. sv ; string variable
a56
a6
3599 ; =
a55
a6
sex ; string expression
0
a6
let2. 1039 ; ,
a58
let3+a52
sex ; string expression
let2+a52
a6
let3. 1038 ; ';'
let+a2
end+0
\f
mat. 2048 ; variable name
a10
mat1+0
3599 ; =
a2
a6
1044 ; (
a2
mat2+0
expr ; numeric expression
0
a6
1045 ; )
a2
a6
3590 ; *
mat4+a2
a6
mat2. 2048 ; variable name
a10
mat3+0
3594 ; +
mat4+a2
0
3595 ; -
mat4+a2
0
3590 ; *
a2
end+0
mat4. 2048 ; variable name
end+a10
a6
\f
mat3. 1030 ; inv
mat5+a2
0
1035 ; trn
a2
mat6+0
mat5. 1044 ; (
a2
a6
2048 ; variable name
a10
a6
1045 ; )
end+a2
a6
mat6. 1037 ; zer
end+a2
0
3 ; con
end+a2
0
1029 ; idn
end+a2
a6
\f
mat1. 538 ; input
mat8+a2
0
546 ; read
a2
mat9
mat8. fld ; file designator
0
0
2048 ; variable name
a10
a6
mat8a. 2048 ; variable name
a10
0
1039 ; ,
mat8a+a2
end+0
mat9. 544 ; print
a2
mat10+0
fld ; file designator
mat12+0
mat12+0
mat10. 558 ; write
a2
mat13+0
fld ; file designator
0
a6
\f
mat12. 2048 ; variable name
a10
a6
mat11. 1039 ; ,
mat12+a2
0
1038 ; ';'
a2
end+0
2048 ; variable name
mat11+a10
end+0
mat13. 1043 ; solve
a2
a6
2048 ; variable name
a10
a6
3590 ; *
a2
a6
2048 ; variable name
a10
a6
3599 ; =
a2
a6
2048 ; variable name
end+a10
a6
\f
dim. 2048 ; variable name
dim1+a10
0
2049 ; string name
a10
a6
dim1. sbl ; subscript list
a63
a6
1039 ; ,
dim+a2
end+0
tab. fld ; file designator
0
0
3599 ; =
until+a57
a6
\f
input. fld ; file designator
0
0
inpt1. 1537 ; "
a19
inpt2+0
1039 ; ,
a2
a6
inpt2. nv ; numeric variable
inpt3+a39
0
sv ; string variable
a39
a6
inpt3. 1039 ; ,
inpt1+a2
0
1038 ; ';'
end+a2
end+0
\f
read. fld ; file designator
0
0
read1. nv ; numeric variable
read2+a39
0
sv ; string variable
a39
a6
read2. 1039 ; ,
read1+a2
end+0
write. fld ; file designator
0
a6
writ1. snex ; string or numeric expression
0
a6
1039 ; ,
writ1+a2
end+0
\f
print. fld ; file designator
0
0
1036 ; using
a16
pr0+0
sex ; string expression
pr5+0
a6
1039 ; ,
a2
a6
snex ; string or numeric expression
pr5+0
a6
\f
pr0. 550 ; tab
a2
pr1+0
1044 ; (
0
a6
expr ; numeric expression
0
a6
1045 ; )
pr5+a46
a6
pr1. snex ; string or numeric expression
0
0
pr5. 1039 ; ,
pr0+a2
0
1038 ; ';'
pr0+a2
end+0
\f
when. snex ; string or numeric expression
0
a6
1039 ; ,
when+a2
end+0
case. snex ; string or numeric expression
0
a6
1031 ; of
end+a2
a6
snex: sex ; string expression
0
snex1
@3 ; relational operator
a53
a29
sex ; string expression
a52
a6
3609 ; or
exp01+a50
0
exr1 ;
exp0+0
a29
snex1. expr ; expression
a23
a24
\f
expr:
expr1
0
a24
exp0. 3609 ; or
a50
a29
exp01. expr1
exp0+a52
a6
expr1:
expr2
0
a24
exr1:
exp1. 3608 ; and
a50
a29
expr2
exp1+a52
a6
expr2:
3586 ; not
a50
exp2
expr3
a51
a6
exp2. expr3
a23
a24
\f
expr3:
simple ; simple expression
0
exp3+0
@3 ; relational operator
a50
a29
simple ; simple expression
a51
a6
exp3. sex ; string expression
0
a24
@3 ; relational operator
a53
a24
sex ; string expression
a51
a6
\f
simple:
3594 ; +
si0+0
0
3595 ; -
si2+a18
0
si0. term ; term
0
a24
si1. @4 ; adding operator
a50
a29
si2. term
si1+a52
a6
term:
factor ; factor
0
a24
te0. @5 ; multiplying operator
a50
a29
factor
te0+a52
a6
factor: primary ; primary
0
a24
fac1. 3589 ; ^
a50
a29
primary
fac1+a52
a6
\f
primary:
nv ; numeric variable
a23
0
0 ; number
a25
0
1540 ; false
a45
0
1541 ; true
a45
0
@6 ; function
prim0+a50
0
2560 ; user function
prim3+a26
0
3102 ; ord
prim4+a50
0
3103 ; len
prim4+a50
0
prim5
a23
a24
\f
prim0. 1044 ; (
a22
a6
expr ; expression
0
a6
prim1. 1039 ; ,
a27
prim2
expr ; expression
prim1+a52
a6
prim2. 1045 ; )
a68
a6
\f
prim3. prim5 ; ( expr )
a51
a6
prim4. 1044 ; (
a22
a6
sex ; string expression
0
a6
1045 ; )
a68
a6
prim5: 1044 ; (
0
a24
expr ; expression
0
a6
1045 ; )
a69
a6
\f
while. expr ; expression
0
a6
1033 ; then (don't store)
0
0
1025 ; do
end+a2
a6
\f
sbl:
1044 ; (
a22
a24
expr ; expression
0
a6
sbl1. 1039 ; ,
a27
sbl2
expr
sbl1+a52
a6
sbl2. 1045 ; )
a28
a6
\f
nv:
2048 ; variabel name
a10
a24
sbl ; subscript list
a64
a65
sv:
2049 ; string name
a10
a24
sbl ; subscript list
a66
a67
sex:
fn:
3101 ; chr
a50
sex1
1044 ; (
a22
a6
expr ; expression
0
a6
1045 ; )
a68
a6
sex1. sv ; string variable
a23
0
1537 ; "
a42
a24
\f
fld:
1028 ; file
a2
a24
sbl ; subscript list
a63
a6
1039 ; ,
a23
a29
create.
fn ; filename
0
a6
1039 ; ','
a2
a6
fn ; filename (kitname)
0
crea1+0
1039 ; ','
a2
a6
crea1.
expr ; expression
0
a6
1039 ; ','
a2
end+0
expr ; expression
end+0
a6
\f
changesize.
fn ; filename
0
a6
chaz1.
1039 ; ','
a2
a6
expr ; expression
end+0
a6
\f
search.
fn ; filename
end+0
end+0
scope.
1041 ; mater
rename+a2
0
1042 ; user
rename+a2
a6
prdate. fld ; file designator
0
0
prd1 ; expression ,
0
0
prd1
0
0
expr
0
a6
1038 ; ';'
end+a2
0
1039 ; ','
end+a2
end+0
prd1: expr ; expression
0
a6
1039 ; ','
a45
a6
\f
newclaim.
sex ; string expression
0
a6
1039 ; ','
a2
a6
fn ; filename (kitname)
0
newc1
1039 ; ','
a2
a6
newc1.
expr ; expression
chaz1+0
a6
mess.
sex ; string expression
0
a6
1039 ; ','
a2
cend+0
expr ; expression
0
a6
1039 ; ','
a2
a6
sex ; string expression
cend+0
a6
\f
kill.
sex ; string expression
0
a6
1039 ; ','
a2
a6
expr ; expression
cend+0
a6
\f
;
;
;
;
; *********************************************
; * *
; * end of comal syntax table *
; * *
; *********************************************
;
;
;
;
▶EOF◀