| 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 |
| 0000 | a(4EE9000C): SUB SP, SP, CH |
| 0001 | a(AFE00000): STR LNK, SP, 0H |
| 0002 | a(A0E00004): STR R0, SP, 4H |
| 0003 | b .FIXUP D |
| 0003 | b(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 0004 | b(40D80068): ADD R0, SB, 68H [data] |
| 0005 | b .FIXUP D |
| 0005 | b(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0006 | b(41D80002): ADD R1, SB, VAR2 |
| 0007 | c .FIXUP P |
| 0007 | c(F7114007): BL MOD1 [Texts] PROC20 |
| 0008 | c(A0E00008): STR R0, SP, 8H |
| IF pos > lastpos THENd |
| 0009 | d(80E00008): LDR R0, SP, 8H |
| 000A | d .FIXUP D |
| 000A | d(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 000B | d(81D00044): LDR R1, SB, 44H [data] |
| 000C | d(00090001): SUB R0, R0, R1 |
| 000D | d(E600003A): BLE 58 [0048H] |
| Texts.WriteString(W,e " pos")f;g Texts.WriteInt(W,h pos,i 6)j;k |
| 000E | e .FIXUP D |
| 000E | e(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 000F | e(40D8009C): ADD R0, SB, 9CH [data] |
| 0010 | e .FIXUP D |
| 0010 | e(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0011 | e(41D80005): ADD R1, SB, VAR5 |
| 0012 | f .FIXUP D |
| 0012 | f(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 0013 | f(42D800C4): ADD R2, SB, C4H [" pos"] |
| 0014 | f(43000006): MOV R3, R0, 6H |
| 0015 | g .FIXUP P |
| 0015 | g(F711D00E): BL MOD1 [Texts] PROC29 |
| 0016 | h .FIXUP D |
| 0016 | h(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 0017 | h(40D8009C): ADD R0, SB, 9CH [data] |
| 0018 | h .FIXUP D |
| 0018 | h(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0019 | h(41D80005): ADD R1, SB, VAR5 |
| 001A | i(82E00008): LDR R2, SP, 8H |
| 001B | j(43000006): MOV R3, R0, 6H |
| 001C | k .FIXUP P |
| 001C | k(F711E007): BL MOD1 [Texts] PROC30 |
| Texts.WriteString(W,l " err")m;n Texts.WriteInt(W,o n,p 4)q;r lastpos := pos;s |
| 001D | l .FIXUP D |
| 001D | l(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 001E | l(40D8009C): ADD R0, SB, 9CH [data] |
| 001F | l .FIXUP D |
| 001F | l(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0020 | l(41D80005): ADD R1, SB, VAR5 |
| 0021 | m .FIXUP D |
| 0021 | m(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 0022 | m(42D800CC): ADD R2, SB, CCH [" err"] |
| 0023 | m(43000006): MOV R3, R0, 6H |
| 0024 | n .FIXUP P |
| 0024 | n(F711D008): BL MOD1 [Texts] PROC29 |
| 0025 | o .FIXUP D |
| 0025 | o(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 0026 | o(40D8009C): ADD R0, SB, 9CH [data] |
| 0027 | o .FIXUP D |
| 0027 | o(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0028 | o(41D80005): ADD R1, SB, VAR5 |
| 0029 | p(82E00004): LDR R2, SP, 4H |
| 002A | q(43000004): MOV R3, R0, 4H |
| 002B | r .FIXUP P |
| 002B | r(F711E007): BL MOD1 [Texts] PROC30 |
| 002C | s(80E00008): LDR R0, SP, 8H |
| 002D | s .FIXUP D |
| 002D | s(8D000006): LDR SB, MT, MOD0 [EBNF] |
| 002E | s(A0D00044): STR R0, SB, 44H [data] |
| Texts.WriteString(W,t " sym ")u;v Texts.WriteInt(W,w sym,x 4)y;z |
| 002F | t(40D8009C): ADD R0, SB, 9CH |
| 0030 | t .FIXUP D |
| 0030 | t(8D100003): LDR SB, MT, MOD1 [Texts] |
| 0031 | t(41D80005): ADD R1, SB, VAR5 |
| 0032 | u .FIXUP D |
| 0032 | u(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 0033 | u(42D800D4): ADD R2, SB, D4H [" sym "] |
| 0034 | u(43000007): MOV R3, R0, 7H |
| 0035 | v .FIXUP P |
| 0035 | v(F711D00A): BL MOD1 [Texts] PROC29 |
| 0036 | w .FIXUP D |
| 0036 | w(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 0037 | w(40D8009C): ADD R0, SB, 9CH [data] |
| 0038 | w .FIXUP D |
| 0038 | w(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0039 | w(41D80005): ADD R1, SB, VAR5 |
| 003A | x .FIXUP D |
| 003A | x(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 003B | x(82D00040): LDR R2, SB, 40H [data] |
| 003C | y(43000004): MOV R3, R0, 4H |
| 003D | z .FIXUP P |
| 003D | z(F711E008): BL MOD1 [Texts] PROC30 |
| Texts.WriteLn(W)a;b Texts.Append(Oberon.Log,c W.buf)d |
| 003E | a .FIXUP D |
| 003E | a(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 003F | a(40D8009C): ADD R0, SB, 9CH [data] |
| 0040 | a .FIXUP D |
| 0040 | a(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0041 | a(41D80005): ADD R1, SB, VAR5 |
| 0042 | b .FIXUP P |
| 0042 | b(F711C005): BL MOD1 [Texts] PROC28 |
| 0043 | c .FIXUP D |
| 0043 | c(8D400003): LDR SB, MT, MOD4 [Oberon] |
| 0044 | c(80D0000D): LDR R0, SB, VAR13 |
| 0045 | d .FIXUP D |
| 0045 | d(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 0046 | d(81D0009C): LDR R1, SB, 9CH [data] |
| ENDe |
| 0047 | e .FIXUP P |
| 0047 | e(F710E005): BL MOD1 [Texts] PROC14 |
| ENDf error; |
| 0048 | f(8FE00000): LDR LNK, SP, 0H |
| 0049 | f(4EE8000C): ADD SP, SP, CH |
| 004A | f(C700000F): B LNK |
| |
| PROCEDURE This(VAR ident: Identifier; tag: INTEGER): Symbol; |
| VAR s: Symbol; (*find or enter symbol in list*) |
| BEGINg s := root;h |
| 004B | g(4EE90010): SUB SP, SP, 10H |
| 004C | g(AFE00000): STR LNK, SP, 0H |
| 004D | g(A0E00004): STR R0, SP, 4H |
| 004E | g(A1E00008): STR R1, SP, 8H |
| 004F | h .FIXUP D |
| 004F | h(8D00000A): LDR SB, MT, MOD0 [EBNF] |
| 0050 | h(80D00060): LDR R0, SB, 60H [data] |
| 0051 | h(A0E0000C): STR R0, SP, CH |
| |
| WHILE (s # NIL)i & (js.idk # ident)l DOm s := s.nextn ENDo ; |
| 0052 | i(80E0000C): LDR R0, SP, CH |
| 0053 | j(E1000012): BEQ 18 [0066H] |
| 0054 | k(80E0000C): LDR R0, SP, CH |
| 0055 | k(D1057C4C): BLEQ MT [trap=4, pos=1404] |
| 0056 | l(40080014): ADD R0, R0, 14H |
| 0057 | l(81E00004): LDR R1, SP, 4H |
| 0058 | l(92000000): LDR R2, R0, 0H |
| 0059 | l(40080001): ADD R0, R0, 1H |
| 005A | l(93100000): LDR R3, R1, 0H |
| 005B | l(41180001): ADD R1, R1, 1H |
| 005C | l(04290003): SUB R4, R2, R3 |
| 005D | l(E9000002): BNE 2 [0060H] |
| 005E | l(44290000): SUB R4, R2, 0H |
| 005F | l(E9FFFFF8): BNE -8 [0058H] |
| 0060 | m(E1000005): BEQ 5 [0066H] |
| 0061 | n(80E0000C): LDR R0, SP, CH |
| 0062 | n(D105944C): BLEQ MT [trap=4, pos=1428] |
| 0063 | o(80000030): LDR R0, R0, 30H |
| 0064 | o(A0E0000C): STR R0, SP, CH |
| 0065 | o(E7FFFFEC): B -20 [0052H] |
| IF s = NIL THENp |
| 0066 | p(80E0000C): LDR R0, SP, CH |
| 0067 | p(E900002F): BNE 47 [0097H] |
| NEW(s);q s.idr := ident;s s.tagt := tag;u |
| 0068 | q(40E8000C): ADD R0, SP, CH |
| 0069 | q .FIXUP D |
| 0069 | q(8D00001A): LDR SB, MT, MOD0 [EBNF] |
| 006A | q(41D8001C): ADD R1, SB, 1CH [data] |
| 006B | q(D705BC0C): BL MT [trap=0, pos=1468] |
| 006C | r(80E0000C): LDR R0, SP, CH |
| 006D | r(D105C14C): BLEQ MT [trap=4, pos=1473] |
| 006E | s(40080014): ADD R0, R0, 14H |
| 006F | s(81E00004): LDR R1, SP, 4H |
| 0070 | s(42000004): MOV R2, R0, 4H |
| 0071 | s(83100000): LDR R3, R1, 0H |
| 0072 | s(41180004): ADD R1, R1, 4H |
| 0073 | s(A3000000): STR R3, R0, 0H |
| 0074 | s(40080004): ADD R0, R0, 4H |
| 0075 | s(42290001): SUB R2, R2, 1H |
| 0076 | s(E9FFFFFA): BNE -6 [0071H] |
| 0077 | t(80E0000C): LDR R0, SP, CH |
| 0078 | t(D105D14C): BLEQ MT [trap=4, pos=1489] |
| 0079 | u(81E00008): LDR R1, SP, 8H |
| 007A | u(A1000000): STR R1, R0, 0H |
| IF tag = 0 THENv s.now := tsno;x INC(tsno) ELSEy sz.noa := ntsno;b INC(ntsno) ENDc ; |
| 007B | v(80E00008): LDR R0, SP, 8H |
| 007C | v(E900000A): BNE 10 [0087H] |
| 007D | w(80E0000C): LDR R0, SP, CH |
| 007E | w(D105F44C): BLEQ MT [trap=4, pos=1524] |
| 007F | x .FIXUP D |
| 007F | x(8D000016): LDR SB, MT, MOD0 [EBNF] |
| 0080 | x(81D00048): LDR R1, SB, 48H [data] |
| 0081 | x(A1000024): STR R1, R0, 24H |
| 0082 | y(40D80048): ADD R0, SB, 48H |
| 0083 | y(81000000): LDR R1, R0, 0H |
| 0084 | y(41180001): ADD R1, R1, 1H |
| 0085 | y(A1000000): STR R1, R0, 0H |
| 0086 | z(E7000009): B 9 [0090H] |
| 0087 | a(80E0000C): LDR R0, SP, CH |
| 0088 | a(D106114C): BLEQ MT [trap=4, pos=1553] |
| 0089 | b .FIXUP D |
| 0089 | b(8D00000A): LDR SB, MT, MOD0 [EBNF] |
| 008A | b(81D0004C): LDR R1, SB, 4CH [data] |
| 008B | b(A1000024): STR R1, R0, 24H |
| 008C | c(40D8004C): ADD R0, SB, 4CH |
| 008D | c(81000000): LDR R1, R0, 0H |
| 008E | c(41180001): ADD R1, R1, 1H |
| 008F | c(A1000000): STR R1, R0, 0H |
| s.nextd := root;e root := s |
| 0090 | d(80E0000C): LDR R0, SP, CH |
| 0091 | d(D106394C): BLEQ MT [trap=4, pos=1593] |
| 0092 | e .FIXUP D |
| 0092 | e(8D000009): LDR SB, MT, MOD0 [EBNF] |
| 0093 | e(81D00060): LDR R1, SB, 60H [data] |
| 0094 | e(A1000030): STR R1, R0, 30H |
| ENDf ; |
| 0095 | f(80E0000C): LDR R0, SP, CH |
| 0096 | f(A0D00060): STR R0, SB, 60H |
| RETURN s |
| ENDg This; |
| 0097 | g(80E0000C): LDR R0, SP, CH |
| 0098 | g(8FE00000): LDR LNK, SP, 0H |
| 0099 | g(4EE80010): ADD SP, SP, 10H |
| 009A | g(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 |
| 009B | h(4EE90014): SUB SP, SP, 14H |
| 009C | h(AFE00000): STR LNK, SP, 0H |
| 009D | h(A0E00004): STR R0, SP, 4H |
| 009E | h(A1E00008): STR R1, SP, 8H |
| 009F | h(A2E0000C): STR R2, SP, CH |
| 00A0 | i(40E80010): ADD R0, SP, 10H |
| 00A1 | i .FIXUP D |
| 00A1 | i(8D00000F): LDR SB, MT, MOD0 [EBNF] |
| 00A2 | i(41D80000): ADD R1, SB, 0H [data] |
| 00A3 | i(D706C00C): BL MT [trap=0, pos=1728] |
| 00A4 | j(80E00010): LDR R0, SP, 10H |
| 00A5 | j(D106C64C): BLEQ MT [trap=4, pos=1734] |
| 00A6 | k(81E00004): LDR R1, SP, 4H |
| 00A7 | k(A1000000): STR R1, R0, 0H |
| 00A8 | l(80E00010): LDR R0, SP, 10H |
| 00A9 | l(D106D04C): BLEQ MT [trap=4, pos=1744] |
| 00AA | m(81E00008): LDR R1, SP, 8H |
| 00AB | m(A100000C): STR R1, R0, CH |
| 00AC | n(80E00010): LDR R0, SP, 10H |
| 00AD | n(D106DA4C): BLEQ MT [trap=4, pos=1754] |
| 00AE | o(81E0000C): LDR R1, SP, CH |
| 00AF | o(A1000010): STR R1, R0, 10H |
| ENDp New; |
| 00B0 | p(80E00010): LDR R0, SP, 10H |
| 00B1 | p(8FE00000): LDR LNK, SP, 0H |
| 00B2 | p(4EE80014): ADD SP, SP, 14H |
| 00B3 | p(C700000F): B LNK |
| |
| (*------------------- scanner --------------------*) |
| |
| PROCEDURE GetSym; |
| VAR i: INTEGER; |
| BEGINq |
| 00B4 | q(4EE90008): SUB SP, SP, 8H |
| 00B5 | q(AFE00000): STR LNK, SP, 0H |
| WHILE ~R.eot &r (sch <= " ")t DOu Texts.Read(R,v ch)w ENDx ; |
| 00B6 | r .FIXUP D |
| 00B6 | r(8D000015): LDR SB, MT, MOD0 [EBNF] |
| 00B7 | r(90D00068): LDR R0, SB, 68H [data] |
| 00B8 | s(E900000C): BNE 12 [00C5H] |
| 00B9 | t .FIXUP D |
| 00B9 | t(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 00BA | t(90D0003C): LDR R0, SB, 3CH [data] |
| 00BB | t(40090020): SUB R0, R0, 20H |
| 00BC | u(EE000008): BGT 8 [00C5H] |
| 00BD | v .FIXUP D |
| 00BD | v(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 00BE | v(40D80068): ADD R0, SB, 68H [data] |
| 00BF | v .FIXUP D |
| 00BF | v(8D100002): LDR SB, MT, MOD1 [Texts] |
| 00C0 | v(41D80002): ADD R1, SB, VAR2 |
| 00C1 | w .FIXUP D |
| 00C1 | w(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 00C2 | w(42D8003C): ADD R2, SB, 3CH [data] |
| 00C3 | x .FIXUP P |
| 00C3 | x(F711307C): BL MOD1 [Texts] PROC19 |
| 00C4 | x(E7FFFFF1): B -15 [00B6H] |
| IF (ch >= "a")y & (zch <= "z")a OR (bch >= "A")c & (dch <= "Z")e THENf |
| 00C5 | y .FIXUP D |
| 00C5 | y(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 00C6 | y(90D0003C): LDR R0, SB, 3CH [data] |
| 00C7 | y(40090061): SUB R0, R0, 61H |
| 00C8 | z(E5000004): BLT 4 [00CDH] |
| 00C9 | a .FIXUP D |
| 00C9 | a(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 00CA | a(90D0003C): LDR R0, SB, 3CH [data] |
| 00CB | a(4009007A): SUB R0, R0, 7AH |
| 00CC | b(E6000008): BLE 8 [00D5H] |
| 00CD | c .FIXUP D |
| 00CD | c(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 00CE | c(90D0003C): LDR R0, SB, 3CH [data] |
| 00CF | c(40090041): SUB R0, R0, 41H |
| 00D0 | d(E5000035): BLT 53 [0106H] |
| 00D1 | e .FIXUP D |
| 00D1 | e(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 00D2 | e(90D0003C): LDR R0, SB, 3CH [data] |
| 00D3 | e(4009005A): SUB R0, R0, 5AH |
| 00D4 | f(EE000031): BGT 49 [0106H] |
| sym := ident;g i := 0;h |
| 00D5 | g(40000000): MOV R0, R0, 0H |
| 00D6 | g .FIXUP D |
| 00D6 | g(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 00D7 | g(A0D00040): STR R0, SB, 40H [data] |
| 00D8 | h(40000000): MOV R0, R0, 0H |
| 00D9 | h(A0E00004): STR R0, SP, 4H |
| REPEAT |
| IF i < IdLen-1 THENi id[i]j := ch;k INC(i) ENDl ; |
| 00DA | i(80E00004): LDR R0, SP, 4H |
| 00DB | i(4009000F): SUB R0, R0, FH |
| 00DC | i(ED00000A): BGE 10 [00E7H] |
| 00DD | j(80E00004): LDR R0, SP, 4H |
| 00DE | j(41090010): SUB R1, R0, 10H |
| 00DF | j(DA08251C): BLCC MT [trap=1, pos=2085] |
| 00E0 | j .FIXUP D |
| 00E0 | j(8D00000A): LDR SB, MT, MOD0 [EBNF] |
| 00E1 | j(00D80000): ADD R0, SB, R0 [global array] |
| 00E2 | k(91D0003C): LDR R1, SB, 3CH |
| 00E3 | k(B1000050): STR R1, R0, 50H |
| 00E4 | l(80E00004): LDR R0, SP, 4H |
| 00E5 | l(40080001): ADD R0, R0, 1H |
| 00E6 | l(A0E00004): STR R0, SP, 4H |
| Texts.Read(R,m ch)n |
| 00E7 | m .FIXUP D |
| 00E7 | m(8D000007): LDR SB, MT, MOD0 [EBNF] |
| 00E8 | m(40D80068): ADD R0, SB, 68H [data] |
| 00E9 | m .FIXUP D |
| 00E9 | m(8D100002): LDR SB, MT, MOD1 [Texts] |
| 00EA | m(41D80002): ADD R1, SB, VAR2 |
| 00EB | n .FIXUP D |
| 00EB | n(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 00EC | n(42D8003C): ADD R2, SB, 3CH [data] |
| UNTILo ~((ch >= "a")p & (qch <= "z")r OR (sch >= "A")t & (uch <= "Z")v);w |
| 00ED | o .FIXUP P |
| 00ED | o(F711302A): BL MOD1 [Texts] PROC19 |
| 00EE | p .FIXUP D |
| 00EE | p(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 00EF | p(90D0003C): LDR R0, SB, 3CH [data] |
| 00F0 | p(40090061): SUB R0, R0, 61H |
| 00F1 | q(E5000004): BLT 4 [00F6H] |
| 00F2 | r .FIXUP D |
| 00F2 | r(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 00F3 | r(90D0003C): LDR R0, SB, 3CH [data] |
| 00F4 | r(4009007A): SUB R0, R0, 7AH |
| 00F5 | s(E6FFFFE4): BLE -28 [00DAH] |
| 00F6 | t .FIXUP D |
| 00F6 | t(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 00F7 | t(90D0003C): LDR R0, SB, 3CH [data] |
| 00F8 | t(40090041): SUB R0, R0, 41H |
| 00F9 | u(E5000004): BLT 4 [00FEH] |
| 00FA | v .FIXUP D |
| 00FA | v(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 00FB | v(90D0003C): LDR R0, SB, 3CH [data] |
| 00FC | v(4009005A): SUB R0, R0, 5AH |
| 00FD | w(E6FFFFDC): BLE -36 [00DAH] |
| id[i]x := 0X |
| 00FE | x(80E00004): LDR R0, SP, 4H |
| 00FF | x(41090010): SUB R1, R0, 10H |
| 0100 | x(DA08A61C): BLCC MT [trap=1, pos=2214] |
| 0101 | x .FIXUP D |
| 0101 | x(8D000007): LDR SB, MT, MOD0 [EBNF] |
| 0102 | x(00D80000): ADD R0, SB, R0 [global array] |
| ELSEy |
| 0103 | y(41000000): MOV R1, R0, 0H |
| 0104 | y(B1000050): STR R1, R0, 50H |
| IFz ch = 22X THENa |
| 0105 | z(E700008C): B 140 [0192H] |
| 0106 | a .FIXUP D |
| 0106 | a(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 0107 | a(90D0003C): LDR R0, SB, 3CH [data] |
| 0108 | a(40090022): SUB R0, R0, 22H |
| 0109 | a(E9000036): BNE 54 [0140H] |
| Texts.Read(R,b ch)c;d sym := literal;e i := 0;f |
| 010A | b .FIXUP D |
| 010A | b(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 010B | b(40D80068): ADD R0, SB, 68H [data] |
| 010C | b .FIXUP D |
| 010C | b(8D100002): LDR SB, MT, MOD1 [Texts] |
| 010D | b(41D80002): ADD R1, SB, VAR2 |
| 010E | c .FIXUP D |
| 010E | c(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 010F | c(42D8003C): ADD R2, SB, 3CH [data] |
| 0110 | d .FIXUP P |
| 0110 | d(F7113023): BL MOD1 [Texts] PROC19 |
| 0111 | e(40000002): MOV R0, R0, 2H |
| 0112 | e .FIXUP D |
| 0112 | e(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 0113 | e(A0D00040): STR R0, SB, 40H [data] |
| 0114 | f(40000000): MOV R0, R0, 0H |
| 0115 | f(A0E00004): STR R0, SP, 4H |
| REPEAT (*at least one char*) |
| IF i < IdLen-1 THENg id[i]h := ch;i INC(i) ENDj ; |
| 0116 | g(80E00004): LDR R0, SP, 4H |
| 0117 | g(4009000F): SUB R0, R0, FH |
| 0118 | g(ED00000A): BGE 10 [0123H] |
| 0119 | h(80E00004): LDR R0, SP, 4H |
| 011A | h(41090010): SUB R1, R0, 10H |
| 011B | h(DA09481C): BLCC MT [trap=1, pos=2376] |
| 011C | h .FIXUP D |
| 011C | h(8D00000A): LDR SB, MT, MOD0 [EBNF] |
| 011D | h(00D80000): ADD R0, SB, R0 [global array] |
| 011E | i(91D0003C): LDR R1, SB, 3CH |
| 011F | i(B1000050): STR R1, R0, 50H |
| 0120 | j(80E00004): LDR R0, SP, 4H |
| 0121 | j(40080001): ADD R0, R0, 1H |
| 0122 | j(A0E00004): STR R0, SP, 4H |
| Texts.Read(R,k ch)l |
| 0123 | k .FIXUP D |
| 0123 | k(8D000007): LDR SB, MT, MOD0 [EBNF] |
| 0124 | k(40D80068): ADD R0, SB, 68H [data] |
| 0125 | k .FIXUP D |
| 0125 | k(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0126 | k(41D80002): ADD R1, SB, VAR2 |
| 0127 | l .FIXUP D |
| 0127 | l(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 0128 | l(42D8003C): ADD R2, SB, 3CH [data] |
| UNTILm (ch = 22X)n OR (och <= " ")p;q |
| 0129 | m .FIXUP P |
| 0129 | m(F7113019): BL MOD1 [Texts] PROC19 |
| 012A | n .FIXUP D |
| 012A | n(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 012B | n(90D0003C): LDR R0, SB, 3CH [data] |
| 012C | n(40090022): SUB R0, R0, 22H |
| 012D | o(E1000004): BEQ 4 [0132H] |
| 012E | p .FIXUP D |
| 012E | p(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 012F | p(90D0003C): LDR R0, SB, 3CH [data] |
| 0130 | p(40090020): SUB R0, R0, 20H |
| 0131 | q(EEFFFFE4): BGT -28 [0116H] |
| IF ch <= " " THENr error(1)s ENDt ; |
| 0132 | r .FIXUP D |
| 0132 | r(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 0133 | r(90D0003C): LDR R0, SB, 3CH [data] |
| 0134 | r(40090020): SUB R0, R0, 20H |
| 0135 | r(EE000002): BGT 2 [0138H] |
| 0136 | s(40000001): MOV R0, R0, 1H |
| 0137 | t(F7FFFEC8): BL -312 [0000H] |
| id[i]u := 0X |
| 0138 | u(80E00004): LDR R0, SP, 4H |
| 0139 | u(41090010): SUB R1, R0, 10H |
| 013A | u(DA09D81C): BLCC MT [trap=1, pos=2520] |
| 013B | u .FIXUP D |
| 013B | u(8D000009): LDR SB, MT, MOD0 [EBNF] |
| 013C | u(00D80000): ADD R0, SB, R0 [global array] |
| ELSIFv chw = "=" THENx sym := eql |
| 013D | v(41000000): MOV R1, R0, 0H |
| 013E | v(B1000050): STR R1, R0, 50H |
| 013F | w(E700004B): B 75 [018BH] |
| 0140 | x .FIXUP D |
| 0140 | x(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 0141 | x(90D0003C): LDR R0, SB, 3CH [data] |
| 0142 | x(4009003D): SUB R0, R0, 3DH |
| 0143 | x(E9000004): BNE 4 [0148H] |
| ELSIFy chz = "(" THENa sym := lparen |
| 0144 | y(40000007): MOV R0, R0, 7H |
| 0145 | y .FIXUP D |
| 0145 | y(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 0146 | y(A0D00040): STR R0, SB, 40H [data] |
| 0147 | z(E7000043): B 67 [018BH] |
| 0148 | a .FIXUP D |
| 0148 | a(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 0149 | a(90D0003C): LDR R0, SB, 3CH [data] |
| 014A | a(40090028): SUB R0, R0, 28H |
| 014B | a(E9000004): BNE 4 [0150H] |
| ELSIFb chc = ")" THENd sym := rparen |
| 014C | b(40000003): MOV R0, R0, 3H |
| 014D | b .FIXUP D |
| 014D | b(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 014E | b(A0D00040): STR R0, SB, 40H [data] |
| 014F | c(E700003B): B 59 [018BH] |
| 0150 | d .FIXUP D |
| 0150 | d(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 0151 | d(90D0003C): LDR R0, SB, 3CH [data] |
| 0152 | d(40090029): SUB R0, R0, 29H |
| 0153 | d(E9000004): BNE 4 [0158H] |
| ELSIFe chf = "[" THENg sym := lbrak |
| 0154 | e(40000008): MOV R0, R0, 8H |
| 0155 | e .FIXUP D |
| 0155 | e(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 0156 | e(A0D00040): STR R0, SB, 40H [data] |
| 0157 | f(E7000033): B 51 [018BH] |
| 0158 | g .FIXUP D |
| 0158 | g(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 0159 | g(90D0003C): LDR R0, SB, 3CH [data] |
| 015A | g(4009005B): SUB R0, R0, 5BH |
| 015B | g(E9000004): BNE 4 [0160H] |
| ELSIFh chi = "]" THENj sym := rbrak |
| 015C | h(40000004): MOV R0, R0, 4H |
| 015D | h .FIXUP D |
| 015D | h(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 015E | h(A0D00040): STR R0, SB, 40H [data] |
| 015F | i(E700002B): B 43 [018BH] |
| 0160 | j .FIXUP D |
| 0160 | j(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 0161 | j(90D0003C): LDR R0, SB, 3CH [data] |
| 0162 | j(4009005D): SUB R0, R0, 5DH |
| 0163 | j(E9000004): BNE 4 [0168H] |
| ELSIFk chl = "{" THENm sym := lbrace |
| 0164 | k(40000009): MOV R0, R0, 9H |
| 0165 | k .FIXUP D |
| 0165 | k(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 0166 | k(A0D00040): STR R0, SB, 40H [data] |
| 0167 | l(E7000023): B 35 [018BH] |
| 0168 | m .FIXUP D |
| 0168 | m(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 0169 | m(90D0003C): LDR R0, SB, 3CH [data] |
| 016A | m(4009007B): SUB R0, R0, 7BH |
| 016B | m(E9000004): BNE 4 [0170H] |
| ELSIFn cho = "}" THENp sym := rbrace |
| 016C | n(40000005): MOV R0, R0, 5H |
| 016D | n .FIXUP D |
| 016D | n(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 016E | n(A0D00040): STR R0, SB, 40H [data] |
| 016F | o(E700001B): B 27 [018BH] |
| 0170 | p .FIXUP D |
| 0170 | p(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 0171 | p(90D0003C): LDR R0, SB, 3CH [data] |
| 0172 | p(4009007D): SUB R0, R0, 7DH |
| 0173 | p(E9000004): BNE 4 [0178H] |
| ELSIFq chr = "|" THENs sym := bar |
| 0174 | q(4000000A): MOV R0, R0, AH |
| 0175 | q .FIXUP D |
| 0175 | q(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 0176 | q(A0D00040): STR R0, SB, 40H [data] |
| 0177 | r(E7000013): B 19 [018BH] |
| 0178 | s .FIXUP D |
| 0178 | s(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 0179 | s(90D0003C): LDR R0, SB, 3CH [data] |
| 017A | s(4009007C): SUB R0, R0, 7CH |
| 017B | s(E9000004): BNE 4 [0180H] |
| ELSIFt chu = "." THENv sym := period |
| 017C | t(40000006): MOV R0, R0, 6H |
| 017D | t .FIXUP D |
| 017D | t(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 017E | t(A0D00040): STR R0, SB, 40H [data] |
| 017F | u(E700000B): B 11 [018BH] |
| 0180 | v .FIXUP D |
| 0180 | v(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 0181 | v(90D0003C): LDR R0, SB, 3CH [data] |
| 0182 | v(4009002E): SUB R0, R0, 2EH |
| 0183 | v(E9000004): BNE 4 [0188H] |
| ELSEw symx := other |
| 0184 | w(4000000B): MOV R0, R0, BH |
| 0185 | w .FIXUP D |
| 0185 | w(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 0186 | w(A0D00040): STR R0, SB, 40H [data] |
| 0187 | x(E7000003): B 3 [018BH] |
| ENDy ; |
| 0188 | y(4000000C): MOV R0, R0, CH |
| 0189 | y .FIXUP D |
| 0189 | y(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 018A | y(A0D00040): STR R0, SB, 40H [data] |
| Texts.Read(R,z ch)a |
| 018B | z .FIXUP D |
| 018B | z(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 018C | z(40D80068): ADD R0, SB, 68H [data] |
| 018D | z .FIXUP D |
| 018D | z(8D100002): LDR SB, MT, MOD1 [Texts] |
| 018E | z(41D80002): ADD R1, SB, VAR2 |
| 018F | a .FIXUP D |
| 018F | a(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 0190 | a(42D8003C): ADD R2, SB, 3CH [data] |
| ENDb |
| 0191 | b .FIXUP P |
| 0191 | b(F7113068): BL MOD1 [Texts] PROC19 |
| ENDc GetSym; |
| 0192 | c(8FE00000): LDR LNK, SP, 0H |
| 0193 | c(4EE80008): ADD SP, SP, 8H |
| 0194 | c(C700000F): B LNK |
| |
| (*-------------------- parser ---------------------*) |
| |
| PROCEDURE expression(VAR x: Item); |
| VAR y: Item; |
| |
| PROCEDUREd term(VAR x: Item); |
| 0195 | d(E7000071): B 113 [0207H] |
| VAR y: Item; |
| |
| PROCEDUREe factor(VAR x: Item); |
| 0196 | e(E700005B): B 91 [01F2H] |
| VAR y: Item; |
| BEGINf |
| 0197 | f(4EE9000C): SUB SP, SP, CH |
| 0198 | f(AFE00000): STR LNK, SP, 0H |
| 0199 | f(A0E00004): STR R0, SP, 4H |
| IF sym = literal THENg x := This(id,h 0)i;j GetSym |
| 019A | g .FIXUP D |
| 019A | g(8D00000B): LDR SB, MT, MOD0 [EBNF] |
| 019B | g(80D00040): LDR R0, SB, 40H [data] |
| 019C | g(40090002): SUB R0, R0, 2H |
| 019D | g(E9000008): BNE 8 [01A6H] |
| 019E | h .FIXUP D |
| 019E | h(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 019F | h(40D80050): ADD R0, SB, 50H [data] |
| 01A0 | i(41000000): MOV R1, R0, 0H |
| 01A1 | j(F7FFFEA9): BL -343 [004BH] |
| 01A2 | j(81E00004): LDR R1, SP, 4H |
| 01A3 | j(A0100000): STR R0, R1, 0H |
| ELSIFk syml = ident THENm x := This(id,n 1)o;p GetSym |
| 01A4 | k(F7FFFF0F): BL -241 [00B4H] |
| 01A5 | l(E7000049): B 73 [01EFH] |
| 01A6 | m .FIXUP D |
| 01A6 | m(8D000008): LDR SB, MT, MOD0 [EBNF] |
| 01A7 | m(80D00040): LDR R0, SB, 40H [data] |
| 01A8 | m(E9000008): BNE 8 [01B1H] |
| 01A9 | n .FIXUP D |
| 01A9 | n(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 01AA | n(40D80050): ADD R0, SB, 50H [data] |
| 01AB | o(41000001): MOV R1, R0, 1H |
| 01AC | p(F7FFFE9E): BL -354 [004BH] |
| 01AD | p(81E00004): LDR R1, SP, 4H |
| 01AE | p(A0100000): STR R0, R1, 0H |
| ELSIFq symr = lparen THENs |
| 01AF | q(F7FFFF04): BL -252 [00B4H] |
| 01B0 | r(E700003E): B 62 [01EFH] |
| 01B1 | s .FIXUP D |
| 01B1 | s(8D000008): LDR SB, MT, MOD0 [EBNF] |
| 01B2 | s(80D00040): LDR R0, SB, 40H [data] |
| 01B3 | s(40090003): SUB R0, R0, 3H |
| 01B4 | s(E900000C): BNE 12 [01C1H] |
| GetSym;t expression(x)u;v |
| 01B5 | t(F7FFFEFE): BL -258 [00B4H] |
| 01B6 | u(80E00004): LDR R0, SP, 4H |
| 01B7 | v(F7FFFFDD): BL -35 [0195H] |
| IF sym = rparen THENw GetSym ELSEx errory(2)z ENDa |
| 01B8 | w .FIXUP D |
| 01B8 | w(8D000007): LDR SB, MT, MOD0 [EBNF] |
| 01B9 | w(80D00040): LDR R0, SB, 40H [data] |
| 01BA | w(40090008): SUB R0, R0, 8H |
| 01BB | w(E9000002): BNE 2 [01BEH] |
| 01BC | x(F7FFFEF7): BL -265 [00B4H] |
| 01BD | y(E7000002): B 2 [01C0H] |
| 01BE | z(40000002): MOV R0, R0, 2H |
| 01BF | a(F7FFFE40): BL -448 [0000H] |
| ELSIF symb = lbrak THENc |
| 01C0 | b(E700002E): B 46 [01EFH] |
| 01C1 | c .FIXUP D |
| 01C1 | c(8D000009): LDR SB, MT, MOD0 [EBNF] |
| 01C2 | c(80D00040): LDR R0, SB, 40H [data] |
| 01C3 | c(40090004): SUB R0, R0, 4H |
| 01C4 | c(E9000012): BNE 18 [01D7H] |
| GetSym;d expression(y)e;f x := New(2,g NIL,h y)i;j |
| 01C5 | d(F7FFFEEE): BL -274 [00B4H] |
| 01C6 | e(40E80008): ADD R0, SP, 8H |
| 01C7 | f(F7FFFFCD): BL -51 [0195H] |
| 01C8 | g(40000002): MOV R0, R0, 2H |
| 01C9 | h(41000000): MOV R1, R0, 0H |
| 01CA | i(82E00008): LDR R2, SP, 8H |
| 01CB | j(F7FFFECF): BL -305 [009BH] |
| 01CC | j(81E00004): LDR R1, SP, 4H |
| 01CD | j(A0100000): STR R0, R1, 0H |
| IF sym = rbrak THENk GetSym ELSEl errorm(3)n ENDo |
| 01CE | k .FIXUP D |
| 01CE | k(8D00000D): LDR SB, MT, MOD0 [EBNF] |
| 01CF | k(80D00040): LDR R0, SB, 40H [data] |
| 01D0 | k(40090009): SUB R0, R0, 9H |
| 01D1 | k(E9000002): BNE 2 [01D4H] |
| 01D2 | l(F7FFFEE1): BL -287 [00B4H] |
| 01D3 | m(E7000002): B 2 [01D6H] |
| 01D4 | n(40000003): MOV R0, R0, 3H |
| 01D5 | o(F7FFFE2A): BL -470 [0000H] |
| ELSIF symp = lbrace THENq |
| 01D6 | p(E7000018): B 24 [01EFH] |
| 01D7 | q .FIXUP D |
| 01D7 | q(8D000009): LDR SB, MT, MOD0 [EBNF] |
| 01D8 | q(80D00040): LDR R0, SB, 40H [data] |
| 01D9 | q(40090005): SUB R0, R0, 5H |
| 01DA | q(E9000012): BNE 18 [01EDH] |
| GetSym;r expression(y)s;t x := New(3,u NIL,v y)w;x |
| 01DB | r(F7FFFED8): BL -296 [00B4H] |
| 01DC | s(40E80008): ADD R0, SP, 8H |
| 01DD | t(F7FFFFB7): BL -73 [0195H] |
| 01DE | u(40000003): MOV R0, R0, 3H |
| 01DF | v(41000000): MOV R1, R0, 0H |
| 01E0 | w(82E00008): LDR R2, SP, 8H |
| 01E1 | x(F7FFFEB9): BL -327 [009BH] |
| 01E2 | x(81E00004): LDR R1, SP, 4H |
| 01E3 | x(A0100000): STR R0, R1, 0H |
| IF sym = rbrace THENy GetSym ELSEz errora(4)b ENDc |
| 01E4 | y .FIXUP D |
| 01E4 | y(8D00000D): LDR SB, MT, MOD0 [EBNF] |
| 01E5 | y(80D00040): LDR R0, SB, 40H [data] |
| 01E6 | y(4009000A): SUB R0, R0, AH |
| 01E7 | y(E9000002): BNE 2 [01EAH] |
| 01E8 | z(F7FFFECB): BL -309 [00B4H] |
| 01E9 | a(E7000002): B 2 [01ECH] |
| 01EA | b(40000004): MOV R0, R0, 4H |
| 01EB | c(F7FFFE14): BL -492 [0000H] |
| ELSE errord(5)e |
| 01EC | d(E7000002): B 2 [01EFH] |
| 01ED | e(40000005): MOV R0, R0, 5H |
| ENDf |
| 01EE | f(F7FFFE11): BL -495 [0000H] |
| ENDg factor; |
| 01EF | g(8FE00000): LDR LNK, SP, 0H |
| 01F0 | g(4EE8000C): ADD SP, SP, CH |
| 01F1 | g(C700000F): B LNK |
| |
| BEGINh (*term*) factor(x)i;j |
| 01F2 | h(4EE9000C): SUB SP, SP, CH |
| 01F3 | h(AFE00000): STR LNK, SP, 0H |
| 01F4 | h(A0E00004): STR R0, SP, 4H |
| 01F5 | i(80E00004): LDR R0, SP, 4H |
| 01F6 | j(F7FFFFA0): BL -96 [0197H] |
| IF sym < bar THENk term(y)l;m x := New(4,n x,o y)p ENDq |
| 01F7 | k .FIXUP D |
| 01F7 | k(8D000013): LDR SB, MT, MOD0 [EBNF] |
| 01F8 | k(80D00040): LDR R0, SB, 40H [data] |
| 01F9 | k(40090006): SUB R0, R0, 6H |
| 01FA | k(ED000009): BGE 9 [0204H] |
| 01FB | l(40E80008): ADD R0, SP, 8H |
| 01FC | m(F7FFFFF5): BL -11 [01F2H] |
| 01FD | n(40000004): MOV R0, R0, 4H |
| 01FE | o(81E00004): LDR R1, SP, 4H |
| 01FF | o(81100000): LDR R1, R1, 0H |
| 0200 | p(82E00008): LDR R2, SP, 8H |
| 0201 | q(F7FFFE99): BL -359 [009BH] |
| 0202 | q(81E00004): LDR R1, SP, 4H |
| 0203 | q(A0100000): STR R0, R1, 0H |
| ENDr term; |
| 0204 | r(8FE00000): LDR LNK, SP, 0H |
| 0205 | r(4EE8000C): ADD SP, SP, CH |
| 0206 | r(C700000F): B LNK |
| |
| BEGINs (*expression*) term(x)t;u |
| 0207 | s(4EE9000C): SUB SP, SP, CH |
| 0208 | s(AFE00000): STR LNK, SP, 0H |
| 0209 | s(A0E00004): STR R0, SP, 4H |
| 020A | t(80E00004): LDR R0, SP, 4H |
| 020B | u(F7FFFFE6): BL -26 [01F2H] |
| IF sym = bar THENv GetSym;w expression(y)x;y x := New(5,z x,a y)b ENDc |
| 020C | v .FIXUP D |
| 020C | v(8D000015): LDR SB, MT, MOD0 [EBNF] |
| 020D | v(80D00040): LDR R0, SB, 40H [data] |
| 020E | v(40090006): SUB R0, R0, 6H |
| 020F | v(E900000A): BNE 10 [021AH] |
| 0210 | w(F7FFFEA3): BL -349 [00B4H] |
| 0211 | x(40E80008): ADD R0, SP, 8H |
| 0212 | y(F7FFFFF4): BL -12 [0207H] |
| 0213 | z(40000005): MOV R0, R0, 5H |
| 0214 | a(81E00004): LDR R1, SP, 4H |
| 0215 | a(81100000): LDR R1, R1, 0H |
| 0216 | b(82E00008): LDR R2, SP, 8H |
| 0217 | c(F7FFFE83): BL -381 [009BH] |
| 0218 | c(81E00004): LDR R1, SP, 4H |
| 0219 | c(A0100000): STR R0, R1, 0H |
| ENDd expression; |
| 021A | d(8FE00000): LDR LNK, SP, 0H |
| 021B | d(4EE8000C): ADD SP, SP, CH |
| 021C | d(C700000F): B LNK |
| |
| PROCEDURE production; |
| VAR s: Symbol; |
| BEGINe (*sym = ident*) |
| 021D | e(4EE90008): SUB SP, SP, 8H |
| 021E | e(AFE00000): STR LNK, SP, 0H |
| s := This(id,f 1)g;h GetSym;i |
| 021F | f .FIXUP D |
| 021F | f(8D000013): LDR SB, MT, MOD0 [EBNF] |
| 0220 | f(40D80050): ADD R0, SB, 50H [data] |
| 0221 | g(41000001): MOV R1, R0, 1H |
| 0222 | h(F7FFFE28): BL -472 [004BH] |
| 0223 | h(A0E00004): STR R0, SP, 4H |
| 0224 | i(F7FFFE8F): BL -369 [00B4H] |
| IF sym = eql THENj GetSym ELSEk errorl(7)m ENDn ; |
| 0225 | j .FIXUP D |
| 0225 | j(8D000006): LDR SB, MT, MOD0 [EBNF] |
| 0226 | j(80D00040): LDR R0, SB, 40H [data] |
| 0227 | j(40090007): SUB R0, R0, 7H |
| 0228 | j(E9000002): BNE 2 [022BH] |
| 0229 | k(F7FFFE8A): BL -374 [00B4H] |
| 022A | l(E7000002): B 2 [022DH] |
| 022B | m(40000007): MOV R0, R0, 7H |
| 022C | n(F7FFFDD3): BL -557 [0000H] |
| expression(s.vo)p;q |
| 022D | o(80E00004): LDR R0, SP, 4H |
| 022E | o(D110324C): BLEQ MT [trap=4, pos=4146] |
| 022F | p(40080010): ADD R0, R0, 10H |
| 0230 | q(F7FFFFD6): BL -42 [0207H] |
| IF sym = period THENr GetSym ELSEs errort(8)u ENDv |
| 0231 | r .FIXUP D |
| 0231 | r(8D00000C): LDR SB, MT, MOD0 [EBNF] |
| 0232 | r(80D00040): LDR R0, SB, 40H [data] |
| 0233 | r(4009000B): SUB R0, R0, BH |
| 0234 | r(E9000002): BNE 2 [0237H] |
| 0235 | s(F7FFFE7E): BL -386 [00B4H] |
| 0236 | t(E7000002): B 2 [0239H] |
| 0237 | u(40000008): MOV R0, R0, 8H |
| 0238 | v(F7FFFDC7): BL -569 [0000H] |
| ENDw production; |
| 0239 | w(8FE00000): LDR LNK, SP, 0H |
| 023A | w(4EE80008): ADD SP, SP, 8H |
| 023B | w(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 |
| 023C | x(4EE9000C): SUB SP, SP, CH |
| 023D | x(AFE00000): STR LNK, SP, 0H |
| 023E | x(A0E00004): STR R0, SP, 4H |
| 023F | x(A1E00008): STR R1, SP, 8H |
| 0240 | y .FIXUP D |
| 0240 | y(8D00000F): LDR SB, MT, MOD0 [EBNF] |
| 0241 | y(40D80068): ADD R0, SB, 68H [data] |
| 0242 | y .FIXUP D |
| 0242 | y(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0243 | y(41D80002): ADD R1, SB, VAR2 |
| 0244 | z(82E00004): LDR R2, SP, 4H |
| 0245 | a(83E00008): LDR R3, SP, 8H |
| 0246 | b .FIXUP P |
| 0246 | b(F71120B5): BL MOD1 [Texts] PROC18 |
| 0247 | c .FIXUP D |
| 0247 | c(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 0248 | c(40D80068): ADD R0, SB, 68H [data] |
| 0249 | c .FIXUP D |
| 0249 | c(8D100002): LDR SB, MT, MOD1 [Texts] |
| 024A | c(41D80002): ADD R1, SB, VAR2 |
| 024B | d .FIXUP D |
| 024B | d(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 024C | d(42D8003C): ADD R2, SB, 3CH [data] |
| 024D | e .FIXUP P |
| 024D | e(F7113007): BL MOD1 [Texts] PROC19 |
| tsno := 0;f ntsno := 0;g lastpos := 0;h GetSym;i |
| 024E | f(40000000): MOV R0, R0, 0H |
| 024F | f .FIXUP D |
| 024F | f(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 0250 | f(A0D00048): STR R0, SB, 48H [data] |
| 0251 | g(40000000): MOV R0, R0, 0H |
| 0252 | g(A0D0004C): STR R0, SB, 4CH |
| 0253 | h(40000000): MOV R0, R0, 0H |
| 0254 | h(A0D00044): STR R0, SB, 44H |
| 0255 | i(F7FFFE5E): BL -418 [00B4H] |
| WHILE sym = ident DOj production ENDk ; |
| 0256 | j .FIXUP D |
| 0256 | j(8D000007): LDR SB, MT, MOD0 [EBNF] |
| 0257 | j(80D00040): LDR R0, SB, 40H [data] |
| 0258 | j(E9000002): BNE 2 [025BH] |
| 0259 | k(F7FFFFC3): BL -61 [021DH] |
| 025A | k(E7FFFFFB): B -5 [0256H] |
| Texts.WriteString(W,l "compiled")m;n Texts.WriteLn(W)o;p Texts.Append(Oberon.Log,q W.buf)r |
| 025B | l .FIXUP D |
| 025B | l(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 025C | l(40D8009C): ADD R0, SB, 9CH [data] |
| 025D | l .FIXUP D |
| 025D | l(8D100002): LDR SB, MT, MOD1 [Texts] |
| 025E | l(41D80005): ADD R1, SB, VAR5 |
| 025F | m .FIXUP D |
| 025F | m(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 0260 | m(42D800DC): ADD R2, SB, DCH ["compiled"] |
| 0261 | m(43000009): MOV R3, R0, 9H |
| 0262 | n .FIXUP P |
| 0262 | n(F711D015): BL MOD1 [Texts] PROC29 |
| 0263 | o .FIXUP D |
| 0263 | o(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 0264 | o(40D8009C): ADD R0, SB, 9CH [data] |
| 0265 | o .FIXUP D |
| 0265 | o(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0266 | o(41D80005): ADD R1, SB, VAR5 |
| 0267 | p .FIXUP P |
| 0267 | p(F711C005): BL MOD1 [Texts] PROC28 |
| 0268 | q .FIXUP D |
| 0268 | q(8D400003): LDR SB, MT, MOD4 [Oberon] |
| 0269 | q(80D0000D): LDR R0, SB, VAR13 |
| 026A | r .FIXUP D |
| 026A | r(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 026B | r(81D0009C): LDR R1, SB, 9CH [data] |
| ENDs syntax; |
| 026C | s .FIXUP P |
| 026C | s(F710E005): BL MOD1 [Texts] PROC14 |
| 026D | s(8FE00000): LDR LNK, SP, 0H |
| 026E | s(4EE8000C): ADD SP, SP, CH |
| 026F | s(C700000F): B LNK |
| |
| PROCEDURE Compile*; |
| VAR beg, end, time: LONGINT; |
| T: Texts.Text; |
| S: Texts.Scanner; |
| BEGINt root := NIL;u |
| 0270 | t .PROC 1 |
| 0270 | t .COMMAND Compile |
| 0270 | t(4EE90088): SUB SP, SP, 88H |
| 0271 | t(AFE00000): STR LNK, SP, 0H |
| 0272 | u(40000000): MOV R0, R0, 0H |
| 0273 | u .FIXUP D |
| 0273 | u(8D000009): LDR SB, MT, MOD0 [EBNF] |
| 0274 | u(A0D00060): STR R0, SB, 60H [data] |
| Texts.OpenScanner(S,v Oberon.Par.text,w Oberon.Par.pos)x;y Texts.Scan(S)z;a |
| 0275 | v(40E80014): ADD R0, SP, 14H |
| 0276 | v .FIXUP D |
| 0276 | v(8D100003): LDR SB, MT, MOD1 [Texts] |
| 0277 | v(41D80003): ADD R1, SB, VAR3 |
| 0278 | w .FIXUP D |
| 0278 | w(8D400002): LDR SB, MT, MOD4 [Oberon] |
| 0279 | w(42D8000E): ADD R2, SB, VAR14 |
| 027A | w(82200008): LDR R2, R2, 8H |
| 027B | x .FIXUP D |
| 027B | x(8D400003): LDR SB, MT, MOD4 [Oberon] |
| 027C | x(43D8000E): ADD R3, SB, VAR14 |
| 027D | x(8330000C): LDR R3, R3, CH |
| 027E | y .FIXUP P |
| 027E | y(F7115012): BL MOD1 [Texts] PROC21 |
| 027F | z(40E80014): ADD R0, SP, 14H |
| 0280 | z .FIXUP D |
| 0280 | z(8D100005): LDR SB, MT, MOD1 [Texts] |
| 0281 | z(41D80003): ADD R1, SB, VAR3 |
| 0282 | a .FIXUP P |
| 0282 | a(F7116004): BL MOD1 [Texts] PROC22 |
| IF (S.class = Texts.Char)b & (cS.c = "@")d THENe |
| 0283 | b(80E00050): LDR R0, SP, 50H |
| 0284 | b(40090006): SUB R0, R0, 6H |
| 0285 | c(E900000E): BNE 14 [0294H] |
| 0286 | d(90E00060): LDR R0, SP, 60H |
| 0287 | d(40090040): SUB R0, R0, 40H |
| 0288 | e(E900000B): BNE 11 [0294H] |
| Oberon.GetSelection(T,f beg,g end,h time)i;j |
| 0289 | f(40E80010): ADD R0, SP, 10H |
| 028A | g(41E80004): ADD R1, SP, 4H |
| 028B | h(42E80008): ADD R2, SP, 8H |
| 028C | i(43E8000C): ADD R3, SP, CH |
| 028D | j .FIXUP P |
| 028D | j(F742900B): BL MOD4 [Oberon] PROC41 |
| IF time >= 0 THENk syntax(T,l beg)m ENDn |
| 028E | k(80E0000C): LDR R0, SP, CH |
| 028F | k(40090000): SUB R0, R0, 0H |
| 0290 | k(E5000003): BLT 3 [0294H] |
| 0291 | l(80E00010): LDR R0, SP, 10H |
| 0292 | m(81E00004): LDR R1, SP, 4H |
| 0293 | n(F7FFFFA8): BL -88 [023CH] |
| END |
| ENDo Compile; |
| 0294 | o(8FE00000): LDR LNK, SP, 0H |
| 0295 | o(4EE80088): ADD SP, SP, 88H |
| 0296 | o(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 |
| 0297 | p .PROC 2 |
| 0297 | p .COMMAND List |
| 0297 | p(4EE90008): SUB SP, SP, 8H |
| 0298 | p(AFE00000): STR LNK, SP, 0H |
| 0299 | q .FIXUP D |
| 0299 | q(8D000019): LDR SB, MT, MOD0 [EBNF] |
| 029A | q(40D8009C): ADD R0, SB, 9CH [data] |
| 029B | q .FIXUP D |
| 029B | q(8D100002): LDR SB, MT, MOD1 [Texts] |
| 029C | q(41D80005): ADD R1, SB, VAR5 |
| 029D | r .FIXUP D |
| 029D | r(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 029E | r(42D800E8): ADD R2, SB, E8H ["Nonterminals:"] |
| 029F | r(4300000E): MOV R3, R0, EH |
| 02A0 | s .FIXUP P |
| 02A0 | s(F711D013): BL MOD1 [Texts] PROC29 |
| 02A1 | t .FIXUP D |
| 02A1 | t(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 02A2 | t(40D8009C): ADD R0, SB, 9CH [data] |
| 02A3 | t .FIXUP D |
| 02A3 | t(8D100002): LDR SB, MT, MOD1 [Texts] |
| 02A4 | t(41D80005): ADD R1, SB, VAR5 |
| 02A5 | u .FIXUP P |
| 02A5 | u(F711C005): BL MOD1 [Texts] PROC28 |
| 02A6 | v .FIXUP D |
| 02A6 | v(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 02A7 | v(80D00060): LDR R0, SB, 60H [data] |
| 02A8 | v(A0E00004): STR R0, SP, 4H |
| WHILE s # NIL DOw |
| 02A9 | w(80E00004): LDR R0, SP, 4H |
| 02AA | w(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 ; |
| 02AB | x(80E00004): LDR R0, SP, 4H |
| 02AC | x(D113DB4C): BLEQ MT [trap=4, pos=5083] |
| 02AD | y(80000000): LDR R0, R0, 0H |
| 02AE | y(40090001): SUB R0, R0, 1H |
| 02AF | y(E9000014): BNE 20 [02C4H] |
| 02B0 | z .FIXUP D |
| 02B0 | z(8D00000A): LDR SB, MT, MOD0 [EBNF] |
| 02B1 | z(40D8009C): ADD R0, SB, 9CH [data] |
| 02B2 | z .FIXUP D |
| 02B2 | z(8D100002): LDR SB, MT, MOD1 [Texts] |
| 02B3 | z(41D80005): ADD R1, SB, VAR5 |
| 02B4 | a(42000009): MOV R2, R0, 9H |
| 02B5 | b .FIXUP P |
| 02B5 | b(F711B010): BL MOD1 [Texts] PROC27 |
| 02B6 | c .FIXUP D |
| 02B6 | c(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 02B7 | c(40D8009C): ADD R0, SB, 9CH [data] |
| 02B8 | c .FIXUP D |
| 02B8 | c(8D100002): LDR SB, MT, MOD1 [Texts] |
| 02B9 | c(41D80005): ADD R1, SB, VAR5 |
| 02BA | d(82E00004): LDR R2, SP, 4H |
| 02BB | d(D114124C): BLEQ MT [trap=4, pos=5138] |
| 02BC | e(42280014): ADD R2, R2, 14H |
| 02BD | e(43000010): MOV R3, R0, 10H |
| 02BE | f .FIXUP P |
| 02BE | f(F711D009): BL MOD1 [Texts] PROC29 |
| 02BF | g .FIXUP D |
| 02BF | g(8D000007): LDR SB, MT, MOD0 [EBNF] |
| 02C0 | g(40D8009C): ADD R0, SB, 9CH [data] |
| 02C1 | g .FIXUP D |
| 02C1 | g(8D100002): LDR SB, MT, MOD1 [Texts] |
| 02C2 | g(41D80005): ADD R1, SB, VAR5 |
| 02C3 | h .FIXUP P |
| 02C3 | h(F711C005): BL MOD1 [Texts] PROC28 |
| s := s.nexti |
| 02C4 | i(80E00004): LDR R0, SP, 4H |
| 02C5 | i(D1143D4C): BLEQ MT [trap=4, pos=5181] |
| ENDj ; |
| 02C6 | j(80000030): LDR R0, R0, 30H |
| 02C7 | j(A0E00004): STR R0, SP, 4H |
| 02C8 | j(E7FFFFE0): B -32 [02A9H] |
| Texts.WriteString(W,k "Terminals:")l;m Texts.WriteLn(W)n;o s := root;p |
| 02C9 | k .FIXUP D |
| 02C9 | k(8D000008): LDR SB, MT, MOD0 [EBNF] |
| 02CA | k(40D8009C): ADD R0, SB, 9CH [data] |
| 02CB | k .FIXUP D |
| 02CB | k(8D100002): LDR SB, MT, MOD1 [Texts] |
| 02CC | k(41D80005): ADD R1, SB, VAR5 |
| 02CD | l .FIXUP D |
| 02CD | l(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 02CE | l(42D800F8): ADD R2, SB, F8H ["Terminals:"] |
| 02CF | l(4300000B): MOV R3, R0, BH |
| 02D0 | m .FIXUP P |
| 02D0 | m(F711D00D): BL MOD1 [Texts] PROC29 |
| 02D1 | n .FIXUP D |
| 02D1 | n(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 02D2 | n(40D8009C): ADD R0, SB, 9CH [data] |
| 02D3 | n .FIXUP D |
| 02D3 | n(8D100002): LDR SB, MT, MOD1 [Texts] |
| 02D4 | n(41D80005): ADD R1, SB, VAR5 |
| 02D5 | o .FIXUP P |
| 02D5 | o(F711C005): BL MOD1 [Texts] PROC28 |
| 02D6 | p .FIXUP D |
| 02D6 | p(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 02D7 | p(80D00060): LDR R0, SB, 60H [data] |
| 02D8 | p(A0E00004): STR R0, SP, 4H |
| WHILE s # NIL DOq |
| 02D9 | q(80E00004): LDR R0, SP, 4H |
| 02DA | q(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 ; |
| 02DB | r(80E00004): LDR R0, SP, 4H |
| 02DC | r(D114B04C): BLEQ MT [trap=4, pos=5296] |
| 02DD | s(80000000): LDR R0, R0, 0H |
| 02DE | s(E9000014): BNE 20 [02F3H] |
| 02DF | t .FIXUP D |
| 02DF | t(8D000009): LDR SB, MT, MOD0 [EBNF] |
| 02E0 | t(40D8009C): ADD R0, SB, 9CH [data] |
| 02E1 | t .FIXUP D |
| 02E1 | t(8D100002): LDR SB, MT, MOD1 [Texts] |
| 02E2 | t(41D80005): ADD R1, SB, VAR5 |
| 02E3 | u(42000009): MOV R2, R0, 9H |
| 02E4 | v .FIXUP P |
| 02E4 | v(F711B00F): BL MOD1 [Texts] PROC27 |
| 02E5 | w .FIXUP D |
| 02E5 | w(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 02E6 | w(40D8009C): ADD R0, SB, 9CH [data] |
| 02E7 | w .FIXUP D |
| 02E7 | w(8D100002): LDR SB, MT, MOD1 [Texts] |
| 02E8 | w(41D80005): ADD R1, SB, VAR5 |
| 02E9 | x(82E00004): LDR R2, SP, 4H |
| 02EA | x(D114E74C): BLEQ MT [trap=4, pos=5351] |
| 02EB | y(42280014): ADD R2, R2, 14H |
| 02EC | y(43000010): MOV R3, R0, 10H |
| 02ED | z .FIXUP P |
| 02ED | z(F711D009): BL MOD1 [Texts] PROC29 |
| 02EE | a .FIXUP D |
| 02EE | a(8D000007): LDR SB, MT, MOD0 [EBNF] |
| 02EF | a(40D8009C): ADD R0, SB, 9CH [data] |
| 02F0 | a .FIXUP D |
| 02F0 | a(8D100002): LDR SB, MT, MOD1 [Texts] |
| 02F1 | a(41D80005): ADD R1, SB, VAR5 |
| 02F2 | b .FIXUP P |
| 02F2 | b(F711C005): BL MOD1 [Texts] PROC28 |
| s := s.nextc |
| 02F3 | c(80E00004): LDR R0, SP, 4H |
| 02F4 | c(D115124C): BLEQ MT [trap=4, pos=5394] |
| ENDd ; |
| 02F5 | d(80000030): LDR R0, R0, 30H |
| 02F6 | d(A0E00004): STR R0, SP, 4H |
| 02F7 | d(E7FFFFE1): B -31 [02D9H] |
| Texts.Append(Oberon.Log,e W.buf)f |
| 02F8 | e .FIXUP D |
| 02F8 | e(8D400008): LDR SB, MT, MOD4 [Oberon] |
| 02F9 | e(80D0000D): LDR R0, SB, VAR13 |
| 02FA | f .FIXUP D |
| 02FA | f(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 02FB | f(81D0009C): LDR R1, SB, 9CH [data] |
| ENDg List; |
| 02FC | g .FIXUP P |
| 02FC | g(F710E00A): BL MOD1 [Texts] PROC14 |
| 02FD | g(8FE00000): LDR LNK, SP, 0H |
| 02FE | g(4EE80008): ADD SP, SP, 8H |
| 02FF | g(C700000F): B LNK |
| |
| (*------------------ Tabulate syntax tree -------------------*) |
| |
| PROCEDURE traverse(x: Item); |
| VAR t: INTEGER; |
| BEGINh |
| 0300 | h(4EE9000C): SUB SP, SP, CH |
| 0301 | h(AFE00000): STR LNK, SP, 0H |
| 0302 | h(A0E00004): STR R0, SP, 4H |
| IF x # NIL THENi t := x.tagj;k |
| 0303 | i(80E00004): LDR R0, SP, 4H |
| 0304 | i(E1000075): BEQ 117 [037AH] |
| 0305 | j(80E00004): LDR R0, SP, 4H |
| 0306 | j(D115EA4C): BLEQ MT [trap=4, pos=5610] |
| 0307 | k(80000000): LDR R0, R0, 0H |
| 0308 | k(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 |
| 0309 | l(80E00008): LDR R0, SP, 8H |
| 030A | l(E900001C): BNE 28 [0327H] |
| 030B | m .FIXUP D |
| 030B | m(8D000011): LDR SB, MT, MOD0 [EBNF] |
| 030C | m(40D8009C): ADD R0, SB, 9CH [data] |
| 030D | m .FIXUP D |
| 030D | m(8D100002): LDR SB, MT, MOD1 [Texts] |
| 030E | m(41D80005): ADD R1, SB, VAR5 |
| 030F | n(42000022): MOV R2, R0, 22H |
| 0310 | o .FIXUP P |
| 0310 | o(F711B014): BL MOD1 [Texts] PROC27 |
| 0311 | p .FIXUP D |
| 0311 | p(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 0312 | p(40D8009C): ADD R0, SB, 9CH [data] |
| 0313 | p .FIXUP D |
| 0313 | p(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0314 | p(41D80005): ADD R1, SB, VAR5 |
| 0315 | q(82E00004): LDR R2, SP, 4H |
| 0316 | q(E1000005): BEQ 5 [031CH] |
| 0317 | q(832FFFF8): LDR R3, R2, FFFFFFF8H |
| 0318 | q(83300004): LDR R3, R3, 4H |
| 0319 | q .FIXUP D |
| 0319 | q(8D000006): LDR SB, MT, MOD0 [EBNF] |
| 031A | q(44D8001C): ADD R4, SB, 1CH [data] |
| 031B | q(04490003): SUB R4, R4, R3 |
| 031C | q(D916332C): BLNE MT [trap=2, pos=5683] |
| 031D | r(42280014): ADD R2, R2, 14H |
| 031E | r(43000010): MOV R3, R0, 10H |
| 031F | s .FIXUP P |
| 031F | s(F711D00F): BL MOD1 [Texts] PROC29 |
| 0320 | t .FIXUP D |
| 0320 | t(8D000007): LDR SB, MT, MOD0 [EBNF] |
| 0321 | t(40D8009C): ADD R0, SB, 9CH [data] |
| 0322 | t .FIXUP D |
| 0322 | t(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0323 | t(41D80005): ADD R1, SB, VAR5 |
| 0324 | u(42000022): MOV R2, R0, 22H |
| ELSIFv tw = 1 THENx Texts.WriteString(W,y x(Symbol)z.id)a |
| 0325 | v .FIXUP P |
| 0325 | v(F711B006): BL MOD1 [Texts] PROC27 |
| 0326 | w(E7000053): B 83 [037AH] |
| 0327 | x(80E00008): LDR R0, SP, 8H |
| 0328 | x(40090001): SUB R0, R0, 1H |
| 0329 | x(E9000010): BNE 16 [033AH] |
| 032A | y .FIXUP D |
| 032A | y(8D000008): LDR SB, MT, MOD0 [EBNF] |
| 032B | y(40D8009C): ADD R0, SB, 9CH [data] |
| 032C | y .FIXUP D |
| 032C | y(8D100002): LDR SB, MT, MOD1 [Texts] |
| 032D | y(41D80005): ADD R1, SB, VAR5 |
| 032E | z(82E00004): LDR R2, SP, 4H |
| 032F | z(E1000005): BEQ 5 [0335H] |
| 0330 | z(832FFFF8): LDR R3, R2, FFFFFFF8H |
| 0331 | z(83300004): LDR R3, R3, 4H |
| 0332 | z .FIXUP D |
| 0332 | z(8D000006): LDR SB, MT, MOD0 [EBNF] |
| 0333 | z(44D8001C): ADD R4, SB, 1CH [data] |
| 0334 | z(04490003): SUB R4, R4, R3 |
| 0335 | z(D916822C): BLNE MT [trap=2, pos=5762] |
| 0336 | a(42280014): ADD R2, R2, 14H |
| 0337 | a(43000010): MOV R3, R0, 10H |
| ELSIFb tc = 2 THENd Texts.Write(W,e "?")f;g traverse(x.vh)i |
| 0338 | b .FIXUP P |
| 0338 | b(F711D013): BL MOD1 [Texts] PROC29 |
| 0339 | c(E7000040): B 64 [037AH] |
| 033A | d(80E00008): LDR R0, SP, 8H |
| 033B | d(40090002): SUB R0, R0, 2H |
| 033C | d(E900000B): BNE 11 [0348H] |
| 033D | e .FIXUP D |
| 033D | e(8D00000B): LDR SB, MT, MOD0 [EBNF] |
| 033E | e(40D8009C): ADD R0, SB, 9CH [data] |
| 033F | e .FIXUP D |
| 033F | e(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0340 | e(41D80005): ADD R1, SB, VAR5 |
| 0341 | f(4200003F): MOV R2, R0, 3FH |
| 0342 | g .FIXUP P |
| 0342 | g(F711B00A): BL MOD1 [Texts] PROC27 |
| 0343 | h(80E00004): LDR R0, SP, 4H |
| 0344 | h(D116BF4C): BLEQ MT [trap=4, pos=5823] |
| 0345 | i(80000010): LDR R0, R0, 10H |
| ELSIFj tk = 3 THENl Texts.Write(W,m "!")n;o traverse(x.vp)q |
| 0346 | j(F7FFFFB9): BL -71 [0300H] |
| 0347 | k(E7000032): B 50 [037AH] |
| 0348 | l(80E00008): LDR R0, SP, 8H |
| 0349 | l(40090003): SUB R0, R0, 3H |
| 034A | l(E900000B): BNE 11 [0356H] |
| 034B | m .FIXUP D |
| 034B | m(8D00000C): LDR SB, MT, MOD0 [EBNF] |
| 034C | m(40D8009C): ADD R0, SB, 9CH [data] |
| 034D | m .FIXUP D |
| 034D | m(8D100002): LDR SB, MT, MOD1 [Texts] |
| 034E | m(41D80005): ADD R1, SB, VAR5 |
| 034F | n(42000021): MOV R2, R0, 21H |
| 0350 | o .FIXUP P |
| 0350 | o(F711B00E): BL MOD1 [Texts] PROC27 |
| 0351 | p(80E00004): LDR R0, SP, 4H |
| 0352 | p(D116F94C): BLEQ MT [trap=4, pos=5881] |
| 0353 | q(80000010): LDR R0, R0, 10H |
| ELSEr Textss.Write(W,t "(")u;v traverse(x.uw)x;y |
| 0354 | r(F7FFFFAB): BL -85 [0300H] |
| 0355 | s(E7000024): B 36 [037AH] |
| 0356 | t .FIXUP D |
| 0356 | t(8D000009): LDR SB, MT, MOD0 [EBNF] |
| 0357 | t(40D8009C): ADD R0, SB, 9CH [data] |
| 0358 | t .FIXUP D |
| 0358 | t(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0359 | t(41D80005): ADD R1, SB, VAR5 |
| 035A | u(42000028): MOV R2, R0, 28H |
| 035B | v .FIXUP P |
| 035B | v(F711B00B): BL MOD1 [Texts] PROC27 |
| 035C | w(80E00004): LDR R0, SP, 4H |
| 035D | w(D117274C): BLEQ MT [trap=4, pos=5927] |
| 035E | x(8000000C): LDR R0, R0, CH |
| 035F | y(F7FFFFA0): BL -96 [0300H] |
| IF t = 4 THENz Texts.Write(W,a " ")b ELSEc Textsd.Write(W,e "|")f ENDg ; |
| 0360 | z(80E00008): LDR R0, SP, 8H |
| 0361 | z(40090004): SUB R0, R0, 4H |
| 0362 | z(E9000007): BNE 7 [036AH] |
| 0363 | a .FIXUP D |
| 0363 | a(8D00000B): LDR SB, MT, MOD0 [EBNF] |
| 0364 | a(40D8009C): ADD R0, SB, 9CH [data] |
| 0365 | a .FIXUP D |
| 0365 | a(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0366 | a(41D80005): ADD R1, SB, VAR5 |
| 0367 | b(42000020): MOV R2, R0, 20H |
| 0368 | c .FIXUP P |
| 0368 | c(F711B00D): BL MOD1 [Texts] PROC27 |
| 0369 | d(E7000006): B 6 [0370H] |
| 036A | e .FIXUP D |
| 036A | e(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 036B | e(40D8009C): ADD R0, SB, 9CH [data] |
| 036C | e .FIXUP D |
| 036C | e(8D100002): LDR SB, MT, MOD1 [Texts] |
| 036D | e(41D80005): ADD R1, SB, VAR5 |
| 036E | f(4200007C): MOV R2, R0, 7CH |
| 036F | g .FIXUP P |
| 036F | g(F711B007): BL MOD1 [Texts] PROC27 |
| traverse(x.vh)i;j Texts.Write(W,k ")")l |
| 0370 | h(80E00004): LDR R0, SP, 4H |
| 0371 | h(D117874C): BLEQ MT [trap=4, pos=6023] |
| 0372 | i(80000010): LDR R0, R0, 10H |
| 0373 | j(F7FFFF8C): BL -116 [0300H] |
| 0374 | k .FIXUP D |
| 0374 | k(8D000008): LDR SB, MT, MOD0 [EBNF] |
| 0375 | k(40D8009C): ADD R0, SB, 9CH [data] |
| 0376 | k .FIXUP D |
| 0376 | k(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0377 | k(41D80005): ADD R1, SB, VAR5 |
| 0378 | l(42000029): MOV R2, R0, 29H |
| ENDm |
| 0379 | m .FIXUP P |
| 0379 | m(F711B00A): BL MOD1 [Texts] PROC27 |
| END |
| ENDn traverse; |
| 037A | n(8FE00000): LDR LNK, SP, 0H |
| 037B | n(4EE8000C): ADD SP, SP, CH |
| 037C | n(C700000F): B LNK |
| |
| PROCEDURE Tabulate*; |
| VAR s: Symbol; |
| BEGINo s := root;p |
| 037D | o .PROC 3 |
| 037D | o .COMMAND Tabulate |
| 037D | o(4EE90008): SUB SP, SP, 8H |
| 037E | o(AFE00000): STR LNK, SP, 0H |
| 037F | p .FIXUP D |
| 037F | p(8D000009): LDR SB, MT, MOD0 [EBNF] |
| 0380 | p(80D00060): LDR R0, SB, 60H [data] |
| 0381 | p(A0E00004): STR R0, SP, 4H |
| WHILE s # NIL DOq |
| 0382 | q(80E00004): LDR R0, SP, 4H |
| 0383 | q(E1000024): BEQ 36 [03A8H] |
| IF s.tagr = 1 THENs |
| 0384 | r(80E00004): LDR R0, SP, 4H |
| 0385 | r(D118214C): BLEQ MT [trap=4, pos=6177] |
| 0386 | s(80000000): LDR R0, R0, 0H |
| 0387 | s(40090001): SUB R0, R0, 1H |
| 0388 | s(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 |
| 0389 | t .FIXUP D |
| 0389 | t(8D00000A): LDR SB, MT, MOD0 [EBNF] |
| 038A | t(40D8009C): ADD R0, SB, 9CH [data] |
| 038B | t .FIXUP D |
| 038B | t(8D100002): LDR SB, MT, MOD1 [Texts] |
| 038C | t(41D80005): ADD R1, SB, VAR5 |
| 038D | u(82E00004): LDR R2, SP, 4H |
| 038E | u(D1184C4C): BLEQ MT [trap=4, pos=6220] |
| 038F | v(42280014): ADD R2, R2, 14H |
| 0390 | v(43000010): MOV R3, R0, 10H |
| 0391 | w .FIXUP P |
| 0391 | w(F711D018): BL MOD1 [Texts] PROC29 |
| 0392 | x .FIXUP D |
| 0392 | x(8D000007): LDR SB, MT, MOD0 [EBNF] |
| 0393 | x(40D8009C): ADD R0, SB, 9CH [data] |
| 0394 | x .FIXUP D |
| 0394 | x(8D100002): LDR SB, MT, MOD1 [Texts] |
| 0395 | x(41D80005): ADD R1, SB, VAR5 |
| 0396 | y .FIXUP D |
| 0396 | y(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 0397 | y(42D80104): ADD R2, SB, 104H [" = "] |
| 0398 | y(43000005): MOV R3, R0, 5H |
| 0399 | z .FIXUP P |
| 0399 | z(F711D008): BL MOD1 [Texts] PROC29 |
| 039A | a(80E00004): LDR R0, SP, 4H |
| 039B | a(D118794C): BLEQ MT [trap=4, pos=6265] |
| 039C | b(80000010): LDR R0, R0, 10H |
| 039D | c(F7FFFF62): BL -158 [0300H] |
| 039E | d .FIXUP D |
| 039E | d(8D000008): LDR SB, MT, MOD0 [EBNF] |
| 039F | d(40D8009C): ADD R0, SB, 9CH [data] |
| 03A0 | d .FIXUP D |
| 03A0 | d(8D100002): LDR SB, MT, MOD1 [Texts] |
| 03A1 | d(41D80005): ADD R1, SB, VAR5 |
| ENDe ; |
| 03A2 | e .FIXUP P |
| 03A2 | e(F711C009): BL MOD1 [Texts] PROC28 |
| s := s.nextf |
| 03A3 | f(80E00004): LDR R0, SP, 4H |
| 03A4 | f(D118AA4C): BLEQ MT [trap=4, pos=6314] |
| ENDg ; |
| 03A5 | g(80000030): LDR R0, R0, 30H |
| 03A6 | g(A0E00004): STR R0, SP, 4H |
| 03A7 | g(E7FFFFDA): B -38 [0382H] |
| Texts.Append(Oberon.Log,h W.buf)i |
| 03A8 | h .FIXUP D |
| 03A8 | h(8D400008): LDR SB, MT, MOD4 [Oberon] |
| 03A9 | h(80D0000D): LDR R0, SB, VAR13 |
| 03AA | i .FIXUP D |
| 03AA | i(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 03AB | i(81D0009C): LDR R1, SB, 9CH [data] |
| ENDj Tabulate; |
| 03AC | j .FIXUP P |
| 03AC | j(F710E00A): BL MOD1 [Texts] PROC14 |
| 03AD | j(8FE00000): LDR LNK, SP, 0H |
| 03AE | j(4EE80008): ADD SP, SP, 8H |
| 03AF | j(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 |
| 03B0 | k(4EE90014): SUB SP, SP, 14H |
| 03B1 | k(AFE00000): STR LNK, SP, 0H |
| 03B2 | k(A0E00004): STR R0, SP, 4H |
| 03B3 | k(A1E00008): STR R1, SP, 8H |
| 03B4 | k(A2E0000C): STR R2, SP, CH |
| 03B5 | l .FIXUP D |
| 03B5 | l(8D00000B): LDR SB, MT, MOD0 [EBNF] |
| 03B6 | l(40D8009C): ADD R0, SB, 9CH [data] |
| 03B7 | l .FIXUP D |
| 03B7 | l(8D100002): LDR SB, MT, MOD1 [Texts] |
| 03B8 | l(41D80005): ADD R1, SB, VAR5 |
| 03B9 | m(42000009): MOV R2, R0, 9H |
| 03BA | n .FIXUP P |
| 03BA | n(F711B00E): BL MOD1 [Texts] PROC27 |
| 03BB | o .FIXUP D |
| 03BB | o(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 03BC | o(40D8009C): ADD R0, SB, 9CH [data] |
| 03BD | o .FIXUP D |
| 03BD | o(8D100002): LDR SB, MT, MOD1 [Texts] |
| 03BE | o(41D80005): ADD R1, SB, VAR5 |
| 03BF | p(82E00004): LDR R2, SP, 4H |
| 03C0 | p(83E00008): LDR R3, SP, 8H |
| 03C1 | q .FIXUP P |
| 03C1 | q(F711D007): BL MOD1 [Texts] PROC29 |
| 03C2 | r .FIXUP D |
| 03C2 | r(8D000005): LDR SB, MT, MOD0 [EBNF] |
| 03C3 | r(40D8009C): ADD R0, SB, 9CH [data] |
| 03C4 | r .FIXUP D |
| 03C4 | r(8D100002): LDR SB, MT, MOD1 [Texts] |
| 03C5 | r(41D80005): ADD R1, SB, VAR5 |
| 03C6 | s .FIXUP D |
| 03C6 | s(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 03C7 | s(42D8010C): ADD R2, SB, 10CH [" :: "] |
| 03C8 | s(43000005): MOV R3, R0, 5H |
| 03C9 | t .FIXUP P |
| 03C9 | t(F711D008): BL MOD1 [Texts] PROC29 |
| x := root;u |
| 03CA | u .FIXUP D |
| 03CA | u(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 03CB | u(80D00060): LDR R0, SB, 60H [data] |
| 03CC | u(A0E00010): STR R0, SP, 10H |
| WHILE (s # {})v & (wx # NIL)x DOy |
| 03CD | v(80E0000C): LDR R0, SP, CH |
| 03CE | w(E100002A): BEQ 42 [03F9H] |
| 03CF | x(80E00010): LDR R0, SP, 10H |
| 03D0 | y(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 ; |
| 03D1 | z(80E00010): LDR R0, SP, 10H |
| 03D2 | z(D11A0F4C): BLEQ MT [trap=4, pos=6671] |
| 03D3 | a(80000000): LDR R0, R0, 0H |
| 03D4 | b(E900001F): BNE 31 [03F4H] |
| 03D5 | c(80E00010): LDR R0, SP, 10H |
| 03D6 | c(D11A1C4C): BLEQ MT [trap=4, pos=6684] |
| 03D7 | d(81E0000C): LDR R1, SP, CH |
| 03D8 | d(80000024): LDR R0, R0, 24H |
| 03D9 | d(40080001): ADD R0, R0, 1H |
| 03DA | d(01130000): ROR R1, R1, R0 |
| 03DB | e(E8000018): BPL 24 [03F4H] |
| 03DC | f .FIXUP D |
| 03DC | f(8D000012): LDR SB, MT, MOD0 [EBNF] |
| 03DD | f(40D8009C): ADD R0, SB, 9CH [data] |
| 03DE | f .FIXUP D |
| 03DE | f(8D100002): LDR SB, MT, MOD1 [Texts] |
| 03DF | f(41D80005): ADD R1, SB, VAR5 |
| 03E0 | g(42000020): MOV R2, R0, 20H |
| 03E1 | h .FIXUP P |
| 03E1 | h(F711B018): BL MOD1 [Texts] PROC27 |
| 03E2 | i .FIXUP D |
| 03E2 | i(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 03E3 | i(40D8009C): ADD R0, SB, 9CH [data] |
| 03E4 | i .FIXUP D |
| 03E4 | i(8D100002): LDR SB, MT, MOD1 [Texts] |
| 03E5 | i(41D80005): ADD R1, SB, VAR5 |
| 03E6 | j(82E00010): LDR R2, SP, 10H |
| 03E7 | j(D11A564C): BLEQ MT [trap=4, pos=6742] |
| 03E8 | k(42280014): ADD R2, R2, 14H |
| 03E9 | k(43000010): MOV R3, R0, 10H |
| 03EA | l .FIXUP P |
| 03EA | l(F711D009): BL MOD1 [Texts] PROC29 |
| 03EB | m(80E00010): LDR R0, SP, 10H |
| 03EC | m(D11A654C): BLEQ MT [trap=4, pos=6757] |
| 03ED | n(41E8000C): ADD R1, SP, CH |
| 03EE | n(82100000): LDR R2, R1, 0H |
| 03EF | n(80000024): LDR R0, R0, 24H |
| 03F0 | n(43000001): MOV R3, R0, 1H |
| 03F1 | n(00310000): LSL R0, R3, R0 |
| 03F2 | n(02250000): ANN R2, R2, R0 |
| 03F3 | n(A2100000): STR R2, R1, 0H |
| x := x.nexto |
| 03F4 | o(80E00010): LDR R0, SP, 10H |
| 03F5 | o(D11A7E4C): BLEQ MT [trap=4, pos=6782] |
| ENDp ; |
| 03F6 | p(80000030): LDR R0, R0, 30H |
| 03F7 | p(A0E00010): STR R0, SP, 10H |
| 03F8 | p(E7FFFFD4): B -44 [03CDH] |
| Texts.WriteLn(W)q |
| 03F9 | q .FIXUP D |
| 03F9 | q(8D000015): LDR SB, MT, MOD0 [EBNF] |
| 03FA | q(40D8009C): ADD R0, SB, 9CH [data] |
| 03FB | q .FIXUP D |
| 03FB | q(8D100002): LDR SB, MT, MOD1 [Texts] |
| 03FC | q(41D80005): ADD R1, SB, VAR5 |
| ENDr WriteSet; |
| 03FD | r .FIXUP P |
| 03FD | r(F711C013): BL MOD1 [Texts] PROC28 |
| 03FE | r(8FE00000): LDR LNK, SP, 0H |
| 03FF | r(4EE80014): ADD SP, SP, 14H |
| 0400 | r(C700000F): B LNK |
| |
| PROCEDURE first(x: Item): SET; |
| VAR t: INTEGER; s, a, b: SET; save: Symbol; |
| BEGINs |
| 0401 | s(4EE9001C): SUB SP, SP, 1CH |
| 0402 | s(AFE00000): STR LNK, SP, 0H |
| 0403 | s(A0E00004): STR R0, SP, 4H |
| IF x # NIL THENt t := x.tagu;v |
| 0404 | t(80E00004): LDR R0, SP, 4H |
| 0405 | t(E10000B0): BEQ 176 [04B6H] |
| 0406 | u(80E00004): LDR R0, SP, 4H |
| 0407 | u(D11B264C): BLEQ MT [trap=4, pos=6950] |
| 0408 | v(80000000): LDR R0, R0, 0H |
| 0409 | v(A0E00008): STR R0, SP, 8H |
| IF t = 0 THENw s := {x(Symbol)x.no}y |
| 040A | w(80E00008): LDR R0, SP, 8H |
| 040B | w(E900000D): BNE 13 [0419H] |
| 040C | x(80E00004): LDR R0, SP, 4H |
| 040D | x(E1000005): BEQ 5 [0413H] |
| 040E | x(810FFFF8): LDR R1, R0, FFFFFFF8H |
| 040F | x(81100004): LDR R1, R1, 4H |
| 0410 | x .FIXUP D |
| 0410 | x(8D000015): LDR SB, MT, MOD0 [EBNF] |
| 0411 | x(42D8001C): ADD R2, SB, 1CH [data] |
| 0412 | x(02290001): SUB R2, R2, R1 |
| 0413 | x(D91B4B2C): BLNE MT [trap=2, pos=6987] |
| 0414 | y(80000024): LDR R0, R0, 24H |
| 0415 | y(41000001): MOV R1, R0, 1H |
| 0416 | y(00110000): LSL R0, R1, R0 |
| ELSIFz ta = 1 THENb |
| 0417 | z(A0E0000C): STR R0, SP, CH |
| 0418 | a(E700009C): B 156 [04B5H] |
| 0419 | b(80E00008): LDR R0, SP, 8H |
| 041A | b(40090001): SUB R0, R0, 1H |
| 041B | b(E9000039): BNE 57 [0455H] |
| IF x.flag0c = 0 THENd x.flag0e := 1;f save := curs;g curs := x(Symbol)h;i |
| 041C | c(80E00004): LDR R0, SP, 4H |
| 041D | c(D11B794C): BLEQ MT [trap=4, pos=7033] |
| 041E | d(80000004): LDR R0, R0, 4H |
| 041F | d(E9000025): BNE 37 [0445H] |
| 0420 | e(80E00004): LDR R0, SP, 4H |
| 0421 | e(D11B8A4C): BLEQ MT [trap=4, pos=7050] |
| 0422 | f(41000001): MOV R1, R0, 1H |
| 0423 | f(A1000004): STR R1, R0, 4H |
| 0424 | g .FIXUP D |
| 0424 | g(8D000014): LDR SB, MT, MOD0 [EBNF] |
| 0425 | g(80D00064): LDR R0, SB, 64H [data] |
| 0426 | g(A0E00018): STR R0, SP, 18H |
| 0427 | h(80E00004): LDR R0, SP, 4H |
| 0428 | h(E1000004): BEQ 4 [042DH] |
| 0429 | h(810FFFF8): LDR R1, R0, FFFFFFF8H |
| 042A | h(81100004): LDR R1, R1, 4H |
| 042B | h(42D8001C): ADD R2, SB, 1CH |
| 042C | h(02290001): SUB R2, R2, R1 |
| 042D | h(D91BB02C): BLNE MT [trap=2, pos=7088] |
| 042E | i(A0D00064): STR R0, SB, 64H |
| s := first(x.vj)k;l x.flag0m := 2;n x(Symbol)o.first := s;p curs := save |
| 042F | j(80E00004): LDR R0, SP, 4H |
| 0430 | j(D11BCA4C): BLEQ MT [trap=4, pos=7114] |
| 0431 | k(80000010): LDR R0, R0, 10H |
| 0432 | l(F7FFFFCE): BL -50 [0401H] |
| 0433 | l(A0E0000C): STR R0, SP, CH |
| 0434 | m(80E00004): LDR R0, SP, 4H |
| 0435 | m(D11BD44C): BLEQ MT [trap=4, pos=7124] |
| 0436 | n(41000002): MOV R1, R0, 2H |
| 0437 | n(A1000004): STR R1, R0, 4H |
| 0438 | o(80E00004): LDR R0, SP, 4H |
| 0439 | o(E1000005): BEQ 5 [043FH] |
| 043A | o(810FFFF8): LDR R1, R0, FFFFFFF8H |
| 043B | o(81100004): LDR R1, R1, 4H |
| 043C | o .FIXUP D |
| 043C | o(8D000018): LDR SB, MT, MOD0 [EBNF] |
| 043D | o(42D8001C): ADD R2, SB, 1CH [data] |
| 043E | o(02290001): SUB R2, R2, R1 |
| 043F | o(D91BE42C): BLNE MT [trap=2, pos=7140] |
| 0440 | p(81E0000C): LDR R1, SP, CH |
| 0441 | p(A1000028): STR R1, R0, 28H |
| ELSIFq xr.flag0s > 1 THENt s := x(Symbol)u.first |
| 0442 | q(80E00018): LDR R0, SP, 18H |
| 0443 | q(A0D00064): STR R0, SB, 64H |
| 0444 | r(E700000F): B 15 [0454H] |
| 0445 | s(80E00004): LDR R0, SP, 4H |
| 0446 | s(D11C134C): BLEQ MT [trap=4, pos=7187] |
| 0447 | t(80000004): LDR R0, R0, 4H |
| 0448 | t(40090001): SUB R0, R0, 1H |
| 0449 | t(E600000A): BLE 10 [0454H] |
| 044A | u(80E00004): LDR R0, SP, 4H |
| 044B | u(E1000005): BEQ 5 [0451H] |
| 044C | u(810FFFF8): LDR R1, R0, FFFFFFF8H |
| 044D | u(81100004): LDR R1, R1, 4H |
| 044E | u .FIXUP D |
| 044E | u(8D000012): LDR SB, MT, MOD0 [EBNF] |
| 044F | u(42D8001C): ADD R2, SB, 1CH [data] |
| 0450 | u(02290001): SUB R2, R2, R1 |
| 0451 | u(D91C2B2C): BLNE MT [trap=2, pos=7211] |
| ENDv |
| 0452 | v(80000028): LDR R0, R0, 28H |
| 0453 | v(A0E0000C): STR R0, SP, CH |
| ELSIF tw <= 3 THENx s := first(x.vy)z |
| 0454 | w(E7000060): B 96 [04B5H] |
| 0455 | x(80E00008): LDR R0, SP, 8H |
| 0456 | x(40090003): SUB R0, R0, 3H |
| 0457 | x(EE000006): BGT 6 [045EH] |
| 0458 | y(80E00004): LDR R0, SP, 4H |
| 0459 | y(D11C644C): BLEQ MT [trap=4, pos=7268] |
| 045A | z(80000010): LDR R0, R0, 10H |
| ELSIFa tb = 4 THENc s := first(x.ud)e;f |
| 045B | a(F7FFFFA5): BL -91 [0401H] |
| 045C | a(A0E0000C): STR R0, SP, CH |
| 045D | b(E7000057): B 87 [04B5H] |
| 045E | c(80E00008): LDR R0, SP, 8H |
| 045F | c(40090004): SUB R0, R0, 4H |
| 0460 | c(E9000026): BNE 38 [0487H] |
| 0461 | d(80E00004): LDR R0, SP, 4H |
| 0462 | d(D11C8B4C): BLEQ MT [trap=4, pos=7307] |
| 0463 | e(8000000C): LDR R0, R0, CH |
| 0464 | f(F7FFFF9C): BL -100 [0401H] |
| 0465 | f(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 |
| 0466 | g(80E00004): LDR R0, SP, 4H |
| 0467 | g(D11C9C4C): BLEQ MT [trap=4, pos=7324] |
| 0468 | h(8000000C): LDR R0, R0, CH |
| 0469 | h(D11CA04C): BLEQ MT [trap=4, pos=7328] |
| 046A | i(4100000C): MOV R1, R0, CH |
| 046B | i(80000000): LDR R0, R0, 0H |
| 046C | i(40080001): ADD R0, R0, 1H |
| 046D | i(01130000): ROR R1, R1, R0 |
| 046E | i(E8000012): BPL 18 [0481H] |
| 046F | j(80E00004): LDR R0, SP, 4H |
| 0470 | j(D11CBE4C): BLEQ MT [trap=4, pos=7358] |
| 0471 | k(8000000C): LDR R0, R0, CH |
| 0472 | k(D11CC04C): BLEQ MT [trap=4, pos=7360] |
| 0473 | l(80000010): LDR R0, R0, 10H |
| 0474 | m(F7FFFF8C): BL -116 [0401H] |
| 0475 | n(4EE90004): SUB SP, SP, 4H |
| 0476 | n(A0E00000): STR R0, SP, 0H |
| 0477 | o(80E00008): LDR R0, SP, 8H |
| 0478 | o(D11CCD4C): BLEQ MT [trap=4, pos=7373] |
| 0479 | p(80000010): LDR R0, R0, 10H |
| 047A | q(F7FFFF86): BL -122 [0401H] |
| 047B | q(01000000): MOV R1, R0, R0 |
| 047C | q(80E00000): LDR R0, SP, 0H |
| 047D | q(4EE80004): ADD SP, SP, 4H |
| 047E | q(00060001): IOR R0, R0, R1 |
| 047F | q(A0E0000C): STR R0, SP, CH |
| 0480 | r(E7000005): B 5 [0486H] |
| 0481 | s(80E00004): LDR R0, SP, 4H |
| 0482 | s(D11CE24C): BLEQ MT [trap=4, pos=7394] |
| 0483 | t(8000000C): LDR R0, R0, CH |
| 0484 | u(F7FFFF7C): BL -132 [0401H] |
| 0485 | u(A0E0000C): STR R0, SP, CH |
| ELSIF xv.tagw = 5 THENx |
| 0486 | v(E700002E): B 46 [04B5H] |
| 0487 | w(80E00004): LDR R0, SP, 4H |
| 0488 | w(D11CF94C): BLEQ MT [trap=4, pos=7417] |
| 0489 | x(80000000): LDR R0, R0, 0H |
| 048A | x(40090005): SUB R0, R0, 5H |
| 048B | x(E9000029): BNE 41 [04B5H] |
| a := first(x.uy)z;a b := first(x.vb)c;d s := a+b;e |
| 048C | y(80E00004): LDR R0, SP, 4H |
| 048D | y(D11D194C): BLEQ MT [trap=4, pos=7449] |
| 048E | z(8000000C): LDR R0, R0, CH |
| 048F | a(F7FFFF71): BL -143 [0401H] |
| 0490 | a(A0E00010): STR R0, SP, 10H |
| 0491 | b(80E00004): LDR R0, SP, 4H |
| 0492 | b(D11D2A4C): BLEQ MT [trap=4, pos=7466] |
| 0493 | c(80000010): LDR R0, R0, 10H |
| 0494 | d(F7FFFF6C): BL -148 [0401H] |
| 0495 | d(A0E00014): STR R0, SP, 14H |
| 0496 | e(80E00010): LDR R0, SP, 10H |
| 0497 | e(81E00014): LDR R1, SP, 14H |
| 0498 | e(00060001): IOR R0, R0, R1 |
| 0499 | e(A0E0000C): STR R0, SP, CH |
| IF a*b #f {} THENg |
| 049A | f(80E00010): LDR R0, SP, 10H |
| 049B | f(81E00014): LDR R1, SP, 14H |
| 049C | f(00040001): AND R0, R0, R1 |
| 049D | g(40090000): SUB R0, R0, 0H |
| 049E | g(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 |
| 049F | h .FIXUP D |
| 049F | h(8D000051): LDR SB, MT, MOD0 [EBNF] |
| 04A0 | h(40D8009C): ADD R0, SB, 9CH [data] |
| 04A1 | h .FIXUP D |
| 04A1 | h(8D100002): LDR SB, MT, MOD1 [Texts] |
| 04A2 | h(41D80005): ADD R1, SB, VAR5 |
| 04A3 | i .FIXUP D |
| 04A3 | i(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 04A4 | i(42D80114): ADD R2, SB, 114H ["error A in "] |
| 04A5 | i(4300000C): MOV R3, R0, CH |
| 04A6 | j .FIXUP P |
| 04A6 | j(F711D0A9): BL MOD1 [Texts] PROC29 |
| 04A7 | k .FIXUP D |
| 04A7 | k(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 04A8 | k(80D00064): LDR R0, SB, 64H [data] |
| 04A9 | k(D11D8F4C): BLEQ MT [trap=4, pos=7567] |
| 04AA | l(40080014): ADD R0, R0, 14H |
| 04AB | l(41000010): MOV R1, R0, 10H |
| 04AC | m(82E00010): LDR R2, SP, 10H |
| 04AD | m(83E00014): LDR R3, SP, 14H |
| 04AE | m(02270003): XOR R2, R2, R3 |
| 04AF | n(F7FFFF00): BL -256 [03B0H] |
| 04B0 | o .FIXUP D |
| 04B0 | o(8D000009): LDR SB, MT, MOD0 [EBNF] |
| 04B1 | o(40D8009C): ADD R0, SB, 9CH [data] |
| 04B2 | o .FIXUP D |
| 04B2 | o(8D100002): LDR SB, MT, MOD1 [Texts] |
| 04B3 | o(41D80005): ADD R1, SB, VAR5 |
| ENDp |
| 04B4 | p .FIXUP P |
| 04B4 | p(F711C00E): BL MOD1 [Texts] PROC28 |
| END |
| ELSE sq := {} |
| 04B5 | q(E7000002): B 2 [04B8H] |
| ENDr ; |
| 04B6 | r(40000000): MOV R0, R0, 0H |
| 04B7 | r(A0E0000C): STR R0, SP, CH |
| RETURN s |
| ENDs first; |
| 04B8 | s(80E0000C): LDR R0, SP, CH |
| 04B9 | s(8FE00000): LDR LNK, SP, 0H |
| 04BA | s(4EE8001C): ADD SP, SP, 1CH |
| 04BB | s(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 |
| 04BC | t .PROC 4 |
| 04BC | t .COMMAND First |
| 04BC | t(4EE90008): SUB SP, SP, 8H |
| 04BD | t(AFE00000): STR LNK, SP, 0H |
| 04BE | u .FIXUP D |
| 04BE | u(8D00000C): LDR SB, MT, MOD0 [EBNF] |
| 04BF | u(40D8009C): ADD R0, SB, 9CH [data] |
| 04C0 | u .FIXUP D |
| 04C0 | u(8D100002): LDR SB, MT, MOD1 [Texts] |
| 04C1 | u(41D80005): ADD R1, SB, VAR5 |
| 04C2 | v .FIXUP D |
| 04C2 | v(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 04C3 | v(42D80120): ADD R2, SB, 120H ["First symbols:"] |
| 04C4 | v(4300000F): MOV R3, R0, FH |
| 04C5 | w .FIXUP P |
| 04C5 | w(F711D011): BL MOD1 [Texts] PROC29 |
| 04C6 | x .FIXUP D |
| 04C6 | x(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 04C7 | x(40D8009C): ADD R0, SB, 9CH [data] |
| 04C8 | x .FIXUP D |
| 04C8 | x(8D100002): LDR SB, MT, MOD1 [Texts] |
| 04C9 | x(41D80005): ADD R1, SB, VAR5 |
| 04CA | y .FIXUP P |
| 04CA | y(F711C005): BL MOD1 [Texts] PROC28 |
| 04CB | z .FIXUP D |
| 04CB | z(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 04CC | z(80D00060): LDR R0, SB, 60H [data] |
| 04CD | z(A0E00004): STR R0, SP, 4H |
| WHILE s # NIL DOa |
| 04CE | a(80E00004): LDR R0, SP, 4H |
| 04CF | a(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 ; |
| 04D0 | b(80E00004): LDR R0, SP, 4H |
| 04D1 | b(D11E8B4C): BLEQ MT [trap=4, pos=7819] |
| 04D2 | c(80000000): LDR R0, R0, 0H |
| 04D3 | c(40090001): SUB R0, R0, 1H |
| 04D4 | c(E9000017): BNE 23 [04ECH] |
| 04D5 | d(80E00004): LDR R0, SP, 4H |
| 04D6 | d .FIXUP D |
| 04D6 | d(8D00000B): LDR SB, MT, MOD0 [EBNF] |
| 04D7 | d(A0D00064): STR R0, SB, 64H [data] |
| 04D8 | e(80E00004): LDR R0, SP, 4H |
| 04D9 | e(D11EA74C): BLEQ MT [trap=4, pos=7847] |
| 04DA | f(4EE90004): SUB SP, SP, 4H |
| 04DB | f(A0E00000): STR R0, SP, 0H |
| 04DC | g(80E00008): LDR R0, SP, 8H |
| 04DD | g(D11EB44C): BLEQ MT [trap=4, pos=7860] |
| 04DE | h(80000010): LDR R0, R0, 10H |
| 04DF | i(F7FFFF21): BL -223 [0401H] |
| 04E0 | i(01000000): MOV R1, R0, R0 |
| 04E1 | i(80E00000): LDR R0, SP, 0H |
| 04E2 | i(4EE80004): ADD SP, SP, 4H |
| 04E3 | i(A1000028): STR R1, R0, 28H |
| 04E4 | j(80E00004): LDR R0, SP, 4H |
| 04E5 | j(D11EC44C): BLEQ MT [trap=4, pos=7876] |
| 04E6 | k(40080014): ADD R0, R0, 14H |
| 04E7 | k(41000010): MOV R1, R0, 10H |
| 04E8 | l(82E00004): LDR R2, SP, 4H |
| 04E9 | l(D11ECD4C): BLEQ MT [trap=4, pos=7885] |
| 04EA | m(82200028): LDR R2, R2, 28H |
| 04EB | n(F7FFFEC4): BL -316 [03B0H] |
| s := s.nexto |
| 04EC | o(80E00004): LDR R0, SP, 4H |
| 04ED | o(D11EE64C): BLEQ MT [trap=4, pos=7910] |
| ENDp ; |
| 04EE | p(80000030): LDR R0, R0, 30H |
| 04EF | p(A0E00004): STR R0, SP, 4H |
| 04F0 | p(E7FFFFDD): B -35 [04CEH] |
| Texts.Append(Oberon.Log,q W.buf)r |
| 04F1 | q .FIXUP D |
| 04F1 | q(8D40001B): LDR SB, MT, MOD4 [Oberon] |
| 04F2 | q(80D0000D): LDR R0, SB, VAR13 |
| 04F3 | r .FIXUP D |
| 04F3 | r(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 04F4 | r(81D0009C): LDR R1, SB, 9CH [data] |
| ENDs First; |
| 04F5 | s .FIXUP P |
| 04F5 | s(F710E02B): BL MOD1 [Texts] PROC14 |
| 04F6 | s(8FE00000): LDR LNK, SP, 0H |
| 04F7 | s(4EE80008): ADD SP, SP, 8H |
| 04F8 | s(C700000F): B LNK |
| |
| (*------------------ Find sets of follow symbols -------------------*) |
| |
| PROCEDURE critical(x: Item): SET; |
| VAR t: INTEGER; s: SET; |
| BEGINt |
| 04F9 | t(4EE90010): SUB SP, SP, 10H |
| 04FA | t(AFE00000): STR LNK, SP, 0H |
| 04FB | t(A0E00004): STR R0, SP, 4H |
| IF x # NIL THENu t := x.tagv;w |
| 04FC | u(80E00004): LDR R0, SP, 4H |
| 04FD | u(E1000056): BEQ 86 [0554H] |
| 04FE | v(80E00004): LDR R0, SP, 4H |
| 04FF | v(D11FD34C): BLEQ MT [trap=4, pos=8147] |
| 0500 | w(80000000): LDR R0, R0, 0H |
| 0501 | w(A0E00008): STR R0, SP, 8H |
| IF t = 0 THENx s := {} |
| 0502 | x(80E00008): LDR R0, SP, 8H |
| 0503 | x(E9000003): BNE 3 [0507H] |
| ELSIFy tz = 1 THENa |
| 0504 | y(40000000): MOV R0, R0, 0H |
| 0505 | y(A0E0000C): STR R0, SP, CH |
| 0506 | z(E700004C): B 76 [0553H] |
| 0507 | a(80E00008): LDR R0, SP, 8H |
| 0508 | a(40090001): SUB R0, R0, 1H |
| 0509 | a(E9000025): BNE 37 [052FH] |
| IF x.flag1b = 0 THENc x.flag1d := 1;e x(Symbol)f.crit := critical(xg.vh)i ENDj ; |
| 050A | b(80E00004): LDR R0, SP, 4H |
| 050B | b(D1201A4C): BLEQ MT [trap=4, pos=8218] |
| 050C | c(80000008): LDR R0, R0, 8H |
| 050D | c(E9000016): BNE 22 [0524H] |
| 050E | d(80E00004): LDR R0, SP, 4H |
| 050F | d(D1202B4C): BLEQ MT [trap=4, pos=8235] |
| 0510 | e(41000001): MOV R1, R0, 1H |
| 0511 | e(A1000008): STR R1, R0, 8H |
| 0512 | f(80E00004): LDR R0, SP, 4H |
| 0513 | f(E1000005): BEQ 5 [0519H] |
| 0514 | f(810FFFF8): LDR R1, R0, FFFFFFF8H |
| 0515 | f(81100004): LDR R1, R1, 4H |
| 0516 | f .FIXUP D |
| 0516 | f(8D000023): LDR SB, MT, MOD0 [EBNF] |
| 0517 | f(42D8001C): ADD R2, SB, 1CH [data] |
| 0518 | f(02290001): SUB R2, R2, R1 |
| 0519 | f(D9203B2C): BLNE MT [trap=2, pos=8251] |
| 051A | g(4EE90004): SUB SP, SP, 4H |
| 051B | g(A0E00000): STR R0, SP, 0H |
| 051C | h(80E00008): LDR R0, SP, 8H |
| 051D | h(D120504C): BLEQ MT [trap=4, pos=8272] |
| 051E | i(80000010): LDR R0, R0, 10H |
| 051F | j(F7FFFFD9): BL -39 [04F9H] |
| 0520 | j(01000000): MOV R1, R0, R0 |
| 0521 | j(80E00000): LDR R0, SP, 0H |
| 0522 | j(4EE80004): ADD SP, SP, 4H |
| 0523 | j(A100002C): STR R1, R0, 2CH |
| s := x(Symbol)k.crit |
| 0524 | k(80E00004): LDR R0, SP, 4H |
| 0525 | k(E1000005): BEQ 5 [052BH] |
| 0526 | k(810FFFF8): LDR R1, R0, FFFFFFF8H |
| 0527 | k(81100004): LDR R1, R1, 4H |
| 0528 | k .FIXUP D |
| 0528 | k(8D000012): LDR SB, MT, MOD0 [EBNF] |
| 0529 | k(42D8001C): ADD R2, SB, 1CH [data] |
| 052A | k(02290001): SUB R2, R2, R1 |
| 052B | k(D9206E2C): BLNE MT [trap=2, pos=8302] |
| ELSIFl tm <= 3 THENn s := first(x.vo)p |
| 052C | l(8000002C): LDR R0, R0, 2CH |
| 052D | l(A0E0000C): STR R0, SP, CH |
| 052E | m(E7000024): B 36 [0553H] |
| 052F | n(80E00008): LDR R0, SP, 8H |
| 0530 | n(40090003): SUB R0, R0, 3H |
| 0531 | n(EE000006): BGT 6 [0538H] |
| 0532 | o(80E00004): LDR R0, SP, 4H |
| 0533 | o(D1209A4C): BLEQ MT [trap=4, pos=8346] |
| 0534 | p(80000010): LDR R0, R0, 10H |
| ELSIFq tr = 4 THENs s := critical(x.vt)u |
| 0535 | q(F7FFFECB): BL -309 [0401H] |
| 0536 | q(A0E0000C): STR R0, SP, CH |
| 0537 | r(E700001B): B 27 [0553H] |
| 0538 | s(80E00008): LDR R0, SP, 8H |
| 0539 | s(40090004): SUB R0, R0, 4H |
| 053A | s(E9000006): BNE 6 [0541H] |
| 053B | t(80E00004): LDR R0, SP, 4H |
| 053C | t(D120C44C): BLEQ MT [trap=4, pos=8388] |
| 053D | u(80000010): LDR R0, R0, 10H |
| ELSIFv tw = 5 THENx s := critical(x.uy)z +a critical(xb.vc)d |
| 053E | v(F7FFFFBA): BL -70 [04F9H] |
| 053F | v(A0E0000C): STR R0, SP, CH |
| 0540 | w(E7000012): B 18 [0553H] |
| 0541 | x(80E00008): LDR R0, SP, 8H |
| 0542 | x(40090005): SUB R0, R0, 5H |
| 0543 | x(E900000F): BNE 15 [0553H] |
| 0544 | y(80E00004): LDR R0, SP, 4H |
| 0545 | y(D120EE4C): BLEQ MT [trap=4, pos=8430] |
| 0546 | z(8000000C): LDR R0, R0, CH |
| 0547 | a(F7FFFFB1): BL -79 [04F9H] |
| 0548 | b(4EE90004): SUB SP, SP, 4H |
| 0549 | b(A0E00000): STR R0, SP, 0H |
| 054A | c(80E00008): LDR R0, SP, 8H |
| 054B | c(D120FE4C): BLEQ MT [trap=4, pos=8446] |
| 054C | d(80000010): LDR R0, R0, 10H |
| ENDe |
| 054D | e(F7FFFFAB): BL -85 [04F9H] |
| 054E | e(01000000): MOV R1, R0, R0 |
| 054F | e(80E00000): LDR R0, SP, 0H |
| 0550 | e(4EE80004): ADD SP, SP, 4H |
| 0551 | e(00060001): IOR R0, R0, R1 |
| 0552 | e(A0E0000C): STR R0, SP, CH |
| ELSE sf := {} |
| 0553 | f(E7000002): B 2 [0556H] |
| ENDg ; |
| 0554 | g(40000000): MOV R0, R0, 0H |
| 0555 | g(A0E0000C): STR R0, SP, CH |
| RETURN s |
| ENDh critical; |
| 0556 | h(80E0000C): LDR R0, SP, CH |
| 0557 | h(8FE00000): LDR LNK, SP, 0H |
| 0558 | h(4EE80010): ADD SP, SP, 10H |
| 0559 | h(C700000F): B LNK |
| |
| PROCEDURE pair(x: Item); |
| BEGINi |
| 055A | i(4EE90008): SUB SP, SP, 8H |
| 055B | i(AFE00000): STR LNK, SP, 0H |
| 055C | i(A0E00004): STR R0, SP, 4H |
| IF (x # NIL)j & (kx.tagl >= 2)m THENn |
| 055D | j(80E00004): LDR R0, SP, 4H |
| 055E | k(E1000054): BEQ 84 [05B3H] |
| 055F | l(80E00004): LDR R0, SP, 4H |
| 0560 | l(D1217F4C): BLEQ MT [trap=4, pos=8575] |
| 0561 | m(80000000): LDR R0, R0, 0H |
| 0562 | m(40090002): SUB R0, R0, 2H |
| 0563 | n(E500004F): BLT 79 [05B3H] |
| pair(x.uo)p;q pair(x.vr)s;t |
| 0564 | o(80E00004): LDR R0, SP, 4H |
| 0565 | o(D121994C): BLEQ MT [trap=4, pos=8601] |
| 0566 | p(8000000C): LDR R0, R0, CH |
| 0567 | q(F7FFFFF2): BL -14 [055AH] |
| 0568 | r(80E00004): LDR R0, SP, 4H |
| 0569 | r(D121A44C): BLEQ MT [trap=4, pos=8612] |
| 056A | s(80000010): LDR R0, R0, 10H |
| 056B | t(F7FFFFEE): BL -18 [055AH] |
| IF (x.tagu = 4)v & (wx.ux.tagy = 1)z THENa |
| 056C | u(80E00004): LDR R0, SP, 4H |
| 056D | u(D121B64C): BLEQ MT [trap=4, pos=8630] |
| 056E | v(80000000): LDR R0, R0, 0H |
| 056F | v(40090004): SUB R0, R0, 4H |
| 0570 | w(E9000042): BNE 66 [05B3H] |
| 0571 | x(80E00004): LDR R0, SP, 4H |
| 0572 | x(D121C24C): BLEQ MT [trap=4, pos=8642] |
| 0573 | y(8000000C): LDR R0, R0, CH |
| 0574 | y(D121C64C): BLEQ MT [trap=4, pos=8646] |
| 0575 | z(80000000): LDR R0, R0, 0H |
| 0576 | z(40090001): SUB R0, R0, 1H |
| 0577 | a(E900003B): BNE 59 [05B3H] |
| IF first(x.vb)c *d x.ue(Symbol)f.crit #g {} THENh |
| 0578 | b(80E00004): LDR R0, SP, 4H |
| 0579 | b(D121E54C): BLEQ MT [trap=4, pos=8677] |
| 057A | c(80000010): LDR R0, R0, 10H |
| 057B | d(F7FFFE85): BL -379 [0401H] |
| 057C | e(81E00004): LDR R1, SP, 4H |
| 057D | e(D121EC4C): BLEQ MT [trap=4, pos=8684] |
| 057E | f(8110000C): LDR R1, R1, CH |
| 057F | f(E1000005): BEQ 5 [0585H] |
| 0580 | f(821FFFF8): LDR R2, R1, FFFFFFF8H |
| 0581 | f(82200004): LDR R2, R2, 4H |
| 0582 | f .FIXUP D |
| 0582 | f(8D00005A): LDR SB, MT, MOD0 [EBNF] |
| 0583 | f(43D8001C): ADD R3, SB, 1CH [data] |
| 0584 | f(03390002): SUB R3, R3, R2 |
| 0585 | f(D921F42C): BLNE MT [trap=2, pos=8692] |
| 0586 | g(8110002C): LDR R1, R1, 2CH |
| 0587 | g(00040001): AND R0, R0, R1 |
| 0588 | h(40090000): SUB R0, R0, 0H |
| 0589 | h(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 |
| 058A | i .FIXUP D |
| 058A | i(8D000008): LDR SB, MT, MOD0 [EBNF] |
| 058B | i(40D8009C): ADD R0, SB, 9CH [data] |
| 058C | i .FIXUP D |
| 058C | i(8D100002): LDR SB, MT, MOD1 [Texts] |
| 058D | i(41D80005): ADD R1, SB, VAR5 |
| 058E | j .FIXUP D |
| 058E | j(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 058F | j(42D80130): ADD R2, SB, 130H [" clash "] |
| 0590 | j(43000008): MOV R3, R0, 8H |
| 0591 | k .FIXUP P |
| 0591 | k(F711D09C): BL MOD1 [Texts] PROC29 |
| 0592 | l(80E00004): LDR R0, SP, 4H |
| 0593 | l(D1223B4C): BLEQ MT [trap=4, pos=8763] |
| 0594 | m(8000000C): LDR R0, R0, CH |
| 0595 | m(E1000005): BEQ 5 [059BH] |
| 0596 | m(810FFFF8): LDR R1, R0, FFFFFFF8H |
| 0597 | m(81100004): LDR R1, R1, 4H |
| 0598 | m .FIXUP D |
| 0598 | m(8D00000A): LDR SB, MT, MOD0 [EBNF] |
| 0599 | m(42D8001C): ADD R2, SB, 1CH [data] |
| 059A | m(02290001): SUB R2, R2, R1 |
| 059B | m(D922432C): BLNE MT [trap=2, pos=8771] |
| 059C | n(40080014): ADD R0, R0, 14H |
| 059D | n(41000010): MOV R1, R0, 10H |
| 059E | o(82E00004): LDR R2, SP, 4H |
| 059F | o(D1224B4C): BLEQ MT [trap=4, pos=8779] |
| 05A0 | p(8220000C): LDR R2, R2, CH |
| 05A1 | p(E1000004): BEQ 4 [05A6H] |
| 05A2 | p(832FFFF8): LDR R3, R2, FFFFFFF8H |
| 05A3 | p(83300004): LDR R3, R3, 4H |
| 05A4 | p(44D8001C): ADD R4, SB, 1CH |
| 05A5 | p(04490003): SUB R4, R4, R3 |
| 05A6 | p(D922532C): BLNE MT [trap=2, pos=8787] |
| 05A7 | q(8220002C): LDR R2, R2, 2CH |
| 05A8 | r(F7FFFE07): BL -505 [03B0H] |
| Texts.WriteLn(W)s;t Texts.Append(Oberon.Log,u W.buf)v |
| 05A9 | s .FIXUP D |
| 05A9 | s(8D000011): LDR SB, MT, MOD0 [EBNF] |
| 05AA | s(40D8009C): ADD R0, SB, 9CH [data] |
| 05AB | s .FIXUP D |
| 05AB | s(8D100002): LDR SB, MT, MOD1 [Texts] |
| 05AC | s(41D80005): ADD R1, SB, VAR5 |
| 05AD | t .FIXUP P |
| 05AD | t(F711C01C): BL MOD1 [Texts] PROC28 |
| 05AE | u .FIXUP D |
| 05AE | u(8D400003): LDR SB, MT, MOD4 [Oberon] |
| 05AF | u(80D0000D): LDR R0, SB, VAR13 |
| 05B0 | v .FIXUP D |
| 05B0 | v(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 05B1 | v(81D0009C): LDR R1, SB, 9CH [data] |
| ENDw |
| 05B2 | w .FIXUP P |
| 05B2 | w(F710E005): BL MOD1 [Texts] PROC14 |
| END |
| END |
| ENDx pair; |
| 05B3 | x(8FE00000): LDR LNK, SP, 0H |
| 05B4 | x(4EE80008): ADD SP, SP, 8H |
| 05B5 | x(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 |
| 05B6 | y .PROC 5 |
| 05B6 | y .COMMAND Follow |
| 05B6 | y(4EE90008): SUB SP, SP, 8H |
| 05B7 | y(AFE00000): STR LNK, SP, 0H |
| 05B8 | z .FIXUP D |
| 05B8 | z(8D000008): LDR SB, MT, MOD0 [EBNF] |
| 05B9 | z(40D8009C): ADD R0, SB, 9CH [data] |
| 05BA | z .FIXUP D |
| 05BA | z(8D100002): LDR SB, MT, MOD1 [Texts] |
| 05BB | z(41D80005): ADD R1, SB, VAR5 |
| 05BC | a .FIXUP D |
| 05BC | a(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 05BD | a(42D80138): ADD R2, SB, 138H ["Non-follow symbols:"] |
| 05BE | a(43000014): MOV R3, R0, 14H |
| 05BF | b .FIXUP P |
| 05BF | b(F711D00D): BL MOD1 [Texts] PROC29 |
| 05C0 | c .FIXUP D |
| 05C0 | c(8D000004): LDR SB, MT, MOD0 [EBNF] |
| 05C1 | c(40D8009C): ADD R0, SB, 9CH [data] |
| 05C2 | c .FIXUP D |
| 05C2 | c(8D100002): LDR SB, MT, MOD1 [Texts] |
| 05C3 | c(41D80005): ADD R1, SB, VAR5 |
| 05C4 | d .FIXUP P |
| 05C4 | d(F711C005): BL MOD1 [Texts] PROC28 |
| 05C5 | e .FIXUP D |
| 05C5 | e(8D000003): LDR SB, MT, MOD0 [EBNF] |
| 05C6 | e(80D00060): LDR R0, SB, 60H [data] |
| 05C7 | e(A0E00004): STR R0, SP, 4H |
| WHILE s # NIL DOf |
| 05C8 | f(80E00004): LDR R0, SP, 4H |
| 05C9 | f(E1000019): BEQ 25 [05E3H] |
| IF s.tagg = 1 THENh curs := s;i s.critj := critical(sk.vl)m ENDn ; |
| 05CA | g(80E00004): LDR R0, SP, 4H |
| 05CB | g(D1235F4C): BLEQ MT [trap=4, pos=9055] |
| 05CC | h(80000000): LDR R0, R0, 0H |
| 05CD | h(40090001): SUB R0, R0, 1H |
| 05CE | h(E900000F): BNE 15 [05DEH] |
| 05CF | i(80E00004): LDR R0, SP, 4H |
| 05D0 | i .FIXUP D |
| 05D0 | i(8D00000B): LDR SB, MT, MOD0 [EBNF] |
| 05D1 | i(A0D00064): STR R0, SB, 64H [data] |
| 05D2 | j(80E00004): LDR R0, SP, 4H |
| 05D3 | j(D1237A4C): BLEQ MT [trap=4, pos=9082] |
| 05D4 | k(4EE90004): SUB SP, SP, 4H |
| 05D5 | k(A0E00000): STR R0, SP, 0H |
| 05D6 | l(80E00008): LDR R0, SP, 8H |
| 05D7 | l(D1238A4C): BLEQ MT [trap=4, pos=9098] |
| 05D8 | m(80000010): LDR R0, R0, 10H |
| 05D9 | n(F7FFFF1F): BL -225 [04F9H] |
| 05DA | n(01000000): MOV R1, R0, R0 |
| 05DB | n(80E00000): LDR R0, SP, 0H |
| 05DC | n(4EE80004): ADD SP, SP, 4H |
| 05DD | n(A100002C): STR R1, R0, 2CH |
| s := s.nexto |
| 05DE | o(80E00004): LDR R0, SP, 4H |
| 05DF | o(D123A34C): BLEQ MT [trap=4, pos=9123] |
| ENDp ; |
| 05E0 | p(80000030): LDR R0, R0, 30H |
| 05E1 | p(A0E00004): STR R0, SP, 4H |
| 05E2 | p(E7FFFFE5): B -27 [05C8H] |
| s := root;q |
| 05E3 | q .FIXUP D |
| 05E3 | q(8D000013): LDR SB, MT, MOD0 [EBNF] |
| 05E4 | q(80D00060): LDR R0, SB, 60H [data] |
| 05E5 | q(A0E00004): STR R0, SP, 4H |
| WHILE s # NIL DOr |
| 05E6 | r(80E00004): LDR R0, SP, 4H |
| 05E7 | r(E1000012): BEQ 18 [05FAH] |
| IF s.tags = 1 THENt WriteSet(s.idu,v s.critw)x ENDy ; |
| 05E8 | s(80E00004): LDR R0, SP, 4H |
| 05E9 | s(D123E04C): BLEQ MT [trap=4, pos=9184] |
| 05EA | t(80000000): LDR R0, R0, 0H |
| 05EB | t(40090001): SUB R0, R0, 1H |
| 05EC | t(E9000008): BNE 8 [05F5H] |
| 05ED | u(80E00004): LDR R0, SP, 4H |
| 05EE | u(D123F74C): BLEQ MT [trap=4, pos=9207] |
| 05EF | v(40080014): ADD R0, R0, 14H |
| 05F0 | v(41000010): MOV R1, R0, 10H |
| 05F1 | w(82E00004): LDR R2, SP, 4H |
| 05F2 | w(D123FF4C): BLEQ MT [trap=4, pos=9215] |
| 05F3 | x(8220002C): LDR R2, R2, 2CH |
| 05F4 | y(F7FFFDBB): BL -581 [03B0H] |
| |
| s := s.nextz |
| 05F5 | z(80E00004): LDR R0, SP, 4H |
| 05F6 | z(D124194C): BLEQ MT [trap=4, pos=9241] |
| ENDa ; |
| 05F7 | a(80000030): LDR R0, R0, 30H |
| 05F8 | a(A0E00004): STR R0, SP, 4H |
| 05F9 | a(E7FFFFEC): B -20 [05E6H] |
| s := root;b |
| 05FA | b .FIXUP D |
| 05FA | b(8D000017): LDR SB, MT, MOD0 [EBNF] |
| 05FB | b(80D00060): LDR R0, SB, 60H [data] |
| 05FC | b(A0E00004): STR R0, SP, 4H |
| WHILE s # NIL DOc |
| 05FD | c(80E00004): LDR R0, SP, 4H |
| 05FE | c(E100000E): BEQ 14 [060DH] |
| IF s.tagd = 1 THENe pair(s.vf)g ENDh ; |
| 05FF | d(80E00004): LDR R0, SP, 4H |
| 0600 | d(D124564C): BLEQ MT [trap=4, pos=9302] |
| 0601 | e(80000000): LDR R0, R0, 0H |
| 0602 | e(40090001): SUB R0, R0, 1H |
| 0603 | e(E9000004): BNE 4 [0608H] |
| 0604 | f(80E00004): LDR R0, SP, 4H |
| 0605 | f(D124684C): BLEQ MT [trap=4, pos=9320] |
| 0606 | g(80000010): LDR R0, R0, 10H |
| 0607 | h(F7FFFF52): BL -174 [055AH] |
| s := s.nexti |
| 0608 | i(80E00004): LDR R0, SP, 4H |
| 0609 | i(D124814C): BLEQ MT [trap=4, pos=9345] |
| ENDj ; |
| 060A | j(80000030): LDR R0, R0, 30H |
| 060B | j(A0E00004): STR R0, SP, 4H |
| 060C | j(E7FFFFF0): B -16 [05FDH] |
| Texts.Append(Oberon.Log,k W.buf)l |
| 060D | k .FIXUP D |
| 060D | k(8D400013): LDR SB, MT, MOD4 [Oberon] |
| 060E | k(80D0000D): LDR R0, SB, VAR13 |
| 060F | l .FIXUP D |
| 060F | l(8D000002): LDR SB, MT, MOD0 [EBNF] |
| 0610 | l(81D0009C): LDR R1, SB, 9CH [data] |
| ENDm Follow; |
| 0611 | m .FIXUP P |
| 0611 | m(F710E04D): BL MOD1 [Texts] PROC14 |
| 0612 | m(8FE00000): LDR LNK, SP, 0H |
| 0613 | m(4EE80008): ADD SP, SP, 8H |
| 0614 | m(C700000F): B LNK |
| |
| BEGINn Texts.OpenWriter(W)o |
| 0615 | n .PROC 0 |
| 0615 | n .ENTRYPOINT |
| 0615 | n(4EE90004): SUB SP, SP, 4H |
| 0616 | n(AFE00000): STR LNK, SP, 0H |
| 0617 | o .FIXUP D |
| 0617 | o(8D000008): LDR SB, MT, MOD0 [EBNF] |
| 0618 | o(40D8009C): ADD R0, SB, 9CH [data] |
| 0619 | o .FIXUP D |
| 0619 | o(8D100002): LDR SB, MT, MOD1 [Texts] |
| 061A | o(41D80005): ADD R1, SB, VAR5 |
| ENDp EBNF.q |
| 061B | p .FIXUP P |
| 061B | p(F711700A): BL MOD1 [Texts] PROC23 |
| 061C | q(8FE00000): LDR LNK, SP, 0H |
| 061D | q(4EE80004): ADD SP, SP, 4H |
| 061E | q(C700000F): B LNK |