| 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 |