// CAE0
GET "SYNHDR"
LET NEWVEC(N) = VALOF
$( TREEP := TREEP - N - 1
IF TREEP<=TREEVEC DO
$( REPORTMAX := 0
CAEREPORT(98) $)
RESULTIS TREEP $)
AND LIST1(X) = VALOF
$( LET P = NEWVEC(0)
P!0 := X
RESULTIS P $)
AND LIST2(X, Y) = VALOF
$( LET P = NEWVEC(1)
P!0, P!1 := X, Y
RESULTIS P $)
AND LIST3(X, Y, Z) = VALOF
$( LET P = NEWVEC(2)
P!0, P!1, P!2 := X, Y, Z
RESULTIS P $)
AND LIST4(X, Y, Z, T) = VALOF
$( LET P = NEWVEC(3)
P!0, P!1, P!2, P!3 := X, Y, Z, T
RESULTIS P $)
AND LIST5(X, Y, Z, T, U) = VALOF
$( LET P = NEWVEC(4)
P!0, P!1, P!2, P!3, P!4 := X, Y, Z, T, U
RESULTIS P $)
AND LIST6(X, Y, Z, T, U, V) = VALOF
$( LET P = NEWVEC(5)
P!0, P!1, P!2, P!3, P!4, P!5 := X, Y, Z, T, U, V
RESULTIS P $)
AND CAEREPORT(N, A) BE
$( REPORTCOUNT := REPORTCOUNT + 1
WRITEF("*NSYNTAX ERROR NEAR LINE %N: ", LINECOUNT)
CAEMESSAGE(N, A)
WRCHBUF()
IF REPORTCOUNT GR REPORTMAX DO
$( WRITES('*NCOMPILATION ABORTED*N')
STOP(8) $)
NLPENDING := FALSE
UNTIL SYMB=S.LSECT LOGOR SYMB=S.RSECT LOGOR
SYMB=S.LET LOGOR SYMB=S.AND LOGOR
SYMB=S.END LOGOR NLPENDING DO NEXTSYMB()
LONGJUMP(REC.P, REC.L) $)
AND RPROG() = VALOF
$( LET OP, A = SYMB, 0
NEXTSYMB()
UNLESS SYMB=S.STRING DO CAEREPORT(97)
A := RBEXP()
RESULTIS LIST3(OP, A,
SYMB=S.NEEDS -> RPROG(), RDBLOCKBODY())
$)
AND FORMTREE() = VALOF
$(1 CHCOUNT := 0
FOR I = 0 TO 63 DO CHBUF!I := 0
$( LET V = VEC 10 // FOR 'GET' STREAMS
GETV, GETP, GETT := V, 0, 10
$( LET V = VEC 100
WORDV := V
$( LET V = VEC 256
CHARV, CHARP := V, 0
$( LET V = VEC 100
NAMETABLE, NAMETABLESIZE := V, 100
FOR I = 0 TO 100 DO NAMETABLE!I := 0
REC.P, REC.L := LEVEL(), L
LINECOUNT, PRLINE := 1, 0
RCH()
IF CH=ENDSTREAMCH RESULTIS 0
DECLSYSWORDS()
L: NEXTSYMB()
IF OPTION!1 DO // PP DEBUGGING OPTION
$( WRITEF("%N %S*N", SYMB, WORDV)
IF SYMB=S.END RESULTIS 0
GOTO L $)
$( LET A = SYMB=S.SECTION LOGOR SYMB=S.NEEDS -> RPROG(), RDBLOCKBODY()
UNLESS SYMB=S.END DO $( CAEREPORT(99); GOTO L $)
RESULTIS A $)1
AND CAEMESSAGE(N, A) BE $(
LET S=VALOF
SWITCHON N INTO
$( DEFAULT: WRITEN(N); RETURN
CASE 91: RESULTIS "'8' '(' OR ')' EXPECTED"
CASE 94: RESULTIS "ILLEGAL CHARACTER"
CASE 95: RESULTIS "STRING TOO LONG"
CASE 96: RESULTIS "NO INPUT %S"
CASE 97: RESULTIS "STRING OR NUMBER EXPECTED"
CASE 98: RESULTIS "PROGRAM TOO LARGE"
CASE 99: RESULTIS "INCORRECT TERMINATION"
CASE 8:CASE 40:CASE 43:
RESULTIS "NAME EXPECTED"
CASE 6: RESULTIS "'$(' EXPECTED"
CASE 7: RESULTIS "'$)' EXPECTED"
CASE 9: RESULTIS "UNTAGGED '$)' MISMATCH"
CASE 32: RESULTIS "ERROR IN EXPRESSION"
CASE 33: RESULTIS "ERROR IN NUMBER"
CASE 34: RESULTIS "BAD STRING"
CASE 15:CASE 19:CASE 41: RESULTIS "')' MISSING"
CASE 30: RESULTIS "',' MISSING"
CASE 42: RESULTIS "'=' OR 'BE' EXPECTED"
CASE 44: RESULTIS "'=' OR '(' EXPECTED"
CASE 50: RESULTIS "ERROR IN LABEL"
CASE 51: RESULTIS "ERROR IN COMMAND"
CASE 54: RESULTIS "'OR' EXPECTED"
CASE 57: RESULTIS "'=' EXPECTED"
CASE 58: RESULTIS "'TO' EXPECTED"
CASE 60: RESULTIS "'INTO' EXPECTED"
CASE 61:CASE 62: RESULTIS "':' EXPECTED"
CASE 63: RESULTIS "'**/' MISSING"
$)
WRITEF(S, A) $)
.