EBNF

Used Exports

BUILTINS: CHAR EXCL INC INTEGER LONGINT NEW SET
Oberon: GetSelection Log Par Par.pos Par.text
Texts: Append Char OpenReader OpenScanner OpenWriter Pos Read Reader Reader.eot Scan Scanner Scanner.c Scanner.class Text Write WriteInt WriteLn WriteString Writer Writer.buf

MODULE EBNF; (*NW 3.9.97 / 12.9.97 / 1.3.2014*)
.MODULE EBNF (KEY 4DEF3CDC, VERSION 1, SIZE 00001A68)
.IMPORT Texts (KEY 0B9E9984)
.IMPORT Fonts (KEY F4C9F557)
.IMPORT Files (KEY 73F5D686)
.IMPORT Oberon (KEY A89CCEE2)
.IMPORT Display (KEY 4C08D3EA)
.IMPORT Viewers (KEY 25ABF199)
.TYPEDESC 00000020 FFFFFFFF FFFFFFFF FFFFFFFF 00000010 0000000C FFFFFFFF 00000040 0001C008 FFFFFFFF FFFFFFFF 00000030 00000010 0000000C FFFFFFFF
.DATA 88H
.STRING C4H " pos"
.STRING CCH " err"
.STRING D4H " sym "
.STRING DCH "compiled"
.STRING E8H "Nonterminals:"
.STRING F8H "Terminals:"
.STRING 104H " = "
.STRING 10CH " :: "
.STRING 114H "error A in "
.STRING 120H "First symbols:"
.STRING 130H " clash "
.STRING 138H "Non-follow symbols:"
.POINTER_REFERENCES 60H 64H 6CH 78H 98H 8CH 9CH A0H C0H B4H
.FIXUP T 8H
IMPORT Texts, Oberon;
CONST IdLen = 16;
ident = 0; literal = 2; lparen = 3; lbrak = 4; lbrace = 5; bar = 6; eql = 7;
rparen = 8; rbrak = 9; rbrace = 10; period = 11; other = 12;
TYPE Identifier = ARRAY IdLen OF CHAR;
(*tag values: 0 = tsym, 1 = ntsym, 2 = option, 3 = iteration, 4 = catenation, 5 = alternate*)
Item = POINTER TO ItemDesc;
ItemDesc = RECORD
tag, flag0, flag1: INTEGER;
u, v: Item
END ;
Symbol = POINTER TO SymbolDesc;
SymbolDesc = RECORD (ItemDesc)
id: Identifier;
no: INTEGER;
first, crit: SET;
next: Symbol
END ;
VAR ch: CHAR;
sym: INTEGER;
lastpos: LONGINT;
tsno, ntsno: INTEGER;
id: Identifier;
root, curs: Symbol;
R: Texts.Reader;
W: Texts.Writer;
PROCEDURE error(n: INTEGER);
VAR pos: LONGINT;
BEGINa pos := Texts.Pos(R)b;c
0000a(4EE9000C): SUB SP, SP, CH
0001a(AFE00000): STR LNK, SP, 0H
0002a(A0E00004): STR R0, SP, 4H
0003b .FIXUP D
0003b(8D000003): LDR SB, MT, MOD0 [EBNF]
0004b(40D80068): ADD R0, SB, 68H [data]
0005b .FIXUP D
0005b(8D100002): LDR SB, MT, MOD1 [Texts]
0006b(41D80002): ADD R1, SB, VAR2
0007c .FIXUP P
0007c(F7114007): BL MOD1 [Texts] PROC20
0008c(A0E00008): STR R0, SP, 8H
IF pos > lastpos THENd
0009d(80E00008): LDR R0, SP, 8H
000Ad .FIXUP D
000Ad(8D000005): LDR SB, MT, MOD0 [EBNF]
000Bd(81D00044): LDR R1, SB, 44H [data]
000Cd(00090001): SUB R0, R0, R1
000Dd(E600003A): BLE 58 [0048H]
Texts.WriteString(W,e " pos")f;g Texts.WriteInt(W,h pos,i 6)j;k
000Ee .FIXUP D
000Ee(8D000004): LDR SB, MT, MOD0 [EBNF]
000Fe(40D8009C): ADD R0, SB, 9CH [data]
0010e .FIXUP D
0010e(8D100002): LDR SB, MT, MOD1 [Texts]
0011e(41D80005): ADD R1, SB, VAR5
0012f .FIXUP D
0012f(8D000002): LDR SB, MT, MOD0 [EBNF]
0013f(42D800C4): ADD R2, SB, C4H [" pos"]
0014f(43000006): MOV R3, R0, 6H
0015g .FIXUP P
0015g(F711D00E): BL MOD1 [Texts] PROC29
0016h .FIXUP D
0016h(8D000004): LDR SB, MT, MOD0 [EBNF]
0017h(40D8009C): ADD R0, SB, 9CH [data]
0018h .FIXUP D
0018h(8D100002): LDR SB, MT, MOD1 [Texts]
0019h(41D80005): ADD R1, SB, VAR5
001Ai(82E00008): LDR R2, SP, 8H
001Bj(43000006): MOV R3, R0, 6H
001Ck .FIXUP P
001Ck(F711E007): BL MOD1 [Texts] PROC30
Texts.WriteString(W,l " err")m;n Texts.WriteInt(W,o n,p 4)q;r lastpos := pos;s
001Dl .FIXUP D
001Dl(8D000005): LDR SB, MT, MOD0 [EBNF]
001El(40D8009C): ADD R0, SB, 9CH [data]
001Fl .FIXUP D
001Fl(8D100002): LDR SB, MT, MOD1 [Texts]
0020l(41D80005): ADD R1, SB, VAR5
0021m .FIXUP D
0021m(8D000002): LDR SB, MT, MOD0 [EBNF]
0022m(42D800CC): ADD R2, SB, CCH [" err"]
0023m(43000006): MOV R3, R0, 6H
0024n .FIXUP P
0024n(F711D008): BL MOD1 [Texts] PROC29
0025o .FIXUP D
0025o(8D000004): LDR SB, MT, MOD0 [EBNF]
0026o(40D8009C): ADD R0, SB, 9CH [data]
0027o .FIXUP D
0027o(8D100002): LDR SB, MT, MOD1 [Texts]
0028o(41D80005): ADD R1, SB, VAR5
0029p(82E00004): LDR R2, SP, 4H
002Aq(43000004): MOV R3, R0, 4H
002Br .FIXUP P
002Br(F711E007): BL MOD1 [Texts] PROC30
002Cs(80E00008): LDR R0, SP, 8H
002Ds .FIXUP D
002Ds(8D000006): LDR SB, MT, MOD0 [EBNF]
002Es(A0D00044): STR R0, SB, 44H [data]
Texts.WriteString(W,t " sym ")u;v Texts.WriteInt(W,w sym,x 4)y;z
002Ft(40D8009C): ADD R0, SB, 9CH
0030t .FIXUP D
0030t(8D100003): LDR SB, MT, MOD1 [Texts]
0031t(41D80005): ADD R1, SB, VAR5
0032u .FIXUP D
0032u(8D000002): LDR SB, MT, MOD0 [EBNF]
0033u(42D800D4): ADD R2, SB, D4H [" sym "]
0034u(43000007): MOV R3, R0, 7H
0035v .FIXUP P
0035v(F711D00A): BL MOD1 [Texts] PROC29
0036w .FIXUP D
0036w(8D000004): LDR SB, MT, MOD0 [EBNF]
0037w(40D8009C): ADD R0, SB, 9CH [data]
0038w .FIXUP D
0038w(8D100002): LDR SB, MT, MOD1 [Texts]
0039w(41D80005): ADD R1, SB, VAR5
003Ax .FIXUP D
003Ax(8D000002): LDR SB, MT, MOD0 [EBNF]
003Bx(82D00040): LDR R2, SB, 40H [data]
003Cy(43000004): MOV R3, R0, 4H
003Dz .FIXUP P
003Dz(F711E008): BL MOD1 [Texts] PROC30
Texts.WriteLn(W)a;b Texts.Append(Oberon.Log,c W.buf)d
003Ea .FIXUP D
003Ea(8D000004): LDR SB, MT, MOD0 [EBNF]
003Fa(40D8009C): ADD R0, SB, 9CH [data]
0040a .FIXUP D
0040a(8D100002): LDR SB, MT, MOD1 [Texts]
0041a(41D80005): ADD R1, SB, VAR5
0042b .FIXUP P
0042b(F711C005): BL MOD1 [Texts] PROC28
0043c .FIXUP D
0043c(8D400003): LDR SB, MT, MOD4 [Oberon]
0044c(80D0000D): LDR R0, SB, VAR13
0045d .FIXUP D
0045d(8D000002): LDR SB, MT, MOD0 [EBNF]
0046d(81D0009C): LDR R1, SB, 9CH [data]
ENDe
0047e .FIXUP P
0047e(F710E005): BL MOD1 [Texts] PROC14
ENDf error;
0048f(8FE00000): LDR LNK, SP, 0H
0049f(4EE8000C): ADD SP, SP, CH
004Af(C700000F): B LNK
PROCEDURE This(VAR ident: Identifier; tag: INTEGER): Symbol;
VAR s: Symbol; (*find or enter symbol in list*)
BEGINg s := root;h
004Bg(4EE90010): SUB SP, SP, 10H
004Cg(AFE00000): STR LNK, SP, 0H
004Dg(A0E00004): STR R0, SP, 4H
004Eg(A1E00008): STR R1, SP, 8H
004Fh .FIXUP D
004Fh(8D00000A): LDR SB, MT, MOD0 [EBNF]
0050h(80D00060): LDR R0, SB, 60H [data]
0051h(A0E0000C): STR R0, SP, CH
WHILE (s # NIL)i & (js.idk # ident)l DOm s := s.nextn ENDo ;
0052i(80E0000C): LDR R0, SP, CH
0053j(E1000012): BEQ 18 [0066H]
0054k(80E0000C): LDR R0, SP, CH
0055k(D1057C4C): BLEQ MT [trap=4, pos=1404]
0056l(40080014): ADD R0, R0, 14H
0057l(81E00004): LDR R1, SP, 4H
0058l(92000000): LDR R2, R0, 0H
0059l(40080001): ADD R0, R0, 1H
005Al(93100000): LDR R3, R1, 0H
005Bl(41180001): ADD R1, R1, 1H
005Cl(04290003): SUB R4, R2, R3
005Dl(E9000002): BNE 2 [0060H]
005El(44290000): SUB R4, R2, 0H
005Fl(E9FFFFF8): BNE -8 [0058H]
0060m(E1000005): BEQ 5 [0066H]
0061n(80E0000C): LDR R0, SP, CH
0062n(D105944C): BLEQ MT [trap=4, pos=1428]
0063o(80000030): LDR R0, R0, 30H
0064o(A0E0000C): STR R0, SP, CH
0065o(E7FFFFEC): B -20 [0052H]
IF s = NIL THENp
0066p(80E0000C): LDR R0, SP, CH
0067p(E900002F): BNE 47 [0097H]
NEW(s);q s.idr := ident;s s.tagt := tag;u
0068q(40E8000C): ADD R0, SP, CH
0069q .FIXUP D
0069q(8D00001A): LDR SB, MT, MOD0 [EBNF]
006Aq(41D8001C): ADD R1, SB, 1CH [data]
006Bq(D705BC0C): BL MT [trap=0, pos=1468]
006Cr(80E0000C): LDR R0, SP, CH
006Dr(D105C14C): BLEQ MT [trap=4, pos=1473]
006Es(40080014): ADD R0, R0, 14H
006Fs(81E00004): LDR R1, SP, 4H
0070s(42000004): MOV R2, R0, 4H
0071s(83100000): LDR R3, R1, 0H
0072s(41180004): ADD R1, R1, 4H
0073s(A3000000): STR R3, R0, 0H
0074s(40080004): ADD R0, R0, 4H
0075s(42290001): SUB R2, R2, 1H
0076s(E9FFFFFA): BNE -6 [0071H]
0077t(80E0000C): LDR R0, SP, CH
0078t(D105D14C): BLEQ MT [trap=4, pos=1489]
0079u(81E00008): LDR R1, SP, 8H
007Au(A1000000): STR R1, R0, 0H
IF tag = 0 THENv s.now := tsno;x INC(tsno) ELSEy sz.noa := ntsno;b INC(ntsno) ENDc ;
007Bv(80E00008): LDR R0, SP, 8H
007Cv(E900000A): BNE 10 [0087H]
007Dw(80E0000C): LDR R0, SP, CH
007Ew(D105F44C): BLEQ MT [trap=4, pos=1524]
007Fx .FIXUP D
007Fx(8D000016): LDR SB, MT, MOD0 [EBNF]
0080x(81D00048): LDR R1, SB, 48H [data]
0081x(A1000024): STR R1, R0, 24H
0082y(40D80048): ADD R0, SB, 48H
0083y(81000000): LDR R1, R0, 0H
0084y(41180001): ADD R1, R1, 1H
0085y(A1000000): STR R1, R0, 0H
0086z(E7000009): B 9 [0090H]
0087a(80E0000C): LDR R0, SP, CH
0088a(D106114C): BLEQ MT [trap=4, pos=1553]
0089b .FIXUP D
0089b(8D00000A): LDR SB, MT, MOD0 [EBNF]
008Ab(81D0004C): LDR R1, SB, 4CH [data]
008Bb(A1000024): STR R1, R0, 24H
008Cc(40D8004C): ADD R0, SB, 4CH
008Dc(81000000): LDR R1, R0, 0H
008Ec(41180001): ADD R1, R1, 1H
008Fc(A1000000): STR R1, R0, 0H
s.nextd := root;e root := s
0090d(80E0000C): LDR R0, SP, CH
0091d(D106394C): BLEQ MT [trap=4, pos=1593]
0092e .FIXUP D
0092e(8D000009): LDR SB, MT, MOD0 [EBNF]
0093e(81D00060): LDR R1, SB, 60H [data]
0094e(A1000030): STR R1, R0, 30H
ENDf ;
0095f(80E0000C): LDR R0, SP, CH
0096f(A0D00060): STR R0, SB, 60H
RETURN s
ENDg This;
0097g(80E0000C): LDR R0, SP, CH
0098g(8FE00000): LDR LNK, SP, 0H
0099g(4EE80010): ADD SP, SP, 10H
009Ag(C700000F): B LNK
PROCEDURE New(t: INTEGER; x, y: Item): Item;
VAR z: Item;
BEGINh NEW(z);i z.tagj := t;k z.ul := x;m z.vn := y;o RETURN z
009Bh(4EE90014): SUB SP, SP, 14H
009Ch(AFE00000): STR LNK, SP, 0H
009Dh(A0E00004): STR R0, SP, 4H
009Eh(A1E00008): STR R1, SP, 8H
009Fh(A2E0000C): STR R2, SP, CH
00A0i(40E80010): ADD R0, SP, 10H
00A1i .FIXUP D
00A1i(8D00000F): LDR SB, MT, MOD0 [EBNF]
00A2i(41D80000): ADD R1, SB, 0H [data]
00A3i(D706C00C): BL MT [trap=0, pos=1728]
00A4j(80E00010): LDR R0, SP, 10H
00A5j(D106C64C): BLEQ MT [trap=4, pos=1734]
00A6k(81E00004): LDR R1, SP, 4H
00A7k(A1000000): STR R1, R0, 0H
00A8l(80E00010): LDR R0, SP, 10H
00A9l(D106D04C): BLEQ MT [trap=4, pos=1744]
00AAm(81E00008): LDR R1, SP, 8H
00ABm(A100000C): STR R1, R0, CH
00ACn(80E00010): LDR R0, SP, 10H
00ADn(D106DA4C): BLEQ MT [trap=4, pos=1754]
00AEo(81E0000C): LDR R1, SP, CH
00AFo(A1000010): STR R1, R0, 10H
ENDp New;
00B0p(80E00010): LDR R0, SP, 10H
00B1p(8FE00000): LDR LNK, SP, 0H
00B2p(4EE80014): ADD SP, SP, 14H
00B3p(C700000F): B LNK
(*------------------- scanner --------------------*)
PROCEDURE GetSym;
VAR i: INTEGER;
BEGINq
00B4q(4EE90008): SUB SP, SP, 8H
00B5q(AFE00000): STR LNK, SP, 0H
WHILE ~R.eot &r (sch <= " ")t DOu Texts.Read(R,v ch)w ENDx ;
00B6r .FIXUP D
00B6r(8D000015): LDR SB, MT, MOD0 [EBNF]
00B7r(90D00068): LDR R0, SB, 68H [data]
00B8s(E900000C): BNE 12 [00C5H]
00B9t .FIXUP D
00B9t(8D000003): LDR SB, MT, MOD0 [EBNF]
00BAt(90D0003C): LDR R0, SB, 3CH [data]
00BBt(40090020): SUB R0, R0, 20H
00BCu(EE000008): BGT 8 [00C5H]
00BDv .FIXUP D
00BDv(8D000004): LDR SB, MT, MOD0 [EBNF]
00BEv(40D80068): ADD R0, SB, 68H [data]
00BFv .FIXUP D
00BFv(8D100002): LDR SB, MT, MOD1 [Texts]
00C0v(41D80002): ADD R1, SB, VAR2
00C1w .FIXUP D
00C1w(8D000002): LDR SB, MT, MOD0 [EBNF]
00C2w(42D8003C): ADD R2, SB, 3CH [data]
00C3x .FIXUP P
00C3x(F711307C): BL MOD1 [Texts] PROC19
00C4x(E7FFFFF1): B -15 [00B6H]
IF (ch >= "a")y & (zch <= "z")a OR (bch >= "A")c & (dch <= "Z")e THENf
00C5y .FIXUP D
00C5y(8D000004): LDR SB, MT, MOD0 [EBNF]
00C6y(90D0003C): LDR R0, SB, 3CH [data]
00C7y(40090061): SUB R0, R0, 61H
00C8z(E5000004): BLT 4 [00CDH]
00C9a .FIXUP D
00C9a(8D000004): LDR SB, MT, MOD0 [EBNF]
00CAa(90D0003C): LDR R0, SB, 3CH [data]
00CBa(4009007A): SUB R0, R0, 7AH
00CCb(E6000008): BLE 8 [00D5H]
00CDc .FIXUP D
00CDc(8D000004): LDR SB, MT, MOD0 [EBNF]
00CEc(90D0003C): LDR R0, SB, 3CH [data]
00CFc(40090041): SUB R0, R0, 41H
00D0d(E5000035): BLT 53 [0106H]
00D1e .FIXUP D
00D1e(8D000004): LDR SB, MT, MOD0 [EBNF]
00D2e(90D0003C): LDR R0, SB, 3CH [data]
00D3e(4009005A): SUB R0, R0, 5AH
00D4f(EE000031): BGT 49 [0106H]
sym := ident;g i := 0;h
00D5g(40000000): MOV R0, R0, 0H
00D6g .FIXUP D
00D6g(8D000005): LDR SB, MT, MOD0 [EBNF]
00D7g(A0D00040): STR R0, SB, 40H [data]
00D8h(40000000): MOV R0, R0, 0H
00D9h(A0E00004): STR R0, SP, 4H
REPEAT
IF i < IdLen-1 THENi id[i]j := ch;k INC(i) ENDl ;
00DAi(80E00004): LDR R0, SP, 4H
00DBi(4009000F): SUB R0, R0, FH
00DCi(ED00000A): BGE 10 [00E7H]
00DDj(80E00004): LDR R0, SP, 4H
00DEj(41090010): SUB R1, R0, 10H
00DFj(DA08251C): BLCC MT [trap=1, pos=2085]
00E0j .FIXUP D
00E0j(8D00000A): LDR SB, MT, MOD0 [EBNF]
00E1j(00D80000): ADD R0, SB, R0 [global array]
00E2k(91D0003C): LDR R1, SB, 3CH
00E3k(B1000050): STR R1, R0, 50H
00E4l(80E00004): LDR R0, SP, 4H
00E5l(40080001): ADD R0, R0, 1H
00E6l(A0E00004): STR R0, SP, 4H
Texts.Read(R,m ch)n
00E7m .FIXUP D
00E7m(8D000007): LDR SB, MT, MOD0 [EBNF]
00E8m(40D80068): ADD R0, SB, 68H [data]
00E9m .FIXUP D
00E9m(8D100002): LDR SB, MT, MOD1 [Texts]
00EAm(41D80002): ADD R1, SB, VAR2
00EBn .FIXUP D
00EBn(8D000002): LDR SB, MT, MOD0 [EBNF]
00ECn(42D8003C): ADD R2, SB, 3CH [data]
UNTILo ~((ch >= "a")p & (qch <= "z")r OR (sch >= "A")t & (uch <= "Z")v);w
00EDo .FIXUP P
00EDo(F711302A): BL MOD1 [Texts] PROC19
00EEp .FIXUP D
00EEp(8D000003): LDR SB, MT, MOD0 [EBNF]
00EFp(90D0003C): LDR R0, SB, 3CH [data]
00F0p(40090061): SUB R0, R0, 61H
00F1q(E5000004): BLT 4 [00F6H]
00F2r .FIXUP D
00F2r(8D000004): LDR SB, MT, MOD0 [EBNF]
00F3r(90D0003C): LDR R0, SB, 3CH [data]
00F4r(4009007A): SUB R0, R0, 7AH
00F5s(E6FFFFE4): BLE -28 [00DAH]
00F6t .FIXUP D
00F6t(8D000004): LDR SB, MT, MOD0 [EBNF]
00F7t(90D0003C): LDR R0, SB, 3CH [data]
00F8t(40090041): SUB R0, R0, 41H
00F9u(E5000004): BLT 4 [00FEH]
00FAv .FIXUP D
00FAv(8D000004): LDR SB, MT, MOD0 [EBNF]
00FBv(90D0003C): LDR R0, SB, 3CH [data]
00FCv(4009005A): SUB R0, R0, 5AH
00FDw(E6FFFFDC): BLE -36 [00DAH]
id[i]x := 0X
00FEx(80E00004): LDR R0, SP, 4H
00FFx(41090010): SUB R1, R0, 10H
0100x(DA08A61C): BLCC MT [trap=1, pos=2214]
0101x .FIXUP D
0101x(8D000007): LDR SB, MT, MOD0 [EBNF]
0102x(00D80000): ADD R0, SB, R0 [global array]
ELSEy
0103y(41000000): MOV R1, R0, 0H
0104y(B1000050): STR R1, R0, 50H
IFz ch = 22X THENa
0105z(E700008C): B 140 [0192H]
0106a .FIXUP D
0106a(8D000005): LDR SB, MT, MOD0 [EBNF]
0107a(90D0003C): LDR R0, SB, 3CH [data]
0108a(40090022): SUB R0, R0, 22H
0109a(E9000036): BNE 54 [0140H]
Texts.Read(R,b ch)c;d sym := literal;e i := 0;f
010Ab .FIXUP D
010Ab(8D000004): LDR SB, MT, MOD0 [EBNF]
010Bb(40D80068): ADD R0, SB, 68H [data]
010Cb .FIXUP D
010Cb(8D100002): LDR SB, MT, MOD1 [Texts]
010Db(41D80002): ADD R1, SB, VAR2
010Ec .FIXUP D
010Ec(8D000002): LDR SB, MT, MOD0 [EBNF]
010Fc(42D8003C): ADD R2, SB, 3CH [data]
0110d .FIXUP P
0110d(F7113023): BL MOD1 [Texts] PROC19
0111e(40000002): MOV R0, R0, 2H
0112e .FIXUP D
0112e(8D000004): LDR SB, MT, MOD0 [EBNF]
0113e(A0D00040): STR R0, SB, 40H [data]
0114f(40000000): MOV R0, R0, 0H
0115f(A0E00004): STR R0, SP, 4H
REPEAT (*at least one char*)
IF i < IdLen-1 THENg id[i]h := ch;i INC(i) ENDj ;
0116g(80E00004): LDR R0, SP, 4H
0117g(4009000F): SUB R0, R0, FH
0118g(ED00000A): BGE 10 [0123H]
0119h(80E00004): LDR R0, SP, 4H
011Ah(41090010): SUB R1, R0, 10H
011Bh(DA09481C): BLCC MT [trap=1, pos=2376]
011Ch .FIXUP D
011Ch(8D00000A): LDR SB, MT, MOD0 [EBNF]
011Dh(00D80000): ADD R0, SB, R0 [global array]
011Ei(91D0003C): LDR R1, SB, 3CH
011Fi(B1000050): STR R1, R0, 50H
0120j(80E00004): LDR R0, SP, 4H
0121j(40080001): ADD R0, R0, 1H
0122j(A0E00004): STR R0, SP, 4H
Texts.Read(R,k ch)l
0123k .FIXUP D
0123k(8D000007): LDR SB, MT, MOD0 [EBNF]
0124k(40D80068): ADD R0, SB, 68H [data]
0125k .FIXUP D
0125k(8D100002): LDR SB, MT, MOD1 [Texts]
0126k(41D80002): ADD R1, SB, VAR2
0127l .FIXUP D
0127l(8D000002): LDR SB, MT, MOD0 [EBNF]
0128l(42D8003C): ADD R2, SB, 3CH [data]
UNTILm (ch = 22X)n OR (och <= " ")p;q
0129m .FIXUP P
0129m(F7113019): BL MOD1 [Texts] PROC19
012An .FIXUP D
012An(8D000003): LDR SB, MT, MOD0 [EBNF]
012Bn(90D0003C): LDR R0, SB, 3CH [data]
012Cn(40090022): SUB R0, R0, 22H
012Do(E1000004): BEQ 4 [0132H]
012Ep .FIXUP D
012Ep(8D000004): LDR SB, MT, MOD0 [EBNF]
012Fp(90D0003C): LDR R0, SB, 3CH [data]
0130p(40090020): SUB R0, R0, 20H
0131q(EEFFFFE4): BGT -28 [0116H]
IF ch <= " " THENr error(1)s ENDt ;
0132r .FIXUP D
0132r(8D000004): LDR SB, MT, MOD0 [EBNF]
0133r(90D0003C): LDR R0, SB, 3CH [data]
0134r(40090020): SUB R0, R0, 20H
0135r(EE000002): BGT 2 [0138H]
0136s(40000001): MOV R0, R0, 1H
0137t(F7FFFEC8): BL -312 [0000H]
id[i]u := 0X
0138u(80E00004): LDR R0, SP, 4H
0139u(41090010): SUB R1, R0, 10H
013Au(DA09D81C): BLCC MT [trap=1, pos=2520]
013Bu .FIXUP D
013Bu(8D000009): LDR SB, MT, MOD0 [EBNF]
013Cu(00D80000): ADD R0, SB, R0 [global array]
ELSIFv chw = "=" THENx sym := eql
013Dv(41000000): MOV R1, R0, 0H
013Ev(B1000050): STR R1, R0, 50H
013Fw(E700004B): B 75 [018BH]
0140x .FIXUP D
0140x(8D000005): LDR SB, MT, MOD0 [EBNF]
0141x(90D0003C): LDR R0, SB, 3CH [data]
0142x(4009003D): SUB R0, R0, 3DH
0143x(E9000004): BNE 4 [0148H]
ELSIFy chz = "(" THENa sym := lparen
0144y(40000007): MOV R0, R0, 7H
0145y .FIXUP D
0145y(8D000005): LDR SB, MT, MOD0 [EBNF]
0146y(A0D00040): STR R0, SB, 40H [data]
0147z(E7000043): B 67 [018BH]
0148a .FIXUP D
0148a(8D000003): LDR SB, MT, MOD0 [EBNF]
0149a(90D0003C): LDR R0, SB, 3CH [data]
014Aa(40090028): SUB R0, R0, 28H
014Ba(E9000004): BNE 4 [0150H]
ELSIFb chc = ")" THENd sym := rparen
014Cb(40000003): MOV R0, R0, 3H
014Db .FIXUP D
014Db(8D000005): LDR SB, MT, MOD0 [EBNF]
014Eb(A0D00040): STR R0, SB, 40H [data]
014Fc(E700003B): B 59 [018BH]
0150d .FIXUP D
0150d(8D000003): LDR SB, MT, MOD0 [EBNF]
0151d(90D0003C): LDR R0, SB, 3CH [data]
0152d(40090029): SUB R0, R0, 29H
0153d(E9000004): BNE 4 [0158H]
ELSIFe chf = "[" THENg sym := lbrak
0154e(40000008): MOV R0, R0, 8H
0155e .FIXUP D
0155e(8D000005): LDR SB, MT, MOD0 [EBNF]
0156e(A0D00040): STR R0, SB, 40H [data]
0157f(E7000033): B 51 [018BH]
0158g .FIXUP D
0158g(8D000003): LDR SB, MT, MOD0 [EBNF]
0159g(90D0003C): LDR R0, SB, 3CH [data]
015Ag(4009005B): SUB R0, R0, 5BH
015Bg(E9000004): BNE 4 [0160H]
ELSIFh chi = "]" THENj sym := rbrak
015Ch(40000004): MOV R0, R0, 4H
015Dh .FIXUP D
015Dh(8D000005): LDR SB, MT, MOD0 [EBNF]
015Eh(A0D00040): STR R0, SB, 40H [data]
015Fi(E700002B): B 43 [018BH]
0160j .FIXUP D
0160j(8D000003): LDR SB, MT, MOD0 [EBNF]
0161j(90D0003C): LDR R0, SB, 3CH [data]
0162j(4009005D): SUB R0, R0, 5DH
0163j(E9000004): BNE 4 [0168H]
ELSIFk chl = "{" THENm sym := lbrace
0164k(40000009): MOV R0, R0, 9H
0165k .FIXUP D
0165k(8D000005): LDR SB, MT, MOD0 [EBNF]
0166k(A0D00040): STR R0, SB, 40H [data]
0167l(E7000023): B 35 [018BH]
0168m .FIXUP D
0168m(8D000003): LDR SB, MT, MOD0 [EBNF]
0169m(90D0003C): LDR R0, SB, 3CH [data]
016Am(4009007B): SUB R0, R0, 7BH
016Bm(E9000004): BNE 4 [0170H]
ELSIFn cho = "}" THENp sym := rbrace
016Cn(40000005): MOV R0, R0, 5H
016Dn .FIXUP D
016Dn(8D000005): LDR SB, MT, MOD0 [EBNF]
016En(A0D00040): STR R0, SB, 40H [data]
016Fo(E700001B): B 27 [018BH]
0170p .FIXUP D
0170p(8D000003): LDR SB, MT, MOD0 [EBNF]
0171p(90D0003C): LDR R0, SB, 3CH [data]
0172p(4009007D): SUB R0, R0, 7DH
0173p(E9000004): BNE 4 [0178H]
ELSIFq chr = "|" THENs sym := bar
0174q(4000000A): MOV R0, R0, AH
0175q .FIXUP D
0175q(8D000005): LDR SB, MT, MOD0 [EBNF]
0176q(A0D00040): STR R0, SB, 40H [data]
0177r(E7000013): B 19 [018BH]
0178s .FIXUP D
0178s(8D000003): LDR SB, MT, MOD0 [EBNF]
0179s(90D0003C): LDR R0, SB, 3CH [data]
017As(4009007C): SUB R0, R0, 7CH
017Bs(E9000004): BNE 4 [0180H]
ELSIFt chu = "." THENv sym := period
017Ct(40000006): MOV R0, R0, 6H
017Dt .FIXUP D
017Dt(8D000005): LDR SB, MT, MOD0 [EBNF]
017Et(A0D00040): STR R0, SB, 40H [data]
017Fu(E700000B): B 11 [018BH]
0180v .FIXUP D
0180v(8D000003): LDR SB, MT, MOD0 [EBNF]
0181v(90D0003C): LDR R0, SB, 3CH [data]
0182v(4009002E): SUB R0, R0, 2EH
0183v(E9000004): BNE 4 [0188H]
ELSEw symx := other
0184w(4000000B): MOV R0, R0, BH
0185w .FIXUP D
0185w(8D000005): LDR SB, MT, MOD0 [EBNF]
0186w(A0D00040): STR R0, SB, 40H [data]
0187x(E7000003): B 3 [018BH]
ENDy ;
0188y(4000000C): MOV R0, R0, CH
0189y .FIXUP D
0189y(8D000004): LDR SB, MT, MOD0 [EBNF]
018Ay(A0D00040): STR R0, SB, 40H [data]
Texts.Read(R,z ch)a
018Bz .FIXUP D
018Bz(8D000002): LDR SB, MT, MOD0 [EBNF]
018Cz(40D80068): ADD R0, SB, 68H [data]
018Dz .FIXUP D
018Dz(8D100002): LDR SB, MT, MOD1 [Texts]
018Ez(41D80002): ADD R1, SB, VAR2
018Fa .FIXUP D
018Fa(8D000002): LDR SB, MT, MOD0 [EBNF]
0190a(42D8003C): ADD R2, SB, 3CH [data]
ENDb
0191b .FIXUP P
0191b(F7113068): BL MOD1 [Texts] PROC19
ENDc GetSym;
0192c(8FE00000): LDR LNK, SP, 0H
0193c(4EE80008): ADD SP, SP, 8H
0194c(C700000F): B LNK
(*-------------------- parser ---------------------*)
PROCEDURE expression(VAR x: Item);
VAR y: Item;
PROCEDUREd term(VAR x: Item);
0195d(E7000071): B 113 [0207H]
VAR y: Item;
PROCEDUREe factor(VAR x: Item);
0196e(E700005B): B 91 [01F2H]
VAR y: Item;
BEGINf
0197f(4EE9000C): SUB SP, SP, CH
0198f(AFE00000): STR LNK, SP, 0H
0199f(A0E00004): STR R0, SP, 4H
IF sym = literal THENg x := This(id,h 0)i;j GetSym
019Ag .FIXUP D
019Ag(8D00000B): LDR SB, MT, MOD0 [EBNF]
019Bg(80D00040): LDR R0, SB, 40H [data]
019Cg(40090002): SUB R0, R0, 2H
019Dg(E9000008): BNE 8 [01A6H]
019Eh .FIXUP D
019Eh(8D000004): LDR SB, MT, MOD0 [EBNF]
019Fh(40D80050): ADD R0, SB, 50H [data]
01A0i(41000000): MOV R1, R0, 0H
01A1j(F7FFFEA9): BL -343 [004BH]
01A2j(81E00004): LDR R1, SP, 4H
01A3j(A0100000): STR R0, R1, 0H
ELSIFk syml = ident THENm x := This(id,n 1)o;p GetSym
01A4k(F7FFFF0F): BL -241 [00B4H]
01A5l(E7000049): B 73 [01EFH]
01A6m .FIXUP D
01A6m(8D000008): LDR SB, MT, MOD0 [EBNF]
01A7m(80D00040): LDR R0, SB, 40H [data]
01A8m(E9000008): BNE 8 [01B1H]
01A9n .FIXUP D
01A9n(8D000003): LDR SB, MT, MOD0 [EBNF]
01AAn(40D80050): ADD R0, SB, 50H [data]
01ABo(41000001): MOV R1, R0, 1H
01ACp(F7FFFE9E): BL -354 [004BH]
01ADp(81E00004): LDR R1, SP, 4H
01AEp(A0100000): STR R0, R1, 0H
ELSIFq symr = lparen THENs
01AFq(F7FFFF04): BL -252 [00B4H]
01B0r(E700003E): B 62 [01EFH]
01B1s .FIXUP D
01B1s(8D000008): LDR SB, MT, MOD0 [EBNF]
01B2s(80D00040): LDR R0, SB, 40H [data]
01B3s(40090003): SUB R0, R0, 3H
01B4s(E900000C): BNE 12 [01C1H]
GetSym;t expression(x)u;v
01B5t(F7FFFEFE): BL -258 [00B4H]
01B6u(80E00004): LDR R0, SP, 4H
01B7v(F7FFFFDD): BL -35 [0195H]
IF sym = rparen THENw GetSym ELSEx errory(2)z ENDa
01B8w .FIXUP D
01B8w(8D000007): LDR SB, MT, MOD0 [EBNF]
01B9w(80D00040): LDR R0, SB, 40H [data]
01BAw(40090008): SUB R0, R0, 8H
01BBw(E9000002): BNE 2 [01BEH]
01BCx(F7FFFEF7): BL -265 [00B4H]
01BDy(E7000002): B 2 [01C0H]
01BEz(40000002): MOV R0, R0, 2H
01BFa(F7FFFE40): BL -448 [0000H]
ELSIF symb = lbrak THENc
01C0b(E700002E): B 46 [01EFH]
01C1c .FIXUP D
01C1c(8D000009): LDR SB, MT, MOD0 [EBNF]
01C2c(80D00040): LDR R0, SB, 40H [data]
01C3c(40090004): SUB R0, R0, 4H
01C4c(E9000012): BNE 18 [01D7H]
GetSym;d expression(y)e;f x := New(2,g NIL,h y)i;j
01C5d(F7FFFEEE): BL -274 [00B4H]
01C6e(40E80008): ADD R0, SP, 8H
01C7f(F7FFFFCD): BL -51 [0195H]
01C8g(40000002): MOV R0, R0, 2H
01C9h(41000000): MOV R1, R0, 0H
01CAi(82E00008): LDR R2, SP, 8H
01CBj(F7FFFECF): BL -305 [009BH]
01CCj(81E00004): LDR R1, SP, 4H
01CDj(A0100000): STR R0, R1, 0H
IF sym = rbrak THENk GetSym ELSEl errorm(3)n ENDo
01CEk .FIXUP D
01CEk(8D00000D): LDR SB, MT, MOD0 [EBNF]
01CFk(80D00040): LDR R0, SB, 40H [data]
01D0k(40090009): SUB R0, R0, 9H
01D1k(E9000002): BNE 2 [01D4H]
01D2l(F7FFFEE1): BL -287 [00B4H]
01D3m(E7000002): B 2 [01D6H]
01D4n(40000003): MOV R0, R0, 3H
01D5o(F7FFFE2A): BL -470 [0000H]
ELSIF symp = lbrace THENq
01D6p(E7000018): B 24 [01EFH]
01D7q .FIXUP D
01D7q(8D000009): LDR SB, MT, MOD0 [EBNF]
01D8q(80D00040): LDR R0, SB, 40H [data]
01D9q(40090005): SUB R0, R0, 5H
01DAq(E9000012): BNE 18 [01EDH]
GetSym;r expression(y)s;t x := New(3,u NIL,v y)w;x
01DBr(F7FFFED8): BL -296 [00B4H]
01DCs(40E80008): ADD R0, SP, 8H
01DDt(F7FFFFB7): BL -73 [0195H]
01DEu(40000003): MOV R0, R0, 3H
01DFv(41000000): MOV R1, R0, 0H
01E0w(82E00008): LDR R2, SP, 8H
01E1x(F7FFFEB9): BL -327 [009BH]
01E2x(81E00004): LDR R1, SP, 4H
01E3x(A0100000): STR R0, R1, 0H
IF sym = rbrace THENy GetSym ELSEz errora(4)b ENDc
01E4y .FIXUP D
01E4y(8D00000D): LDR SB, MT, MOD0 [EBNF]
01E5y(80D00040): LDR R0, SB, 40H [data]
01E6y(4009000A): SUB R0, R0, AH
01E7y(E9000002): BNE 2 [01EAH]
01E8z(F7FFFECB): BL -309 [00B4H]
01E9a(E7000002): B 2 [01ECH]
01EAb(40000004): MOV R0, R0, 4H
01EBc(F7FFFE14): BL -492 [0000H]
ELSE errord(5)e
01ECd(E7000002): B 2 [01EFH]
01EDe(40000005): MOV R0, R0, 5H
ENDf
01EEf(F7FFFE11): BL -495 [0000H]
ENDg factor;
01EFg(8FE00000): LDR LNK, SP, 0H
01F0g(4EE8000C): ADD SP, SP, CH
01F1g(C700000F): B LNK
BEGINh (*term*) factor(x)i;j
01F2h(4EE9000C): SUB SP, SP, CH
01F3h(AFE00000): STR LNK, SP, 0H
01F4h(A0E00004): STR R0, SP, 4H
01F5i(80E00004): LDR R0, SP, 4H
01F6j(F7FFFFA0): BL -96 [0197H]
IF sym < bar THENk term(y)l;m x := New(4,n x,o y)p ENDq
01F7k .FIXUP D
01F7k(8D000013): LDR SB, MT, MOD0 [EBNF]
01F8k(80D00040): LDR R0, SB, 40H [data]
01F9k(40090006): SUB R0, R0, 6H
01FAk(ED000009): BGE 9 [0204H]
01FBl(40E80008): ADD R0, SP, 8H
01FCm(F7FFFFF5): BL -11 [01F2H]
01FDn(40000004): MOV R0, R0, 4H
01FEo(81E00004): LDR R1, SP, 4H
01FFo(81100000): LDR R1, R1, 0H
0200p(82E00008): LDR R2, SP, 8H
0201q(F7FFFE99): BL -359 [009BH]
0202q(81E00004): LDR R1, SP, 4H
0203q(A0100000): STR R0, R1, 0H
ENDr term;
0204r(8FE00000): LDR LNK, SP, 0H
0205r(4EE8000C): ADD SP, SP, CH
0206r(C700000F): B LNK
BEGINs (*expression*) term(x)t;u
0207s(4EE9000C): SUB SP, SP, CH
0208s(AFE00000): STR LNK, SP, 0H
0209s(A0E00004): STR R0, SP, 4H
020At(80E00004): LDR R0, SP, 4H
020Bu(F7FFFFE6): BL -26 [01F2H]
IF sym = bar THENv GetSym;w expression(y)x;y x := New(5,z x,a y)b ENDc
020Cv .FIXUP D
020Cv(8D000015): LDR SB, MT, MOD0 [EBNF]
020Dv(80D00040): LDR R0, SB, 40H [data]
020Ev(40090006): SUB R0, R0, 6H
020Fv(E900000A): BNE 10 [021AH]
0210w(F7FFFEA3): BL -349 [00B4H]
0211x(40E80008): ADD R0, SP, 8H
0212y(F7FFFFF4): BL -12 [0207H]
0213z(40000005): MOV R0, R0, 5H
0214a(81E00004): LDR R1, SP, 4H
0215a(81100000): LDR R1, R1, 0H
0216b(82E00008): LDR R2, SP, 8H
0217c(F7FFFE83): BL -381 [009BH]
0218c(81E00004): LDR R1, SP, 4H
0219c(A0100000): STR R0, R1, 0H
ENDd expression;
021Ad(8FE00000): LDR LNK, SP, 0H
021Bd(4EE8000C): ADD SP, SP, CH
021Cd(C700000F): B LNK
PROCEDURE production;
VAR s: Symbol;
BEGINe (*sym = ident*)
021De(4EE90008): SUB SP, SP, 8H
021Ee(AFE00000): STR LNK, SP, 0H
s := This(id,f 1)g;h GetSym;i
021Ff .FIXUP D
021Ff(8D000013): LDR SB, MT, MOD0 [EBNF]
0220f(40D80050): ADD R0, SB, 50H [data]
0221g(41000001): MOV R1, R0, 1H
0222h(F7FFFE28): BL -472 [004BH]
0223h(A0E00004): STR R0, SP, 4H
0224i(F7FFFE8F): BL -369 [00B4H]
IF sym = eql THENj GetSym ELSEk errorl(7)m ENDn ;
0225j .FIXUP D
0225j(8D000006): LDR SB, MT, MOD0 [EBNF]
0226j(80D00040): LDR R0, SB, 40H [data]
0227j(40090007): SUB R0, R0, 7H
0228j(E9000002): BNE 2 [022BH]
0229k(F7FFFE8A): BL -374 [00B4H]
022Al(E7000002): B 2 [022DH]
022Bm(40000007): MOV R0, R0, 7H
022Cn(F7FFFDD3): BL -557 [0000H]
expression(s.vo)p;q
022Do(80E00004): LDR R0, SP, 4H
022Eo(D110324C): BLEQ MT [trap=4, pos=4146]
022Fp(40080010): ADD R0, R0, 10H
0230q(F7FFFFD6): BL -42 [0207H]
IF sym = period THENr GetSym ELSEs errort(8)u ENDv
0231r .FIXUP D
0231r(8D00000C): LDR SB, MT, MOD0 [EBNF]
0232r(80D00040): LDR R0, SB, 40H [data]
0233r(4009000B): SUB R0, R0, BH
0234r(E9000002): BNE 2 [0237H]
0235s(F7FFFE7E): BL -386 [00B4H]
0236t(E7000002): B 2 [0239H]
0237u(40000008): MOV R0, R0, 8H
0238v(F7FFFDC7): BL -569 [0000H]
ENDw production;
0239w(8FE00000): LDR LNK, SP, 0H
023Aw(4EE80008): ADD SP, SP, 8H
023Bw(C700000F): B LNK
PROCEDURE syntax(T: Texts.Text; pos: LONGINT);
BEGINx Texts.OpenReader(R,y T,z pos)a;b Texts.Read(R,c ch)d;e
023Cx(4EE9000C): SUB SP, SP, CH
023Dx(AFE00000): STR LNK, SP, 0H
023Ex(A0E00004): STR R0, SP, 4H
023Fx(A1E00008): STR R1, SP, 8H
0240y .FIXUP D
0240y(8D00000F): LDR SB, MT, MOD0 [EBNF]
0241y(40D80068): ADD R0, SB, 68H [data]
0242y .FIXUP D
0242y(8D100002): LDR SB, MT, MOD1 [Texts]
0243y(41D80002): ADD R1, SB, VAR2
0244z(82E00004): LDR R2, SP, 4H
0245a(83E00008): LDR R3, SP, 8H
0246b .FIXUP P
0246b(F71120B5): BL MOD1 [Texts] PROC18
0247c .FIXUP D
0247c(8D000005): LDR SB, MT, MOD0 [EBNF]
0248c(40D80068): ADD R0, SB, 68H [data]
0249c .FIXUP D
0249c(8D100002): LDR SB, MT, MOD1 [Texts]
024Ac(41D80002): ADD R1, SB, VAR2
024Bd .FIXUP D
024Bd(8D000002): LDR SB, MT, MOD0 [EBNF]
024Cd(42D8003C): ADD R2, SB, 3CH [data]
024De .FIXUP P
024De(F7113007): BL MOD1 [Texts] PROC19
tsno := 0;f ntsno := 0;g lastpos := 0;h GetSym;i
024Ef(40000000): MOV R0, R0, 0H
024Ff .FIXUP D
024Ff(8D000004): LDR SB, MT, MOD0 [EBNF]
0250f(A0D00048): STR R0, SB, 48H [data]
0251g(40000000): MOV R0, R0, 0H
0252g(A0D0004C): STR R0, SB, 4CH
0253h(40000000): MOV R0, R0, 0H
0254h(A0D00044): STR R0, SB, 44H
0255i(F7FFFE5E): BL -418 [00B4H]
WHILE sym = ident DOj production ENDk ;
0256j .FIXUP D
0256j(8D000007): LDR SB, MT, MOD0 [EBNF]
0257j(80D00040): LDR R0, SB, 40H [data]
0258j(E9000002): BNE 2 [025BH]
0259k(F7FFFFC3): BL -61 [021DH]
025Ak(E7FFFFFB): B -5 [0256H]
Texts.WriteString(W,l "compiled")m;n Texts.WriteLn(W)o;p Texts.Append(Oberon.Log,q W.buf)r
025Bl .FIXUP D
025Bl(8D000005): LDR SB, MT, MOD0 [EBNF]
025Cl(40D8009C): ADD R0, SB, 9CH [data]
025Dl .FIXUP D
025Dl(8D100002): LDR SB, MT, MOD1 [Texts]
025El(41D80005): ADD R1, SB, VAR5
025Fm .FIXUP D
025Fm(8D000002): LDR SB, MT, MOD0 [EBNF]
0260m(42D800DC): ADD R2, SB, DCH ["compiled"]
0261m(43000009): MOV R3, R0, 9H
0262n .FIXUP P
0262n(F711D015): BL MOD1 [Texts] PROC29
0263o .FIXUP D
0263o(8D000004): LDR SB, MT, MOD0 [EBNF]
0264o(40D8009C): ADD R0, SB, 9CH [data]
0265o .FIXUP D
0265o(8D100002): LDR SB, MT, MOD1 [Texts]
0266o(41D80005): ADD R1, SB, VAR5
0267p .FIXUP P
0267p(F711C005): BL MOD1 [Texts] PROC28
0268q .FIXUP D
0268q(8D400003): LDR SB, MT, MOD4 [Oberon]
0269q(80D0000D): LDR R0, SB, VAR13
026Ar .FIXUP D
026Ar(8D000002): LDR SB, MT, MOD0 [EBNF]
026Br(81D0009C): LDR R1, SB, 9CH [data]
ENDs syntax;
026Cs .FIXUP P
026Cs(F710E005): BL MOD1 [Texts] PROC14
026Ds(8FE00000): LDR LNK, SP, 0H
026Es(4EE8000C): ADD SP, SP, CH
026Fs(C700000F): B LNK
PROCEDURE Compile*;
VAR beg, end, time: LONGINT;
T: Texts.Text;
S: Texts.Scanner;
BEGINt root := NIL;u
0270t .PROC 1
0270t .COMMAND Compile
0270t(4EE90088): SUB SP, SP, 88H
0271t(AFE00000): STR LNK, SP, 0H
0272u(40000000): MOV R0, R0, 0H
0273u .FIXUP D
0273u(8D000009): LDR SB, MT, MOD0 [EBNF]
0274u(A0D00060): STR R0, SB, 60H [data]
Texts.OpenScanner(S,v Oberon.Par.text,w Oberon.Par.pos)x;y Texts.Scan(S)z;a
0275v(40E80014): ADD R0, SP, 14H
0276v .FIXUP D
0276v(8D100003): LDR SB, MT, MOD1 [Texts]
0277v(41D80003): ADD R1, SB, VAR3
0278w .FIXUP D
0278w(8D400002): LDR SB, MT, MOD4 [Oberon]
0279w(42D8000E): ADD R2, SB, VAR14
027Aw(82200008): LDR R2, R2, 8H
027Bx .FIXUP D
027Bx(8D400003): LDR SB, MT, MOD4 [Oberon]
027Cx(43D8000E): ADD R3, SB, VAR14
027Dx(8330000C): LDR R3, R3, CH
027Ey .FIXUP P
027Ey(F7115012): BL MOD1 [Texts] PROC21
027Fz(40E80014): ADD R0, SP, 14H
0280z .FIXUP D
0280z(8D100005): LDR SB, MT, MOD1 [Texts]
0281z(41D80003): ADD R1, SB, VAR3
0282a .FIXUP P
0282a(F7116004): BL MOD1 [Texts] PROC22
IF (S.class = Texts.Char)b & (cS.c = "@")d THENe
0283b(80E00050): LDR R0, SP, 50H
0284b(40090006): SUB R0, R0, 6H
0285c(E900000E): BNE 14 [0294H]
0286d(90E00060): LDR R0, SP, 60H
0287d(40090040): SUB R0, R0, 40H
0288e(E900000B): BNE 11 [0294H]
Oberon.GetSelection(T,f beg,g end,h time)i;j
0289f(40E80010): ADD R0, SP, 10H
028Ag(41E80004): ADD R1, SP, 4H
028Bh(42E80008): ADD R2, SP, 8H
028Ci(43E8000C): ADD R3, SP, CH
028Dj .FIXUP P
028Dj(F742900B): BL MOD4 [Oberon] PROC41
IF time >= 0 THENk syntax(T,l beg)m ENDn
028Ek(80E0000C): LDR R0, SP, CH
028Fk(40090000): SUB R0, R0, 0H
0290k(E5000003): BLT 3 [0294H]
0291l(80E00010): LDR R0, SP, 10H
0292m(81E00004): LDR R1, SP, 4H
0293n(F7FFFFA8): BL -88 [023CH]
END
ENDo Compile;
0294o(8FE00000): LDR LNK, SP, 0H
0295o(4EE80088): ADD SP, SP, 88H
0296o(C700000F): B LNK
(*------------------ List symbols -------------------*)
PROCEDURE List*;
VAR s: Symbol;
BEGINp Texts.WriteString(W,q "Nonterminals:")r;s Texts.WriteLn(W)t;u s := root;v
0297p .PROC 2
0297p .COMMAND List
0297p(4EE90008): SUB SP, SP, 8H
0298p(AFE00000): STR LNK, SP, 0H
0299q .FIXUP D
0299q(8D000019): LDR SB, MT, MOD0 [EBNF]
029Aq(40D8009C): ADD R0, SB, 9CH [data]
029Bq .FIXUP D
029Bq(8D100002): LDR SB, MT, MOD1 [Texts]
029Cq(41D80005): ADD R1, SB, VAR5
029Dr .FIXUP D
029Dr(8D000002): LDR SB, MT, MOD0 [EBNF]
029Er(42D800E8): ADD R2, SB, E8H ["Nonterminals:"]
029Fr(4300000E): MOV R3, R0, EH
02A0s .FIXUP P
02A0s(F711D013): BL MOD1 [Texts] PROC29
02A1t .FIXUP D
02A1t(8D000004): LDR SB, MT, MOD0 [EBNF]
02A2t(40D8009C): ADD R0, SB, 9CH [data]
02A3t .FIXUP D
02A3t(8D100002): LDR SB, MT, MOD1 [Texts]
02A4t(41D80005): ADD R1, SB, VAR5
02A5u .FIXUP P
02A5u(F711C005): BL MOD1 [Texts] PROC28
02A6v .FIXUP D
02A6v(8D000003): LDR SB, MT, MOD0 [EBNF]
02A7v(80D00060): LDR R0, SB, 60H [data]
02A8v(A0E00004): STR R0, SP, 4H
WHILE s # NIL DOw
02A9w(80E00004): LDR R0, SP, 4H
02AAw(E100001E): BEQ 30 [02C9H]
IF s.tagx = 1 THENy Texts.Write(W,z 9X)a;b Texts.WriteString(W,c s.idd)e;f Texts.WriteLn(W)g ENDh ;
02ABx(80E00004): LDR R0, SP, 4H
02ACx(D113DB4C): BLEQ MT [trap=4, pos=5083]
02ADy(80000000): LDR R0, R0, 0H
02AEy(40090001): SUB R0, R0, 1H
02AFy(E9000014): BNE 20 [02C4H]
02B0z .FIXUP D
02B0z(8D00000A): LDR SB, MT, MOD0 [EBNF]
02B1z(40D8009C): ADD R0, SB, 9CH [data]
02B2z .FIXUP D
02B2z(8D100002): LDR SB, MT, MOD1 [Texts]
02B3z(41D80005): ADD R1, SB, VAR5
02B4a(42000009): MOV R2, R0, 9H
02B5b .FIXUP P
02B5b(F711B010): BL MOD1 [Texts] PROC27
02B6c .FIXUP D
02B6c(8D000004): LDR SB, MT, MOD0 [EBNF]
02B7c(40D8009C): ADD R0, SB, 9CH [data]
02B8c .FIXUP D
02B8c(8D100002): LDR SB, MT, MOD1 [Texts]
02B9c(41D80005): ADD R1, SB, VAR5
02BAd(82E00004): LDR R2, SP, 4H
02BBd(D114124C): BLEQ MT [trap=4, pos=5138]
02BCe(42280014): ADD R2, R2, 14H
02BDe(43000010): MOV R3, R0, 10H
02BEf .FIXUP P
02BEf(F711D009): BL MOD1 [Texts] PROC29
02BFg .FIXUP D
02BFg(8D000007): LDR SB, MT, MOD0 [EBNF]
02C0g(40D8009C): ADD R0, SB, 9CH [data]
02C1g .FIXUP D
02C1g(8D100002): LDR SB, MT, MOD1 [Texts]
02C2g(41D80005): ADD R1, SB, VAR5
02C3h .FIXUP P
02C3h(F711C005): BL MOD1 [Texts] PROC28
s := s.nexti
02C4i(80E00004): LDR R0, SP, 4H
02C5i(D1143D4C): BLEQ MT [trap=4, pos=5181]
ENDj ;
02C6j(80000030): LDR R0, R0, 30H
02C7j(A0E00004): STR R0, SP, 4H
02C8j(E7FFFFE0): B -32 [02A9H]
Texts.WriteString(W,k "Terminals:")l;m Texts.WriteLn(W)n;o s := root;p
02C9k .FIXUP D
02C9k(8D000008): LDR SB, MT, MOD0 [EBNF]
02CAk(40D8009C): ADD R0, SB, 9CH [data]
02CBk .FIXUP D
02CBk(8D100002): LDR SB, MT, MOD1 [Texts]
02CCk(41D80005): ADD R1, SB, VAR5
02CDl .FIXUP D
02CDl(8D000002): LDR SB, MT, MOD0 [EBNF]
02CEl(42D800F8): ADD R2, SB, F8H ["Terminals:"]
02CFl(4300000B): MOV R3, R0, BH
02D0m .FIXUP P
02D0m(F711D00D): BL MOD1 [Texts] PROC29
02D1n .FIXUP D
02D1n(8D000004): LDR SB, MT, MOD0 [EBNF]
02D2n(40D8009C): ADD R0, SB, 9CH [data]
02D3n .FIXUP D
02D3n(8D100002): LDR SB, MT, MOD1 [Texts]
02D4n(41D80005): ADD R1, SB, VAR5
02D5o .FIXUP P
02D5o(F711C005): BL MOD1 [Texts] PROC28
02D6p .FIXUP D
02D6p(8D000003): LDR SB, MT, MOD0 [EBNF]
02D7p(80D00060): LDR R0, SB, 60H [data]
02D8p(A0E00004): STR R0, SP, 4H
WHILE s # NIL DOq
02D9q(80E00004): LDR R0, SP, 4H
02DAq(E100001D): BEQ 29 [02F8H]
IF s.tagr = 0 THENs Texts.Write(W,t 9X)u;v Texts.WriteString(W,w s.idx)y;z Texts.WriteLn(W)a ENDb ;
02DBr(80E00004): LDR R0, SP, 4H
02DCr(D114B04C): BLEQ MT [trap=4, pos=5296]
02DDs(80000000): LDR R0, R0, 0H
02DEs(E9000014): BNE 20 [02F3H]
02DFt .FIXUP D
02DFt(8D000009): LDR SB, MT, MOD0 [EBNF]
02E0t(40D8009C): ADD R0, SB, 9CH [data]
02E1t .FIXUP D
02E1t(8D100002): LDR SB, MT, MOD1 [Texts]
02E2t(41D80005): ADD R1, SB, VAR5
02E3u(42000009): MOV R2, R0, 9H
02E4v .FIXUP P
02E4v(F711B00F): BL MOD1 [Texts] PROC27
02E5w .FIXUP D
02E5w(8D000004): LDR SB, MT, MOD0 [EBNF]
02E6w(40D8009C): ADD R0, SB, 9CH [data]
02E7w .FIXUP D
02E7w(8D100002): LDR SB, MT, MOD1 [Texts]
02E8w(41D80005): ADD R1, SB, VAR5
02E9x(82E00004): LDR R2, SP, 4H
02EAx(D114E74C): BLEQ MT [trap=4, pos=5351]
02EBy(42280014): ADD R2, R2, 14H
02ECy(43000010): MOV R3, R0, 10H
02EDz .FIXUP P
02EDz(F711D009): BL MOD1 [Texts] PROC29
02EEa .FIXUP D
02EEa(8D000007): LDR SB, MT, MOD0 [EBNF]
02EFa(40D8009C): ADD R0, SB, 9CH [data]
02F0a .FIXUP D
02F0a(8D100002): LDR SB, MT, MOD1 [Texts]
02F1a(41D80005): ADD R1, SB, VAR5
02F2b .FIXUP P
02F2b(F711C005): BL MOD1 [Texts] PROC28
s := s.nextc
02F3c(80E00004): LDR R0, SP, 4H
02F4c(D115124C): BLEQ MT [trap=4, pos=5394]
ENDd ;
02F5d(80000030): LDR R0, R0, 30H
02F6d(A0E00004): STR R0, SP, 4H
02F7d(E7FFFFE1): B -31 [02D9H]
Texts.Append(Oberon.Log,e W.buf)f
02F8e .FIXUP D
02F8e(8D400008): LDR SB, MT, MOD4 [Oberon]
02F9e(80D0000D): LDR R0, SB, VAR13
02FAf .FIXUP D
02FAf(8D000002): LDR SB, MT, MOD0 [EBNF]
02FBf(81D0009C): LDR R1, SB, 9CH [data]
ENDg List;
02FCg .FIXUP P
02FCg(F710E00A): BL MOD1 [Texts] PROC14
02FDg(8FE00000): LDR LNK, SP, 0H
02FEg(4EE80008): ADD SP, SP, 8H
02FFg(C700000F): B LNK
(*------------------ Tabulate syntax tree -------------------*)
PROCEDURE traverse(x: Item);
VAR t: INTEGER;
BEGINh
0300h(4EE9000C): SUB SP, SP, CH
0301h(AFE00000): STR LNK, SP, 0H
0302h(A0E00004): STR R0, SP, 4H
IF x # NIL THENi t := x.tagj;k
0303i(80E00004): LDR R0, SP, 4H
0304i(E1000075): BEQ 117 [037AH]
0305j(80E00004): LDR R0, SP, 4H
0306j(D115EA4C): BLEQ MT [trap=4, pos=5610]
0307k(80000000): LDR R0, R0, 0H
0308k(A0E00008): STR R0, SP, 8H
IF t = 0 THENl Texts.Write(W,m 22X)n;o Texts.WriteString(W,p x(Symbol)q.id)r;s Texts.Write(W,t 22X)u
0309l(80E00008): LDR R0, SP, 8H
030Al(E900001C): BNE 28 [0327H]
030Bm .FIXUP D
030Bm(8D000011): LDR SB, MT, MOD0 [EBNF]
030Cm(40D8009C): ADD R0, SB, 9CH [data]
030Dm .FIXUP D
030Dm(8D100002): LDR SB, MT, MOD1 [Texts]
030Em(41D80005): ADD R1, SB, VAR5
030Fn(42000022): MOV R2, R0, 22H
0310o .FIXUP P
0310o(F711B014): BL MOD1 [Texts] PROC27
0311p .FIXUP D
0311p(8D000004): LDR SB, MT, MOD0 [EBNF]
0312p(40D8009C): ADD R0, SB, 9CH [data]
0313p .FIXUP D
0313p(8D100002): LDR SB, MT, MOD1 [Texts]
0314p(41D80005): ADD R1, SB, VAR5
0315q(82E00004): LDR R2, SP, 4H
0316q(E1000005): BEQ 5 [031CH]
0317q(832FFFF8): LDR R3, R2, FFFFFFF8H
0318q(83300004): LDR R3, R3, 4H
0319q .FIXUP D
0319q(8D000006): LDR SB, MT, MOD0 [EBNF]
031Aq(44D8001C): ADD R4, SB, 1CH [data]
031Bq(04490003): SUB R4, R4, R3
031Cq(D916332C): BLNE MT [trap=2, pos=5683]
031Dr(42280014): ADD R2, R2, 14H
031Er(43000010): MOV R3, R0, 10H
031Fs .FIXUP P
031Fs(F711D00F): BL MOD1 [Texts] PROC29
0320t .FIXUP D
0320t(8D000007): LDR SB, MT, MOD0 [EBNF]
0321t(40D8009C): ADD R0, SB, 9CH [data]
0322t .FIXUP D
0322t(8D100002): LDR SB, MT, MOD1 [Texts]
0323t(41D80005): ADD R1, SB, VAR5
0324u(42000022): MOV R2, R0, 22H
ELSIFv tw = 1 THENx Texts.WriteString(W,y x(Symbol)z.id)a
0325v .FIXUP P
0325v(F711B006): BL MOD1 [Texts] PROC27
0326w(E7000053): B 83 [037AH]
0327x(80E00008): LDR R0, SP, 8H
0328x(40090001): SUB R0, R0, 1H
0329x(E9000010): BNE 16 [033AH]
032Ay .FIXUP D
032Ay(8D000008): LDR SB, MT, MOD0 [EBNF]
032By(40D8009C): ADD R0, SB, 9CH [data]
032Cy .FIXUP D
032Cy(8D100002): LDR SB, MT, MOD1 [Texts]
032Dy(41D80005): ADD R1, SB, VAR5
032Ez(82E00004): LDR R2, SP, 4H
032Fz(E1000005): BEQ 5 [0335H]
0330z(832FFFF8): LDR R3, R2, FFFFFFF8H
0331z(83300004): LDR R3, R3, 4H
0332z .FIXUP D
0332z(8D000006): LDR SB, MT, MOD0 [EBNF]
0333z(44D8001C): ADD R4, SB, 1CH [data]
0334z(04490003): SUB R4, R4, R3
0335z(D916822C): BLNE MT [trap=2, pos=5762]
0336a(42280014): ADD R2, R2, 14H
0337a(43000010): MOV R3, R0, 10H
ELSIFb tc = 2 THENd Texts.Write(W,e "?")f;g traverse(x.vh)i
0338b .FIXUP P
0338b(F711D013): BL MOD1 [Texts] PROC29
0339c(E7000040): B 64 [037AH]
033Ad(80E00008): LDR R0, SP, 8H
033Bd(40090002): SUB R0, R0, 2H
033Cd(E900000B): BNE 11 [0348H]
033De .FIXUP D
033De(8D00000B): LDR SB, MT, MOD0 [EBNF]
033Ee(40D8009C): ADD R0, SB, 9CH [data]
033Fe .FIXUP D
033Fe(8D100002): LDR SB, MT, MOD1 [Texts]
0340e(41D80005): ADD R1, SB, VAR5
0341f(4200003F): MOV R2, R0, 3FH
0342g .FIXUP P
0342g(F711B00A): BL MOD1 [Texts] PROC27
0343h(80E00004): LDR R0, SP, 4H
0344h(D116BF4C): BLEQ MT [trap=4, pos=5823]
0345i(80000010): LDR R0, R0, 10H
ELSIFj tk = 3 THENl Texts.Write(W,m "!")n;o traverse(x.vp)q
0346j(F7FFFFB9): BL -71 [0300H]
0347k(E7000032): B 50 [037AH]
0348l(80E00008): LDR R0, SP, 8H
0349l(40090003): SUB R0, R0, 3H
034Al(E900000B): BNE 11 [0356H]
034Bm .FIXUP D
034Bm(8D00000C): LDR SB, MT, MOD0 [EBNF]
034Cm(40D8009C): ADD R0, SB, 9CH [data]
034Dm .FIXUP D
034Dm(8D100002): LDR SB, MT, MOD1 [Texts]
034Em(41D80005): ADD R1, SB, VAR5
034Fn(42000021): MOV R2, R0, 21H
0350o .FIXUP P
0350o(F711B00E): BL MOD1 [Texts] PROC27
0351p(80E00004): LDR R0, SP, 4H
0352p(D116F94C): BLEQ MT [trap=4, pos=5881]
0353q(80000010): LDR R0, R0, 10H
ELSEr Textss.Write(W,t "(")u;v traverse(x.uw)x;y
0354r(F7FFFFAB): BL -85 [0300H]
0355s(E7000024): B 36 [037AH]
0356t .FIXUP D
0356t(8D000009): LDR SB, MT, MOD0 [EBNF]
0357t(40D8009C): ADD R0, SB, 9CH [data]
0358t .FIXUP D
0358t(8D100002): LDR SB, MT, MOD1 [Texts]
0359t(41D80005): ADD R1, SB, VAR5
035Au(42000028): MOV R2, R0, 28H
035Bv .FIXUP P
035Bv(F711B00B): BL MOD1 [Texts] PROC27
035Cw(80E00004): LDR R0, SP, 4H
035Dw(D117274C): BLEQ MT [trap=4, pos=5927]
035Ex(8000000C): LDR R0, R0, CH
035Fy(F7FFFFA0): BL -96 [0300H]
IF t = 4 THENz Texts.Write(W,a " ")b ELSEc Textsd.Write(W,e "|")f ENDg ;
0360z(80E00008): LDR R0, SP, 8H
0361z(40090004): SUB R0, R0, 4H
0362z(E9000007): BNE 7 [036AH]
0363a .FIXUP D
0363a(8D00000B): LDR SB, MT, MOD0 [EBNF]
0364a(40D8009C): ADD R0, SB, 9CH [data]
0365a .FIXUP D
0365a(8D100002): LDR SB, MT, MOD1 [Texts]
0366a(41D80005): ADD R1, SB, VAR5
0367b(42000020): MOV R2, R0, 20H
0368c .FIXUP P
0368c(F711B00D): BL MOD1 [Texts] PROC27
0369d(E7000006): B 6 [0370H]
036Ae .FIXUP D
036Ae(8D000005): LDR SB, MT, MOD0 [EBNF]
036Be(40D8009C): ADD R0, SB, 9CH [data]
036Ce .FIXUP D
036Ce(8D100002): LDR SB, MT, MOD1 [Texts]
036De(41D80005): ADD R1, SB, VAR5
036Ef(4200007C): MOV R2, R0, 7CH
036Fg .FIXUP P
036Fg(F711B007): BL MOD1 [Texts] PROC27
traverse(x.vh)i;j Texts.Write(W,k ")")l
0370h(80E00004): LDR R0, SP, 4H
0371h(D117874C): BLEQ MT [trap=4, pos=6023]
0372i(80000010): LDR R0, R0, 10H
0373j(F7FFFF8C): BL -116 [0300H]
0374k .FIXUP D
0374k(8D000008): LDR SB, MT, MOD0 [EBNF]
0375k(40D8009C): ADD R0, SB, 9CH [data]
0376k .FIXUP D
0376k(8D100002): LDR SB, MT, MOD1 [Texts]
0377k(41D80005): ADD R1, SB, VAR5
0378l(42000029): MOV R2, R0, 29H
ENDm
0379m .FIXUP P
0379m(F711B00A): BL MOD1 [Texts] PROC27
END
ENDn traverse;
037An(8FE00000): LDR LNK, SP, 0H
037Bn(4EE8000C): ADD SP, SP, CH
037Cn(C700000F): B LNK
PROCEDURE Tabulate*;
VAR s: Symbol;
BEGINo s := root;p
037Do .PROC 3
037Do .COMMAND Tabulate
037Do(4EE90008): SUB SP, SP, 8H
037Eo(AFE00000): STR LNK, SP, 0H
037Fp .FIXUP D
037Fp(8D000009): LDR SB, MT, MOD0 [EBNF]
0380p(80D00060): LDR R0, SB, 60H [data]
0381p(A0E00004): STR R0, SP, 4H
WHILE s # NIL DOq
0382q(80E00004): LDR R0, SP, 4H
0383q(E1000024): BEQ 36 [03A8H]
IF s.tagr = 1 THENs
0384r(80E00004): LDR R0, SP, 4H
0385r(D118214C): BLEQ MT [trap=4, pos=6177]
0386s(80000000): LDR R0, R0, 0H
0387s(40090001): SUB R0, R0, 1H
0388s(E900001A): BNE 26 [03A3H]
Texts.WriteString(W,t s.idu)v;w Texts.WriteString(W,x " = ")y;z traverse(s.va)b;c Texts.WriteLn(W)d
0389t .FIXUP D
0389t(8D00000A): LDR SB, MT, MOD0 [EBNF]
038At(40D8009C): ADD R0, SB, 9CH [data]
038Bt .FIXUP D
038Bt(8D100002): LDR SB, MT, MOD1 [Texts]
038Ct(41D80005): ADD R1, SB, VAR5
038Du(82E00004): LDR R2, SP, 4H
038Eu(D1184C4C): BLEQ MT [trap=4, pos=6220]
038Fv(42280014): ADD R2, R2, 14H
0390v(43000010): MOV R3, R0, 10H
0391w .FIXUP P
0391w(F711D018): BL MOD1 [Texts] PROC29
0392x .FIXUP D
0392x(8D000007): LDR SB, MT, MOD0 [EBNF]
0393x(40D8009C): ADD R0, SB, 9CH [data]
0394x .FIXUP D
0394x(8D100002): LDR SB, MT, MOD1 [Texts]
0395x(41D80005): ADD R1, SB, VAR5
0396y .FIXUP D
0396y(8D000002): LDR SB, MT, MOD0 [EBNF]
0397y(42D80104): ADD R2, SB, 104H [" = "]
0398y(43000005): MOV R3, R0, 5H
0399z .FIXUP P
0399z(F711D008): BL MOD1 [Texts] PROC29
039Aa(80E00004): LDR R0, SP, 4H
039Ba(D118794C): BLEQ MT [trap=4, pos=6265]
039Cb(80000010): LDR R0, R0, 10H
039Dc(F7FFFF62): BL -158 [0300H]
039Ed .FIXUP D
039Ed(8D000008): LDR SB, MT, MOD0 [EBNF]
039Fd(40D8009C): ADD R0, SB, 9CH [data]
03A0d .FIXUP D
03A0d(8D100002): LDR SB, MT, MOD1 [Texts]
03A1d(41D80005): ADD R1, SB, VAR5
ENDe ;
03A2e .FIXUP P
03A2e(F711C009): BL MOD1 [Texts] PROC28
s := s.nextf
03A3f(80E00004): LDR R0, SP, 4H
03A4f(D118AA4C): BLEQ MT [trap=4, pos=6314]
ENDg ;
03A5g(80000030): LDR R0, R0, 30H
03A6g(A0E00004): STR R0, SP, 4H
03A7g(E7FFFFDA): B -38 [0382H]
Texts.Append(Oberon.Log,h W.buf)i
03A8h .FIXUP D
03A8h(8D400008): LDR SB, MT, MOD4 [Oberon]
03A9h(80D0000D): LDR R0, SB, VAR13
03AAi .FIXUP D
03AAi(8D000002): LDR SB, MT, MOD0 [EBNF]
03ABi(81D0009C): LDR R1, SB, 9CH [data]
ENDj Tabulate;
03ACj .FIXUP P
03ACj(F710E00A): BL MOD1 [Texts] PROC14
03ADj(8FE00000): LDR LNK, SP, 0H
03AEj(4EE80008): ADD SP, SP, 8H
03AFj(C700000F): B LNK
(*------------------ Find sets of first symbols -------------------*)
PROCEDURE WriteSet(VAR id: ARRAY OF CHAR; s: SET);
VAR x: Symbol;
BEGINk Texts.Write(W,l 9X)m;n Texts.WriteString(W,o id)p;q Texts.WriteString(W,r " :: ")s;t
03B0k(4EE90014): SUB SP, SP, 14H
03B1k(AFE00000): STR LNK, SP, 0H
03B2k(A0E00004): STR R0, SP, 4H
03B3k(A1E00008): STR R1, SP, 8H
03B4k(A2E0000C): STR R2, SP, CH
03B5l .FIXUP D
03B5l(8D00000B): LDR SB, MT, MOD0 [EBNF]
03B6l(40D8009C): ADD R0, SB, 9CH [data]
03B7l .FIXUP D
03B7l(8D100002): LDR SB, MT, MOD1 [Texts]
03B8l(41D80005): ADD R1, SB, VAR5
03B9m(42000009): MOV R2, R0, 9H
03BAn .FIXUP P
03BAn(F711B00E): BL MOD1 [Texts] PROC27
03BBo .FIXUP D
03BBo(8D000004): LDR SB, MT, MOD0 [EBNF]
03BCo(40D8009C): ADD R0, SB, 9CH [data]
03BDo .FIXUP D
03BDo(8D100002): LDR SB, MT, MOD1 [Texts]
03BEo(41D80005): ADD R1, SB, VAR5
03BFp(82E00004): LDR R2, SP, 4H
03C0p(83E00008): LDR R3, SP, 8H
03C1q .FIXUP P
03C1q(F711D007): BL MOD1 [Texts] PROC29
03C2r .FIXUP D
03C2r(8D000005): LDR SB, MT, MOD0 [EBNF]
03C3r(40D8009C): ADD R0, SB, 9CH [data]
03C4r .FIXUP D
03C4r(8D100002): LDR SB, MT, MOD1 [Texts]
03C5r(41D80005): ADD R1, SB, VAR5
03C6s .FIXUP D
03C6s(8D000002): LDR SB, MT, MOD0 [EBNF]
03C7s(42D8010C): ADD R2, SB, 10CH [" :: "]
03C8s(43000005): MOV R3, R0, 5H
03C9t .FIXUP P
03C9t(F711D008): BL MOD1 [Texts] PROC29
x := root;u
03CAu .FIXUP D
03CAu(8D000004): LDR SB, MT, MOD0 [EBNF]
03CBu(80D00060): LDR R0, SB, 60H [data]
03CCu(A0E00010): STR R0, SP, 10H
WHILE (s # {})v & (wx # NIL)x DOy
03CDv(80E0000C): LDR R0, SP, CH
03CEw(E100002A): BEQ 42 [03F9H]
03CFx(80E00010): LDR R0, SP, 10H
03D0y(E1000028): BEQ 40 [03F9H]
IF (x.tagz = 0)a & (bx.noc IN s)d THENe Texts.Write(W,f " ")g;h Texts.WriteString(W,i x.idj)k;l EXCL(s, x.nom) ENDn ;
03D1z(80E00010): LDR R0, SP, 10H
03D2z(D11A0F4C): BLEQ MT [trap=4, pos=6671]
03D3a(80000000): LDR R0, R0, 0H
03D4b(E900001F): BNE 31 [03F4H]
03D5c(80E00010): LDR R0, SP, 10H
03D6c(D11A1C4C): BLEQ MT [trap=4, pos=6684]
03D7d(81E0000C): LDR R1, SP, CH
03D8d(80000024): LDR R0, R0, 24H
03D9d(40080001): ADD R0, R0, 1H
03DAd(01130000): ROR R1, R1, R0
03DBe(E8000018): BPL 24 [03F4H]
03DCf .FIXUP D
03DCf(8D000012): LDR SB, MT, MOD0 [EBNF]
03DDf(40D8009C): ADD R0, SB, 9CH [data]
03DEf .FIXUP D
03DEf(8D100002): LDR SB, MT, MOD1 [Texts]
03DFf(41D80005): ADD R1, SB, VAR5
03E0g(42000020): MOV R2, R0, 20H
03E1h .FIXUP P
03E1h(F711B018): BL MOD1 [Texts] PROC27
03E2i .FIXUP D
03E2i(8D000004): LDR SB, MT, MOD0 [EBNF]
03E3i(40D8009C): ADD R0, SB, 9CH [data]
03E4i .FIXUP D
03E4i(8D100002): LDR SB, MT, MOD1 [Texts]
03E5i(41D80005): ADD R1, SB, VAR5
03E6j(82E00010): LDR R2, SP, 10H
03E7j(D11A564C): BLEQ MT [trap=4, pos=6742]
03E8k(42280014): ADD R2, R2, 14H
03E9k(43000010): MOV R3, R0, 10H
03EAl .FIXUP P
03EAl(F711D009): BL MOD1 [Texts] PROC29
03EBm(80E00010): LDR R0, SP, 10H
03ECm(D11A654C): BLEQ MT [trap=4, pos=6757]
03EDn(41E8000C): ADD R1, SP, CH
03EEn(82100000): LDR R2, R1, 0H
03EFn(80000024): LDR R0, R0, 24H
03F0n(43000001): MOV R3, R0, 1H
03F1n(00310000): LSL R0, R3, R0
03F2n(02250000): ANN R2, R2, R0
03F3n(A2100000): STR R2, R1, 0H
x := x.nexto
03F4o(80E00010): LDR R0, SP, 10H
03F5o(D11A7E4C): BLEQ MT [trap=4, pos=6782]
ENDp ;
03F6p(80000030): LDR R0, R0, 30H
03F7p(A0E00010): STR R0, SP, 10H
03F8p(E7FFFFD4): B -44 [03CDH]
Texts.WriteLn(W)q
03F9q .FIXUP D
03F9q(8D000015): LDR SB, MT, MOD0 [EBNF]
03FAq(40D8009C): ADD R0, SB, 9CH [data]
03FBq .FIXUP D
03FBq(8D100002): LDR SB, MT, MOD1 [Texts]
03FCq(41D80005): ADD R1, SB, VAR5
ENDr WriteSet;
03FDr .FIXUP P
03FDr(F711C013): BL MOD1 [Texts] PROC28
03FEr(8FE00000): LDR LNK, SP, 0H
03FFr(4EE80014): ADD SP, SP, 14H
0400r(C700000F): B LNK
PROCEDURE first(x: Item): SET;
VAR t: INTEGER; s, a, b: SET; save: Symbol;
BEGINs
0401s(4EE9001C): SUB SP, SP, 1CH
0402s(AFE00000): STR LNK, SP, 0H
0403s(A0E00004): STR R0, SP, 4H
IF x # NIL THENt t := x.tagu;v
0404t(80E00004): LDR R0, SP, 4H
0405t(E10000B0): BEQ 176 [04B6H]
0406u(80E00004): LDR R0, SP, 4H
0407u(D11B264C): BLEQ MT [trap=4, pos=6950]
0408v(80000000): LDR R0, R0, 0H
0409v(A0E00008): STR R0, SP, 8H
IF t = 0 THENw s := {x(Symbol)x.no}y
040Aw(80E00008): LDR R0, SP, 8H
040Bw(E900000D): BNE 13 [0419H]
040Cx(80E00004): LDR R0, SP, 4H
040Dx(E1000005): BEQ 5 [0413H]
040Ex(810FFFF8): LDR R1, R0, FFFFFFF8H
040Fx(81100004): LDR R1, R1, 4H
0410x .FIXUP D
0410x(8D000015): LDR SB, MT, MOD0 [EBNF]
0411x(42D8001C): ADD R2, SB, 1CH [data]
0412x(02290001): SUB R2, R2, R1
0413x(D91B4B2C): BLNE MT [trap=2, pos=6987]
0414y(80000024): LDR R0, R0, 24H
0415y(41000001): MOV R1, R0, 1H
0416y(00110000): LSL R0, R1, R0
ELSIFz ta = 1 THENb
0417z(A0E0000C): STR R0, SP, CH
0418a(E700009C): B 156 [04B5H]
0419b(80E00008): LDR R0, SP, 8H
041Ab(40090001): SUB R0, R0, 1H
041Bb(E9000039): BNE 57 [0455H]
IF x.flag0c = 0 THENd x.flag0e := 1;f save := curs;g curs := x(Symbol)h;i
041Cc(80E00004): LDR R0, SP, 4H
041Dc(D11B794C): BLEQ MT [trap=4, pos=7033]
041Ed(80000004): LDR R0, R0, 4H
041Fd(E9000025): BNE 37 [0445H]
0420e(80E00004): LDR R0, SP, 4H
0421e(D11B8A4C): BLEQ MT [trap=4, pos=7050]
0422f(41000001): MOV R1, R0, 1H
0423f(A1000004): STR R1, R0, 4H
0424g .FIXUP D
0424g(8D000014): LDR SB, MT, MOD0 [EBNF]
0425g(80D00064): LDR R0, SB, 64H [data]
0426g(A0E00018): STR R0, SP, 18H
0427h(80E00004): LDR R0, SP, 4H
0428h(E1000004): BEQ 4 [042DH]
0429h(810FFFF8): LDR R1, R0, FFFFFFF8H
042Ah(81100004): LDR R1, R1, 4H
042Bh(42D8001C): ADD R2, SB, 1CH
042Ch(02290001): SUB R2, R2, R1
042Dh(D91BB02C): BLNE MT [trap=2, pos=7088]
042Ei(A0D00064): STR R0, SB, 64H
s := first(x.vj)k;l x.flag0m := 2;n x(Symbol)o.first := s;p curs := save
042Fj(80E00004): LDR R0, SP, 4H
0430j(D11BCA4C): BLEQ MT [trap=4, pos=7114]
0431k(80000010): LDR R0, R0, 10H
0432l(F7FFFFCE): BL -50 [0401H]
0433l(A0E0000C): STR R0, SP, CH
0434m(80E00004): LDR R0, SP, 4H
0435m(D11BD44C): BLEQ MT [trap=4, pos=7124]
0436n(41000002): MOV R1, R0, 2H
0437n(A1000004): STR R1, R0, 4H
0438o(80E00004): LDR R0, SP, 4H
0439o(E1000005): BEQ 5 [043FH]
043Ao(810FFFF8): LDR R1, R0, FFFFFFF8H
043Bo(81100004): LDR R1, R1, 4H
043Co .FIXUP D
043Co(8D000018): LDR SB, MT, MOD0 [EBNF]
043Do(42D8001C): ADD R2, SB, 1CH [data]
043Eo(02290001): SUB R2, R2, R1
043Fo(D91BE42C): BLNE MT [trap=2, pos=7140]
0440p(81E0000C): LDR R1, SP, CH
0441p(A1000028): STR R1, R0, 28H
ELSIFq xr.flag0s > 1 THENt s := x(Symbol)u.first
0442q(80E00018): LDR R0, SP, 18H
0443q(A0D00064): STR R0, SB, 64H
0444r(E700000F): B 15 [0454H]
0445s(80E00004): LDR R0, SP, 4H
0446s(D11C134C): BLEQ MT [trap=4, pos=7187]
0447t(80000004): LDR R0, R0, 4H
0448t(40090001): SUB R0, R0, 1H
0449t(E600000A): BLE 10 [0454H]
044Au(80E00004): LDR R0, SP, 4H
044Bu(E1000005): BEQ 5 [0451H]
044Cu(810FFFF8): LDR R1, R0, FFFFFFF8H
044Du(81100004): LDR R1, R1, 4H
044Eu .FIXUP D
044Eu(8D000012): LDR SB, MT, MOD0 [EBNF]
044Fu(42D8001C): ADD R2, SB, 1CH [data]
0450u(02290001): SUB R2, R2, R1
0451u(D91C2B2C): BLNE MT [trap=2, pos=7211]
ENDv
0452v(80000028): LDR R0, R0, 28H
0453v(A0E0000C): STR R0, SP, CH
ELSIF tw <= 3 THENx s := first(x.vy)z
0454w(E7000060): B 96 [04B5H]
0455x(80E00008): LDR R0, SP, 8H
0456x(40090003): SUB R0, R0, 3H
0457x(EE000006): BGT 6 [045EH]
0458y(80E00004): LDR R0, SP, 4H
0459y(D11C644C): BLEQ MT [trap=4, pos=7268]
045Az(80000010): LDR R0, R0, 10H
ELSIFa tb = 4 THENc s := first(x.ud)e;f
045Ba(F7FFFFA5): BL -91 [0401H]
045Ca(A0E0000C): STR R0, SP, CH
045Db(E7000057): B 87 [04B5H]
045Ec(80E00008): LDR R0, SP, 8H
045Fc(40090004): SUB R0, R0, 4H
0460c(E9000026): BNE 38 [0487H]
0461d(80E00004): LDR R0, SP, 4H
0462d(D11C8B4C): BLEQ MT [trap=4, pos=7307]
0463e(8000000C): LDR R0, R0, CH
0464f(F7FFFF9C): BL -100 [0401H]
0465f(A0E0000C): STR R0, SP, CH
IF x.ug.tagh IN {2, 3} THENi s := first(x.uj.vk)l +m first(xn.vo)p ELSEq sr := first(x.us)t ENDu
0466g(80E00004): LDR R0, SP, 4H
0467g(D11C9C4C): BLEQ MT [trap=4, pos=7324]
0468h(8000000C): LDR R0, R0, CH
0469h(D11CA04C): BLEQ MT [trap=4, pos=7328]
046Ai(4100000C): MOV R1, R0, CH
046Bi(80000000): LDR R0, R0, 0H
046Ci(40080001): ADD R0, R0, 1H
046Di(01130000): ROR R1, R1, R0
046Ei(E8000012): BPL 18 [0481H]
046Fj(80E00004): LDR R0, SP, 4H
0470j(D11CBE4C): BLEQ MT [trap=4, pos=7358]
0471k(8000000C): LDR R0, R0, CH
0472k(D11CC04C): BLEQ MT [trap=4, pos=7360]
0473l(80000010): LDR R0, R0, 10H
0474m(F7FFFF8C): BL -116 [0401H]
0475n(4EE90004): SUB SP, SP, 4H
0476n(A0E00000): STR R0, SP, 0H
0477o(80E00008): LDR R0, SP, 8H
0478o(D11CCD4C): BLEQ MT [trap=4, pos=7373]
0479p(80000010): LDR R0, R0, 10H
047Aq(F7FFFF86): BL -122 [0401H]
047Bq(01000000): MOV R1, R0, R0
047Cq(80E00000): LDR R0, SP, 0H
047Dq(4EE80004): ADD SP, SP, 4H
047Eq(00060001): IOR R0, R0, R1
047Fq(A0E0000C): STR R0, SP, CH
0480r(E7000005): B 5 [0486H]
0481s(80E00004): LDR R0, SP, 4H
0482s(D11CE24C): BLEQ MT [trap=4, pos=7394]
0483t(8000000C): LDR R0, R0, CH
0484u(F7FFFF7C): BL -132 [0401H]
0485u(A0E0000C): STR R0, SP, CH
ELSIF xv.tagw = 5 THENx
0486v(E700002E): B 46 [04B5H]
0487w(80E00004): LDR R0, SP, 4H
0488w(D11CF94C): BLEQ MT [trap=4, pos=7417]
0489x(80000000): LDR R0, R0, 0H
048Ax(40090005): SUB R0, R0, 5H
048Bx(E9000029): BNE 41 [04B5H]
a := first(x.uy)z;a b := first(x.vb)c;d s := a+b;e
048Cy(80E00004): LDR R0, SP, 4H
048Dy(D11D194C): BLEQ MT [trap=4, pos=7449]
048Ez(8000000C): LDR R0, R0, CH
048Fa(F7FFFF71): BL -143 [0401H]
0490a(A0E00010): STR R0, SP, 10H
0491b(80E00004): LDR R0, SP, 4H
0492b(D11D2A4C): BLEQ MT [trap=4, pos=7466]
0493c(80000010): LDR R0, R0, 10H
0494d(F7FFFF6C): BL -148 [0401H]
0495d(A0E00014): STR R0, SP, 14H
0496e(80E00010): LDR R0, SP, 10H
0497e(81E00014): LDR R1, SP, 14H
0498e(00060001): IOR R0, R0, R1
0499e(A0E0000C): STR R0, SP, CH
IF a*b #f {} THENg
049Af(80E00010): LDR R0, SP, 10H
049Bf(81E00014): LDR R1, SP, 14H
049Cf(00040001): AND R0, R0, R1
049Dg(40090000): SUB R0, R0, 0H
049Eg(E1000016): BEQ 22 [04B5H]
Texts.WriteString(W,h "error A in ")i;j WriteSet(curs.idk,l a/b)m;n Texts.WriteLn(W)o
049Fh .FIXUP D
049Fh(8D000051): LDR SB, MT, MOD0 [EBNF]
04A0h(40D8009C): ADD R0, SB, 9CH [data]
04A1h .FIXUP D
04A1h(8D100002): LDR SB, MT, MOD1 [Texts]
04A2h(41D80005): ADD R1, SB, VAR5
04A3i .FIXUP D
04A3i(8D000002): LDR SB, MT, MOD0 [EBNF]
04A4i(42D80114): ADD R2, SB, 114H ["error A in "]
04A5i(4300000C): MOV R3, R0, CH
04A6j .FIXUP P
04A6j(F711D0A9): BL MOD1 [Texts] PROC29
04A7k .FIXUP D
04A7k(8D000004): LDR SB, MT, MOD0 [EBNF]
04A8k(80D00064): LDR R0, SB, 64H [data]
04A9k(D11D8F4C): BLEQ MT [trap=4, pos=7567]
04AAl(40080014): ADD R0, R0, 14H
04ABl(41000010): MOV R1, R0, 10H
04ACm(82E00010): LDR R2, SP, 10H
04ADm(83E00014): LDR R3, SP, 14H
04AEm(02270003): XOR R2, R2, R3
04AFn(F7FFFF00): BL -256 [03B0H]
04B0o .FIXUP D
04B0o(8D000009): LDR SB, MT, MOD0 [EBNF]
04B1o(40D8009C): ADD R0, SB, 9CH [data]
04B2o .FIXUP D
04B2o(8D100002): LDR SB, MT, MOD1 [Texts]
04B3o(41D80005): ADD R1, SB, VAR5
ENDp
04B4p .FIXUP P
04B4p(F711C00E): BL MOD1 [Texts] PROC28
END
ELSE sq := {}
04B5q(E7000002): B 2 [04B8H]
ENDr ;
04B6r(40000000): MOV R0, R0, 0H
04B7r(A0E0000C): STR R0, SP, CH
RETURN s
ENDs first;
04B8s(80E0000C): LDR R0, SP, CH
04B9s(8FE00000): LDR LNK, SP, 0H
04BAs(4EE8001C): ADD SP, SP, 1CH
04BBs(C700000F): B LNK
PROCEDURE First*;
VAR s: Symbol;
BEGINt Texts.WriteString(W,u "First symbols:")v;w Texts.WriteLn(W)x;y s := root;z
04BCt .PROC 4
04BCt .COMMAND First
04BCt(4EE90008): SUB SP, SP, 8H
04BDt(AFE00000): STR LNK, SP, 0H
04BEu .FIXUP D
04BEu(8D00000C): LDR SB, MT, MOD0 [EBNF]
04BFu(40D8009C): ADD R0, SB, 9CH [data]
04C0u .FIXUP D
04C0u(8D100002): LDR SB, MT, MOD1 [Texts]
04C1u(41D80005): ADD R1, SB, VAR5
04C2v .FIXUP D
04C2v(8D000002): LDR SB, MT, MOD0 [EBNF]
04C3v(42D80120): ADD R2, SB, 120H ["First symbols:"]
04C4v(4300000F): MOV R3, R0, FH
04C5w .FIXUP P
04C5w(F711D011): BL MOD1 [Texts] PROC29
04C6x .FIXUP D
04C6x(8D000004): LDR SB, MT, MOD0 [EBNF]
04C7x(40D8009C): ADD R0, SB, 9CH [data]
04C8x .FIXUP D
04C8x(8D100002): LDR SB, MT, MOD1 [Texts]
04C9x(41D80005): ADD R1, SB, VAR5
04CAy .FIXUP P
04CAy(F711C005): BL MOD1 [Texts] PROC28
04CBz .FIXUP D
04CBz(8D000003): LDR SB, MT, MOD0 [EBNF]
04CCz(80D00060): LDR R0, SB, 60H [data]
04CDz(A0E00004): STR R0, SP, 4H
WHILE s # NIL DOa
04CEa(80E00004): LDR R0, SP, 4H
04CFa(E1000021): BEQ 33 [04F1H]
IF s.tagb = 1 THENc curs := s;d s.firste := first(sf.vg)h;i WriteSet(s.idj,k s.firstl)m ENDn ;
04D0b(80E00004): LDR R0, SP, 4H
04D1b(D11E8B4C): BLEQ MT [trap=4, pos=7819]
04D2c(80000000): LDR R0, R0, 0H
04D3c(40090001): SUB R0, R0, 1H
04D4c(E9000017): BNE 23 [04ECH]
04D5d(80E00004): LDR R0, SP, 4H
04D6d .FIXUP D
04D6d(8D00000B): LDR SB, MT, MOD0 [EBNF]
04D7d(A0D00064): STR R0, SB, 64H [data]
04D8e(80E00004): LDR R0, SP, 4H
04D9e(D11EA74C): BLEQ MT [trap=4, pos=7847]
04DAf(4EE90004): SUB SP, SP, 4H
04DBf(A0E00000): STR R0, SP, 0H
04DCg(80E00008): LDR R0, SP, 8H
04DDg(D11EB44C): BLEQ MT [trap=4, pos=7860]
04DEh(80000010): LDR R0, R0, 10H
04DFi(F7FFFF21): BL -223 [0401H]
04E0i(01000000): MOV R1, R0, R0
04E1i(80E00000): LDR R0, SP, 0H
04E2i(4EE80004): ADD SP, SP, 4H
04E3i(A1000028): STR R1, R0, 28H
04E4j(80E00004): LDR R0, SP, 4H
04E5j(D11EC44C): BLEQ MT [trap=4, pos=7876]
04E6k(40080014): ADD R0, R0, 14H
04E7k(41000010): MOV R1, R0, 10H
04E8l(82E00004): LDR R2, SP, 4H
04E9l(D11ECD4C): BLEQ MT [trap=4, pos=7885]
04EAm(82200028): LDR R2, R2, 28H
04EBn(F7FFFEC4): BL -316 [03B0H]
s := s.nexto
04ECo(80E00004): LDR R0, SP, 4H
04EDo(D11EE64C): BLEQ MT [trap=4, pos=7910]
ENDp ;
04EEp(80000030): LDR R0, R0, 30H
04EFp(A0E00004): STR R0, SP, 4H
04F0p(E7FFFFDD): B -35 [04CEH]
Texts.Append(Oberon.Log,q W.buf)r
04F1q .FIXUP D
04F1q(8D40001B): LDR SB, MT, MOD4 [Oberon]
04F2q(80D0000D): LDR R0, SB, VAR13
04F3r .FIXUP D
04F3r(8D000002): LDR SB, MT, MOD0 [EBNF]
04F4r(81D0009C): LDR R1, SB, 9CH [data]
ENDs First;
04F5s .FIXUP P
04F5s(F710E02B): BL MOD1 [Texts] PROC14
04F6s(8FE00000): LDR LNK, SP, 0H
04F7s(4EE80008): ADD SP, SP, 8H
04F8s(C700000F): B LNK
(*------------------ Find sets of follow symbols -------------------*)
PROCEDURE critical(x: Item): SET;
VAR t: INTEGER; s: SET;
BEGINt
04F9t(4EE90010): SUB SP, SP, 10H
04FAt(AFE00000): STR LNK, SP, 0H
04FBt(A0E00004): STR R0, SP, 4H
IF x # NIL THENu t := x.tagv;w
04FCu(80E00004): LDR R0, SP, 4H
04FDu(E1000056): BEQ 86 [0554H]
04FEv(80E00004): LDR R0, SP, 4H
04FFv(D11FD34C): BLEQ MT [trap=4, pos=8147]
0500w(80000000): LDR R0, R0, 0H
0501w(A0E00008): STR R0, SP, 8H
IF t = 0 THENx s := {}
0502x(80E00008): LDR R0, SP, 8H
0503x(E9000003): BNE 3 [0507H]
ELSIFy tz = 1 THENa
0504y(40000000): MOV R0, R0, 0H
0505y(A0E0000C): STR R0, SP, CH
0506z(E700004C): B 76 [0553H]
0507a(80E00008): LDR R0, SP, 8H
0508a(40090001): SUB R0, R0, 1H
0509a(E9000025): BNE 37 [052FH]
IF x.flag1b = 0 THENc x.flag1d := 1;e x(Symbol)f.crit := critical(xg.vh)i ENDj ;
050Ab(80E00004): LDR R0, SP, 4H
050Bb(D1201A4C): BLEQ MT [trap=4, pos=8218]
050Cc(80000008): LDR R0, R0, 8H
050Dc(E9000016): BNE 22 [0524H]
050Ed(80E00004): LDR R0, SP, 4H
050Fd(D1202B4C): BLEQ MT [trap=4, pos=8235]
0510e(41000001): MOV R1, R0, 1H
0511e(A1000008): STR R1, R0, 8H
0512f(80E00004): LDR R0, SP, 4H
0513f(E1000005): BEQ 5 [0519H]
0514f(810FFFF8): LDR R1, R0, FFFFFFF8H
0515f(81100004): LDR R1, R1, 4H
0516f .FIXUP D
0516f(8D000023): LDR SB, MT, MOD0 [EBNF]
0517f(42D8001C): ADD R2, SB, 1CH [data]
0518f(02290001): SUB R2, R2, R1
0519f(D9203B2C): BLNE MT [trap=2, pos=8251]
051Ag(4EE90004): SUB SP, SP, 4H
051Bg(A0E00000): STR R0, SP, 0H
051Ch(80E00008): LDR R0, SP, 8H
051Dh(D120504C): BLEQ MT [trap=4, pos=8272]
051Ei(80000010): LDR R0, R0, 10H
051Fj(F7FFFFD9): BL -39 [04F9H]
0520j(01000000): MOV R1, R0, R0
0521j(80E00000): LDR R0, SP, 0H
0522j(4EE80004): ADD SP, SP, 4H
0523j(A100002C): STR R1, R0, 2CH
s := x(Symbol)k.crit
0524k(80E00004): LDR R0, SP, 4H
0525k(E1000005): BEQ 5 [052BH]
0526k(810FFFF8): LDR R1, R0, FFFFFFF8H
0527k(81100004): LDR R1, R1, 4H
0528k .FIXUP D
0528k(8D000012): LDR SB, MT, MOD0 [EBNF]
0529k(42D8001C): ADD R2, SB, 1CH [data]
052Ak(02290001): SUB R2, R2, R1
052Bk(D9206E2C): BLNE MT [trap=2, pos=8302]
ELSIFl tm <= 3 THENn s := first(x.vo)p
052Cl(8000002C): LDR R0, R0, 2CH
052Dl(A0E0000C): STR R0, SP, CH
052Em(E7000024): B 36 [0553H]
052Fn(80E00008): LDR R0, SP, 8H
0530n(40090003): SUB R0, R0, 3H
0531n(EE000006): BGT 6 [0538H]
0532o(80E00004): LDR R0, SP, 4H
0533o(D1209A4C): BLEQ MT [trap=4, pos=8346]
0534p(80000010): LDR R0, R0, 10H
ELSIFq tr = 4 THENs s := critical(x.vt)u
0535q(F7FFFECB): BL -309 [0401H]
0536q(A0E0000C): STR R0, SP, CH
0537r(E700001B): B 27 [0553H]
0538s(80E00008): LDR R0, SP, 8H
0539s(40090004): SUB R0, R0, 4H
053As(E9000006): BNE 6 [0541H]
053Bt(80E00004): LDR R0, SP, 4H
053Ct(D120C44C): BLEQ MT [trap=4, pos=8388]
053Du(80000010): LDR R0, R0, 10H
ELSIFv tw = 5 THENx s := critical(x.uy)z +a critical(xb.vc)d
053Ev(F7FFFFBA): BL -70 [04F9H]
053Fv(A0E0000C): STR R0, SP, CH
0540w(E7000012): B 18 [0553H]
0541x(80E00008): LDR R0, SP, 8H
0542x(40090005): SUB R0, R0, 5H
0543x(E900000F): BNE 15 [0553H]
0544y(80E00004): LDR R0, SP, 4H
0545y(D120EE4C): BLEQ MT [trap=4, pos=8430]
0546z(8000000C): LDR R0, R0, CH
0547a(F7FFFFB1): BL -79 [04F9H]
0548b(4EE90004): SUB SP, SP, 4H
0549b(A0E00000): STR R0, SP, 0H
054Ac(80E00008): LDR R0, SP, 8H
054Bc(D120FE4C): BLEQ MT [trap=4, pos=8446]
054Cd(80000010): LDR R0, R0, 10H
ENDe
054De(F7FFFFAB): BL -85 [04F9H]
054Ee(01000000): MOV R1, R0, R0
054Fe(80E00000): LDR R0, SP, 0H
0550e(4EE80004): ADD SP, SP, 4H
0551e(00060001): IOR R0, R0, R1
0552e(A0E0000C): STR R0, SP, CH
ELSE sf := {}
0553f(E7000002): B 2 [0556H]
ENDg ;
0554g(40000000): MOV R0, R0, 0H
0555g(A0E0000C): STR R0, SP, CH
RETURN s
ENDh critical;
0556h(80E0000C): LDR R0, SP, CH
0557h(8FE00000): LDR LNK, SP, 0H
0558h(4EE80010): ADD SP, SP, 10H
0559h(C700000F): B LNK
PROCEDURE pair(x: Item);
BEGINi
055Ai(4EE90008): SUB SP, SP, 8H
055Bi(AFE00000): STR LNK, SP, 0H
055Ci(A0E00004): STR R0, SP, 4H
IF (x # NIL)j & (kx.tagl >= 2)m THENn
055Dj(80E00004): LDR R0, SP, 4H
055Ek(E1000054): BEQ 84 [05B3H]
055Fl(80E00004): LDR R0, SP, 4H
0560l(D1217F4C): BLEQ MT [trap=4, pos=8575]
0561m(80000000): LDR R0, R0, 0H
0562m(40090002): SUB R0, R0, 2H
0563n(E500004F): BLT 79 [05B3H]
pair(x.uo)p;q pair(x.vr)s;t
0564o(80E00004): LDR R0, SP, 4H
0565o(D121994C): BLEQ MT [trap=4, pos=8601]
0566p(8000000C): LDR R0, R0, CH
0567q(F7FFFFF2): BL -14 [055AH]
0568r(80E00004): LDR R0, SP, 4H
0569r(D121A44C): BLEQ MT [trap=4, pos=8612]
056As(80000010): LDR R0, R0, 10H
056Bt(F7FFFFEE): BL -18 [055AH]
IF (x.tagu = 4)v & (wx.ux.tagy = 1)z THENa
056Cu(80E00004): LDR R0, SP, 4H
056Du(D121B64C): BLEQ MT [trap=4, pos=8630]
056Ev(80000000): LDR R0, R0, 0H
056Fv(40090004): SUB R0, R0, 4H
0570w(E9000042): BNE 66 [05B3H]
0571x(80E00004): LDR R0, SP, 4H
0572x(D121C24C): BLEQ MT [trap=4, pos=8642]
0573y(8000000C): LDR R0, R0, CH
0574y(D121C64C): BLEQ MT [trap=4, pos=8646]
0575z(80000000): LDR R0, R0, 0H
0576z(40090001): SUB R0, R0, 1H
0577a(E900003B): BNE 59 [05B3H]
IF first(x.vb)c *d x.ue(Symbol)f.crit #g {} THENh
0578b(80E00004): LDR R0, SP, 4H
0579b(D121E54C): BLEQ MT [trap=4, pos=8677]
057Ac(80000010): LDR R0, R0, 10H
057Bd(F7FFFE85): BL -379 [0401H]
057Ce(81E00004): LDR R1, SP, 4H
057De(D121EC4C): BLEQ MT [trap=4, pos=8684]
057Ef(8110000C): LDR R1, R1, CH
057Ff(E1000005): BEQ 5 [0585H]
0580f(821FFFF8): LDR R2, R1, FFFFFFF8H
0581f(82200004): LDR R2, R2, 4H
0582f .FIXUP D
0582f(8D00005A): LDR SB, MT, MOD0 [EBNF]
0583f(43D8001C): ADD R3, SB, 1CH [data]
0584f(03390002): SUB R3, R3, R2
0585f(D921F42C): BLNE MT [trap=2, pos=8692]
0586g(8110002C): LDR R1, R1, 2CH
0587g(00040001): AND R0, R0, R1
0588h(40090000): SUB R0, R0, 0H
0589h(E1000029): BEQ 41 [05B3H]
Texts.WriteString(W,i " clash ")j;k WriteSet(x.ul(Symbol)m.id,n x.uo(Symbol)p.crit)q;r
058Ai .FIXUP D
058Ai(8D000008): LDR SB, MT, MOD0 [EBNF]
058Bi(40D8009C): ADD R0, SB, 9CH [data]
058Ci .FIXUP D
058Ci(8D100002): LDR SB, MT, MOD1 [Texts]
058Di(41D80005): ADD R1, SB, VAR5
058Ej .FIXUP D
058Ej(8D000002): LDR SB, MT, MOD0 [EBNF]
058Fj(42D80130): ADD R2, SB, 130H [" clash "]
0590j(43000008): MOV R3, R0, 8H
0591k .FIXUP P
0591k(F711D09C): BL MOD1 [Texts] PROC29
0592l(80E00004): LDR R0, SP, 4H
0593l(D1223B4C): BLEQ MT [trap=4, pos=8763]
0594m(8000000C): LDR R0, R0, CH
0595m(E1000005): BEQ 5 [059BH]
0596m(810FFFF8): LDR R1, R0, FFFFFFF8H
0597m(81100004): LDR R1, R1, 4H
0598m .FIXUP D
0598m(8D00000A): LDR SB, MT, MOD0 [EBNF]
0599m(42D8001C): ADD R2, SB, 1CH [data]
059Am(02290001): SUB R2, R2, R1
059Bm(D922432C): BLNE MT [trap=2, pos=8771]
059Cn(40080014): ADD R0, R0, 14H
059Dn(41000010): MOV R1, R0, 10H
059Eo(82E00004): LDR R2, SP, 4H
059Fo(D1224B4C): BLEQ MT [trap=4, pos=8779]
05A0p(8220000C): LDR R2, R2, CH
05A1p(E1000004): BEQ 4 [05A6H]
05A2p(832FFFF8): LDR R3, R2, FFFFFFF8H
05A3p(83300004): LDR R3, R3, 4H
05A4p(44D8001C): ADD R4, SB, 1CH
05A5p(04490003): SUB R4, R4, R3
05A6p(D922532C): BLNE MT [trap=2, pos=8787]
05A7q(8220002C): LDR R2, R2, 2CH
05A8r(F7FFFE07): BL -505 [03B0H]
Texts.WriteLn(W)s;t Texts.Append(Oberon.Log,u W.buf)v
05A9s .FIXUP D
05A9s(8D000011): LDR SB, MT, MOD0 [EBNF]
05AAs(40D8009C): ADD R0, SB, 9CH [data]
05ABs .FIXUP D
05ABs(8D100002): LDR SB, MT, MOD1 [Texts]
05ACs(41D80005): ADD R1, SB, VAR5
05ADt .FIXUP P
05ADt(F711C01C): BL MOD1 [Texts] PROC28
05AEu .FIXUP D
05AEu(8D400003): LDR SB, MT, MOD4 [Oberon]
05AFu(80D0000D): LDR R0, SB, VAR13
05B0v .FIXUP D
05B0v(8D000002): LDR SB, MT, MOD0 [EBNF]
05B1v(81D0009C): LDR R1, SB, 9CH [data]
ENDw
05B2w .FIXUP P
05B2w(F710E005): BL MOD1 [Texts] PROC14
END
END
ENDx pair;
05B3x(8FE00000): LDR LNK, SP, 0H
05B4x(4EE80008): ADD SP, SP, 8H
05B5x(C700000F): B LNK
PROCEDURE Follow*;
VAR s: Symbol;
BEGINy Texts.WriteString(W,z "Non-follow symbols:")a;b Texts.WriteLn(W)c;d s := root;e
05B6y .PROC 5
05B6y .COMMAND Follow
05B6y(4EE90008): SUB SP, SP, 8H
05B7y(AFE00000): STR LNK, SP, 0H
05B8z .FIXUP D
05B8z(8D000008): LDR SB, MT, MOD0 [EBNF]
05B9z(40D8009C): ADD R0, SB, 9CH [data]
05BAz .FIXUP D
05BAz(8D100002): LDR SB, MT, MOD1 [Texts]
05BBz(41D80005): ADD R1, SB, VAR5
05BCa .FIXUP D
05BCa(8D000002): LDR SB, MT, MOD0 [EBNF]
05BDa(42D80138): ADD R2, SB, 138H ["Non-follow symbols:"]
05BEa(43000014): MOV R3, R0, 14H
05BFb .FIXUP P
05BFb(F711D00D): BL MOD1 [Texts] PROC29
05C0c .FIXUP D
05C0c(8D000004): LDR SB, MT, MOD0 [EBNF]
05C1c(40D8009C): ADD R0, SB, 9CH [data]
05C2c .FIXUP D
05C2c(8D100002): LDR SB, MT, MOD1 [Texts]
05C3c(41D80005): ADD R1, SB, VAR5
05C4d .FIXUP P
05C4d(F711C005): BL MOD1 [Texts] PROC28
05C5e .FIXUP D
05C5e(8D000003): LDR SB, MT, MOD0 [EBNF]
05C6e(80D00060): LDR R0, SB, 60H [data]
05C7e(A0E00004): STR R0, SP, 4H
WHILE s # NIL DOf
05C8f(80E00004): LDR R0, SP, 4H
05C9f(E1000019): BEQ 25 [05E3H]
IF s.tagg = 1 THENh curs := s;i s.critj := critical(sk.vl)m ENDn ;
05CAg(80E00004): LDR R0, SP, 4H
05CBg(D1235F4C): BLEQ MT [trap=4, pos=9055]
05CCh(80000000): LDR R0, R0, 0H
05CDh(40090001): SUB R0, R0, 1H
05CEh(E900000F): BNE 15 [05DEH]
05CFi(80E00004): LDR R0, SP, 4H
05D0i .FIXUP D
05D0i(8D00000B): LDR SB, MT, MOD0 [EBNF]
05D1i(A0D00064): STR R0, SB, 64H [data]
05D2j(80E00004): LDR R0, SP, 4H
05D3j(D1237A4C): BLEQ MT [trap=4, pos=9082]
05D4k(4EE90004): SUB SP, SP, 4H
05D5k(A0E00000): STR R0, SP, 0H
05D6l(80E00008): LDR R0, SP, 8H
05D7l(D1238A4C): BLEQ MT [trap=4, pos=9098]
05D8m(80000010): LDR R0, R0, 10H
05D9n(F7FFFF1F): BL -225 [04F9H]
05DAn(01000000): MOV R1, R0, R0
05DBn(80E00000): LDR R0, SP, 0H
05DCn(4EE80004): ADD SP, SP, 4H
05DDn(A100002C): STR R1, R0, 2CH
s := s.nexto
05DEo(80E00004): LDR R0, SP, 4H
05DFo(D123A34C): BLEQ MT [trap=4, pos=9123]
ENDp ;
05E0p(80000030): LDR R0, R0, 30H
05E1p(A0E00004): STR R0, SP, 4H
05E2p(E7FFFFE5): B -27 [05C8H]
s := root;q
05E3q .FIXUP D
05E3q(8D000013): LDR SB, MT, MOD0 [EBNF]
05E4q(80D00060): LDR R0, SB, 60H [data]
05E5q(A0E00004): STR R0, SP, 4H
WHILE s # NIL DOr
05E6r(80E00004): LDR R0, SP, 4H
05E7r(E1000012): BEQ 18 [05FAH]
IF s.tags = 1 THENt WriteSet(s.idu,v s.critw)x ENDy ;
05E8s(80E00004): LDR R0, SP, 4H
05E9s(D123E04C): BLEQ MT [trap=4, pos=9184]
05EAt(80000000): LDR R0, R0, 0H
05EBt(40090001): SUB R0, R0, 1H
05ECt(E9000008): BNE 8 [05F5H]
05EDu(80E00004): LDR R0, SP, 4H
05EEu(D123F74C): BLEQ MT [trap=4, pos=9207]
05EFv(40080014): ADD R0, R0, 14H
05F0v(41000010): MOV R1, R0, 10H
05F1w(82E00004): LDR R2, SP, 4H
05F2w(D123FF4C): BLEQ MT [trap=4, pos=9215]
05F3x(8220002C): LDR R2, R2, 2CH
05F4y(F7FFFDBB): BL -581 [03B0H]
s := s.nextz
05F5z(80E00004): LDR R0, SP, 4H
05F6z(D124194C): BLEQ MT [trap=4, pos=9241]
ENDa ;
05F7a(80000030): LDR R0, R0, 30H
05F8a(A0E00004): STR R0, SP, 4H
05F9a(E7FFFFEC): B -20 [05E6H]
s := root;b
05FAb .FIXUP D
05FAb(8D000017): LDR SB, MT, MOD0 [EBNF]
05FBb(80D00060): LDR R0, SB, 60H [data]
05FCb(A0E00004): STR R0, SP, 4H
WHILE s # NIL DOc
05FDc(80E00004): LDR R0, SP, 4H
05FEc(E100000E): BEQ 14 [060DH]
IF s.tagd = 1 THENe pair(s.vf)g ENDh ;
05FFd(80E00004): LDR R0, SP, 4H
0600d(D124564C): BLEQ MT [trap=4, pos=9302]
0601e(80000000): LDR R0, R0, 0H
0602e(40090001): SUB R0, R0, 1H
0603e(E9000004): BNE 4 [0608H]
0604f(80E00004): LDR R0, SP, 4H
0605f(D124684C): BLEQ MT [trap=4, pos=9320]
0606g(80000010): LDR R0, R0, 10H
0607h(F7FFFF52): BL -174 [055AH]
s := s.nexti
0608i(80E00004): LDR R0, SP, 4H
0609i(D124814C): BLEQ MT [trap=4, pos=9345]
ENDj ;
060Aj(80000030): LDR R0, R0, 30H
060Bj(A0E00004): STR R0, SP, 4H
060Cj(E7FFFFF0): B -16 [05FDH]
Texts.Append(Oberon.Log,k W.buf)l
060Dk .FIXUP D
060Dk(8D400013): LDR SB, MT, MOD4 [Oberon]
060Ek(80D0000D): LDR R0, SB, VAR13
060Fl .FIXUP D
060Fl(8D000002): LDR SB, MT, MOD0 [EBNF]
0610l(81D0009C): LDR R1, SB, 9CH [data]
ENDm Follow;
0611m .FIXUP P
0611m(F710E04D): BL MOD1 [Texts] PROC14
0612m(8FE00000): LDR LNK, SP, 0H
0613m(4EE80008): ADD SP, SP, 8H
0614m(C700000F): B LNK
BEGINn Texts.OpenWriter(W)o
0615n .PROC 0
0615n .ENTRYPOINT
0615n(4EE90004): SUB SP, SP, 4H
0616n(AFE00000): STR LNK, SP, 0H
0617o .FIXUP D
0617o(8D000008): LDR SB, MT, MOD0 [EBNF]
0618o(40D8009C): ADD R0, SB, 9CH [data]
0619o .FIXUP D
0619o(8D100002): LDR SB, MT, MOD1 [Texts]
061Ao(41D80005): ADD R1, SB, VAR5
ENDp EBNF.q
061Bp .FIXUP P
061Bp(F711700A): BL MOD1 [Texts] PROC23
061Cq(8FE00000): LDR LNK, SP, 0H
061Dq(4EE80004): ADD SP, SP, 4H
061Eq(C700000F): B LNK