// CAE1 GET "SYNHDR" LET RDBLOCKBODY() = VALOF $(1 LET P, L = REC.P, REC.L LET A = 0 REC.P, REC.L := LEVEL(), RECOVER IGNORE(S.SEMICOLON) SWITCHON SYMB INTO $( CASE S.MANIFEST: CASE S.STATIC: CASE S.GLOBAL: $( LET OP = SYMB NEXTSYMB() A := RDSECT(RDCDEFS) A := LIST3(OP, A, RDBLOCKBODY()) GOTO RET $) CASE S.LET: NEXTSYMB() A := RDEF() RECOVER: WHILE SYMB=S.AND DO $( NEXTSYMB() A := LIST3(S.AND, A, RDEF()) $) A := LIST3(S.LET, A, RDBLOCKBODY()) GOTO RET DEFAULT: A := RDSEQ() UNLESS SYMB=S.RSECT LOGOR SYMB=S.END DO CAEREPORT(51) CASE S.RSECT: CASE S.END: RET: REC.P, REC.L := P, L RESULTIS A $)1 AND RDSEQ() = VALOF $( LET A = 0 IGNORE(S.SEMICOLON) A := RCOM() IF SYMB=S.RSECT LOGOR SYMB=S.END RESULTIS A RESULTIS LIST3(S.SEQ, A, RDSEQ()) $) AND RDCDEFS() = VALOF $(1 LET A, B = 0, 0 LET PTR = @A LET P, L = REC.P, REC.L REC.P, REC.L := LEVEL(), RECOVER $( B := RNAME() TEST SYMB=S.EQ LOGOR SYMB=S.COLON THEN NEXTSYMB() OR CAEREPORT(45) !PTR := LIST4(S.CONSTDEF, 0, B, REXP(0)) PTR := @H2!(!PTR) RECOVER: IGNORE(S.SEMICOLON) $) REPEATWHILE SYMB=S.NAME REC.P, REC.L := P, L RESULTIS A $)1 AND RDSECT(R) = VALOF $( LET TAG, A = WORDNODE, 0 CHECKFOR(S.LSECT, 6) A := R() UNLESS SYMB=S.RSECT DO CAEREPORT(7) TEST TAG=WORDNODE THEN NEXTSYMB() OR IF WORDNODE=NULLTAG DO $( SYMB := 0 CAEREPORT(9) $) RESULTIS A $) AND RNAMELIST() = VALOF $( LET A = RNAME() UNLESS SYMB=S.COMMA RESULTIS A NEXTSYMB() RESULTIS LIST3(S.COMMA, A, RNAMELIST()) $) AND RNAME() = VALOF $( LET A = WORDNODE CHECKFOR(S.NAME, 8) RESULTIS A $) AND IGNORE(ITEM) BE IF SYMB=ITEM DO NEXTSYMB() AND CHECKFOR(ITEM, N) BE $( UNLESS SYMB=ITEM DO CAEREPORT(N) NEXTSYMB() $) .