STACKS
FILE INFORMATION
FILENAME(S): STACKS
FILE TYPE(S): PRG
FILE SIZE: 6.6K
FIRST SEEN: 2025-10-19 22:49:31
APPEARS ON: 1 disk(s)
FILE HASH
004bb47ef2f5714051589454a5ef4b180385dde541945f30d1e2f350ef3c3b7d
FOUND ON DISKS (1 DISKS)
| DISK TITLE | FILENAME | FILE TYPE | COLLECTION | TRACK | SECTOR | ACTIONS |
|---|---|---|---|---|---|---|
| GOLD DISK 7 | STACKS | PRG | Radd Maxx | 9 | 6 | DOWNLOAD FILE |
FILE CONTENT & ANALYSIS
> DETECTED: COMMODORE BASIC PROGRAM (LOAD ADDRESS $0801)
00000000: 01 08 4B 08 64 00 8F 20 20 46 49 52 53 54 2C 20 |..K.d.. FIRST, |
00000010: 57 45 20 4D 55 53 54 20 41 4C 4C 4F 43 41 54 45 |WE MUST ALLOCATE|
00000020: 20 52 4F 4F 4D 20 20 20 20 20 20 20 20 20 20 20 | ROOM |
00000030: 20 46 4F 52 20 54 48 45 20 54 57 4F 20 53 54 41 | FOR THE TWO STA|
00000040: 43 4B 53 20 54 48 41 54 20 57 45 00 98 08 6E 00 |CKS THAT WE...n.|
00000050: 8F 20 20 4E 45 45 44 2E 20 54 48 45 20 4F 50 45 |. NEED. THE OPE|
00000060: 52 41 4E 44 20 53 54 41 43 4B 20 28 4E 55 4D 29 |RAND STACK (NUM)|
00000070: 20 20 20 20 20 20 20 20 20 20 20 57 49 4C 4C 20 | WILL |
00000080: 42 45 20 54 57 49 43 45 20 41 53 20 4C 41 52 47 |BE TWICE AS LARG|
00000090: 45 20 41 53 20 54 48 45 00 E4 08 78 00 8F 20 20 |E AS THE...x.. |
000000A0: 4F 50 45 52 41 54 4F 52 20 53 54 41 43 4B 20 28 |OPERATOR STACK (|
000000B0: 4F 50 29 2E 20 54 48 45 20 54 57 4F 20 20 20 20 |OP). THE TWO |
000000C0: 20 20 20 20 20 20 20 20 50 4F 49 4E 54 45 52 53 | POINTERS|
000000D0: 20 54 4F 20 54 4F 50 2D 4F 46 2D 53 54 41 43 4B | TO TOP-OF-STACK|
000000E0: 20 28 50 4E 00 31 09 82 00 8F 20 20 54 4F 20 54 | (PN.1.... TO T|
000000F0: 48 45 20 4F 50 45 52 41 4E 44 20 53 54 41 43 4B |HE OPERAND STACK|
00000100: 20 41 4E 44 20 50 4F 20 54 4F 20 20 20 20 20 20 | AND PO TO |
00000110: 20 20 20 20 54 48 45 20 4F 50 45 52 41 54 4F 52 | THE OPERATOR|
00000120: 20 53 54 41 43 4B 29 20 4D 55 53 54 20 41 4C 53 | STACK) MUST ALS|
00000130: 4F 00 7E 09 8C 00 8F 20 20 42 45 20 49 4E 49 54 |O.~.... BE INIT|
00000140: 49 41 4C 49 5A 45 44 2C 20 41 4E 44 20 57 45 20 |IALIZED, AND WE |
00000150: 4D 55 53 54 20 50 55 54 20 20 20 20 20 20 20 20 |MUST PUT |
00000160: 20 41 20 53 54 41 52 54 2D 4F 46 2D 4C 49 4E 45 | A START-OF-LINE|
00000170: 20 46 4C 41 47 20 49 4E 54 4F 20 54 48 45 00 CB | FLAG INTO THE..|
00000180: 09 96 00 8F 20 20 54 48 45 20 54 4F 50 20 4F 46 |.... THE TOP OF|
00000190: 20 54 48 45 20 4F 50 45 52 41 54 4F 52 20 53 54 | THE OPERATOR ST|
000001A0: 41 43 4B 2E 20 20 20 20 20 20 20 20 20 20 54 48 |ACK. TH|
000001B0: 45 20 53 54 52 49 4E 47 20 4F 46 20 4C 45 47 41 |E STRING OF LEGA|
000001C0: 4C 20 4F 50 45 52 41 54 4F 52 53 00 18 0A A0 00 |L OPERATORS.....|
000001D0: 8F 20 20 4D 55 53 54 20 41 4C 53 4F 20 42 45 20 |. MUST ALSO BE |
000001E0: 49 4E 49 54 49 41 4C 49 5A 45 44 2E 20 54 48 45 |INITIALIZED. THE|
000001F0: 20 20 20 20 20 20 20 20 20 20 20 50 4F 53 49 54 | POSIT|
00000200: 49 4F 4E 20 49 4E 20 54 48 45 20 53 54 52 49 4E |ION IN THE STRIN|
00000210: 47 20 4F 46 20 54 48 45 00 59 0A AA 00 8F 20 20 |G OF THE.Y.... |
00000220: 4F 50 45 52 41 54 4F 52 20 4D 45 41 53 55 52 45 |OPERATOR MEASURE|
00000230: 53 20 54 48 45 20 50 52 49 4F 52 49 54 59 20 20 |S THE PRIORITY |
00000240: 20 20 20 20 20 20 20 20 4F 46 20 54 48 41 54 20 | OF THAT |
00000250: 4F 50 45 52 41 54 4F 52 2E 00 5F 0A B4 00 8F 00 |OPERATOR.._.....|
00000260: 76 0A BE 00 86 20 4E 55 4D 28 32 30 30 29 2C 4F |v.... NUM(200),O|
00000270: 50 28 31 30 30 29 00 88 0A C8 00 4F 50 24 B2 22 |P(100).....OP$."|
00000280: 28 2B 2D 2A 2F 5E 29 22 00 A3 0A D2 00 50 4E B2 |(+-*/^)".....PN.|
00000290: 30 20 3A 20 4F 50 28 31 29 B2 AB 31 20 3A 20 50 |0 : OP(1)..1 : P|
000002A0: 4F B2 31 00 A9 0A DC 00 8F 00 F3 0A E6 00 8F 20 |O.1............ |
000002B0: 20 52 45 41 44 20 49 4E 20 54 48 45 20 45 58 50 | READ IN THE EXP|
000002C0: 52 45 53 53 49 4F 4E 20 54 4F 20 50 41 52 53 45 |RESSION TO PARSE|
000002D0: 20 20 20 20 20 20 20 20 20 41 4E 44 20 45 43 48 | AND ECH|
000002E0: 4F 20 49 54 20 54 4F 20 54 48 45 20 53 43 52 45 |O IT TO THE SCRE|
000002F0: 45 4E 2E 00 F9 0A F0 00 8F 00 1A 0B FA 00 85 20 |EN............. |
00000300: 22 45 4E 54 45 52 20 54 48 45 20 45 58 50 52 45 |"ENTER THE EXPRE|
00000310: 53 53 49 4F 4E 22 3B 49 4E 24 00 28 0B 04 01 99 |SSION";IN$.(....|
00000320: 20 49 4E 24 22 3D 22 3B 00 2E 0B 0E 01 8F 00 78 | IN$"=";.......x|
00000330: 0B 18 01 8F 20 20 54 48 45 20 50 41 52 53 45 52 |.... THE PARSER|
00000340: 20 42 45 47 49 4E 53 20 41 54 20 32 39 30 2E 20 | BEGINS AT 290. |
00000350: 46 49 52 53 54 20 20 20 20 20 20 20 20 20 52 45 |FIRST RE|
00000360: 4D 4F 56 45 20 41 4C 4C 20 4C 45 41 44 49 4E 47 |MOVE ALL LEADING|
00000370: 20 42 4C 41 4E 4B 53 2E 00 7E 0B 22 01 8F 00 BC | BLANKS..~."....|
00000380: 0B 2C 01 8B 20 C8 28 49 4E 24 2C 31 29 B2 22 20 |.,.. .(IN$,1)." |
00000390: 22 20 A7 20 20 20 20 20 20 20 20 20 20 20 20 20 |" . |
000003A0: 20 20 20 49 4E 24 B2 C9 28 49 4E 24 2C C3 28 49 | IN$..(IN$,.(I|
000003B0: 4E 24 29 AB 31 29 3A 89 20 33 30 30 00 C2 0B 36 |N$).1):. 300...6|
000003C0: 01 8F 00 0D 0C 40 01 8F 20 20 4E 4F 57 20 49 46 |.....@.. NOW IF|
000003D0: 20 54 48 45 52 45 20 49 53 20 4E 4F 20 4D 4F 52 | THERE IS NO MOR|
000003E0: 45 20 53 54 52 49 4E 47 2C 20 20 20 20 20 20 20 |E STRING, |
000003F0: 20 20 47 4F 20 54 4F 20 54 48 45 20 46 49 4E 41 | GO TO THE FINA|
00000400: 4C 20 50 52 4F 43 45 53 53 49 4E 47 2E 00 13 0C |L PROCESSING....|
00000410: 4A 01 8F 00 27 0C 54 01 8B 20 49 4E 24 B2 22 22 |J...'.T.. IN$.""|
00000420: 20 89 20 31 31 35 30 00 2D 0C 5E 01 8F 00 78 0C | . 1150.-.^...x.|
00000430: 68 01 8F 20 20 49 4E 49 54 49 41 4C 49 5A 45 20 |h.. INITIALIZE |
00000440: 54 48 45 20 4F 50 45 52 41 54 4F 52 20 54 4F 4B |THE OPERATOR TOK|
00000450: 45 4E 20 20 20 20 20 20 20 20 20 20 20 54 4F 20 |EN TO |
00000460: 30 20 41 4E 44 20 47 45 54 20 54 48 45 20 46 49 |0 AND GET THE FI|
00000470: 52 53 54 20 43 48 41 52 00 BB 0C 72 01 8F 20 20 |RST CHAR...r.. |
00000480: 4F 46 20 54 48 45 20 52 45 4D 41 49 4E 49 4E 47 |OF THE REMAINING|
00000490: 20 4C 49 4E 45 20 49 4E 54 4F 20 41 20 20 20 20 | LINE INTO A |
000004A0: 20 20 20 20 20 20 20 20 54 45 4D 50 4F 52 41 52 | TEMPORAR|
000004B0: 59 20 56 41 52 49 41 42 4C 45 2E 00 C1 0C 7C 01 |Y VARIABLE....|.|
000004C0: 8F 00 DB 0C 86 01 46 4F 55 4E 44 B2 30 20 3A 20 |......FOUND.0 : |
000004D0: 54 24 B2 C8 28 49 4E 24 2C 31 29 00 E1 0C 90 01 |T$..(IN$,1).....|
000004E0: 8F 00 2F 0D 9A 01 8F 20 20 4E 4F 57 20 43 48 45 |../.... NOW CHE|
000004F0: 43 4B 20 54 48 45 20 43 48 41 52 41 43 54 45 52 |CK THE CHARACTER|
00000500: 20 41 47 41 49 4E 53 54 20 20 20 20 20 20 20 20 | AGAINST |
00000510: 20 45 41 43 48 20 4F 46 20 54 48 45 20 50 4F 53 | EACH OF THE POS|
00000520: 53 49 42 4C 45 20 4F 50 45 52 41 54 4F 52 53 00 |SIBLE OPERATORS.|
00000530: 7B 0D A4 01 8F 20 20 49 46 20 57 45 20 46 49 4E |{.... IF WE FIN|
00000540: 44 20 4F 4E 45 20 53 45 54 20 54 48 45 20 56 41 |D ONE SET THE VA|
00000550: 4C 55 45 20 4F 46 20 20 20 20 20 20 20 20 20 54 |LUE OF T|
00000560: 48 45 20 54 4F 4B 45 4E 20 54 4F 20 54 48 45 20 |HE TOKEN TO THE |
00000570: 4C 4F 43 41 54 49 4F 4E 20 49 4E 00 BE 0D AE 01 |LOCATION IN.....|
00000580: 8F 20 20 54 48 45 20 53 54 52 49 4E 47 2C 20 41 |. THE STRING, A|
00000590: 4E 44 20 46 4F 52 43 45 20 54 48 45 20 4C 4F 4F |ND FORCE THE LOO|
000005A0: 50 20 20 20 20 20 20 20 20 20 20 54 4F 20 54 45 |P TO TE|
000005B0: 52 4D 49 4E 41 54 45 20 45 41 52 4C 59 2E 00 C4 |RMINATE EARLY...|
000005C0: 0D B8 01 8F 00 D9 0D C2 01 81 20 49 20 B2 20 31 |.......... I . 1|
000005D0: 20 A4 20 C3 28 4F 50 24 29 00 20 0E CC 01 8B 20 | . .(OP$). .... |
000005E0: 54 24 B2 CA 28 4F 50 24 2C 49 2C 31 29 20 A7 20 |T$..(OP$,I,1) . |
000005F0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000610: 46 4F 55 4E 44 B2 49 3A 49 B2 C3 28 4F 50 24 29 |FOUND.I:I..(OP$)|
00000620: 00 26 0E D6 01 82 00 2C 0E E0 01 8F 00 78 0E EA |.&.....,.....x..|
00000630: 01 8F 20 20 49 46 20 57 45 27 56 45 20 46 4F 55 |.. IF WE'VE FOU|
00000640: 4E 44 20 41 4E 20 4F 50 45 52 41 54 4F 52 20 54 |ND AN OPERATOR T|
00000650: 48 45 4E 20 20 20 20 20 20 20 20 20 54 41 4B 45 |HEN TAKE|
00000660: 20 49 54 20 4F 46 46 20 54 48 45 20 46 52 4F 4E | IT OFF THE FRON|
00000670: 54 20 4F 46 20 54 48 45 00 B0 0E F4 01 8F 20 20 |T OF THE...... |
00000680: 53 54 52 49 4E 47 20 41 4E 44 20 53 4B 49 50 20 |STRING AND SKIP |
00000690: 54 48 45 20 52 45 53 54 20 4F 46 20 54 48 45 20 |THE REST OF THE |
000006A0: 20 20 20 20 20 20 20 20 50 41 52 53 49 4E 47 2E | PARSING.|
000006B0: 00 B6 0E FE 01 8F 00 F9 0E 08 02 8B 20 46 4F 55 |............ FOU|
000006C0: 4E 44 B3 B1 30 20 A7 20 20 20 20 20 20 20 20 20 |ND..0 . |
000006D0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000006E0: 49 4E 24 B2 C9 28 49 4E 24 2C C3 28 49 4E 24 29 |IN$..(IN$,.(IN$)|
000006F0: AB 31 29 3A 89 20 38 32 30 00 FF 0E 12 02 8F 00 |.1):. 820.......|
00000700: 4C 0F 1C 02 8F 20 20 57 45 20 44 4F 4E 27 54 20 |L.... WE DON'T |
00000710: 48 41 56 45 20 41 20 4C 45 47 41 4C 20 4F 50 45 |HAVE A LEGAL OPE|
00000720: 52 41 54 4F 52 20 20 20 20 20 20 20 20 20 20 53 |RATOR S|
00000730: 4F 20 41 53 53 55 4D 45 20 41 4E 20 4F 50 45 52 |O ASSUME AN OPER|
00000740: 41 4E 44 2E 20 57 45 20 4D 55 53 54 00 98 0F 26 |AND. WE MUST...&|
00000750: 02 8F 20 20 46 49 4E 44 20 54 48 45 20 46 49 52 |.. FIND THE FIR|
00000760: 53 54 20 4E 4F 4E 2D 44 49 47 49 54 20 49 4E 20 |ST NON-DIGIT IN |
00000770: 54 48 45 20 20 20 20 20 20 20 20 20 52 45 53 54 |THE REST|
00000780: 20 4F 46 20 54 48 45 20 49 4E 50 55 54 20 53 54 | OF THE INPUT ST|
00000790: 52 49 4E 47 20 41 4E 44 00 E4 0F 30 02 8F 20 20 |RING AND...0.. |
000007A0: 4D 41 4B 45 20 41 20 4E 4F 54 45 20 4F 46 20 54 |MAKE A NOTE OF T|
000007B0: 48 45 20 4C 4F 43 41 54 49 4F 4E 20 53 4F 20 20 |HE LOCATION SO |
000007C0: 20 20 20 20 20 20 20 20 54 48 41 54 20 57 45 20 | THAT WE |
000007D0: 43 41 4E 20 52 45 4D 4F 56 45 20 54 48 45 20 54 |CAN REMOVE THE T|
000007E0: 4F 4B 45 4E 00 31 10 3A 02 8F 20 20 46 52 4F 4D |OKEN.1.:.. FROM|
000007F0: 20 54 48 45 20 53 54 52 49 4E 47 2E 20 49 4E 49 | THE STRING. INI|
00000800: 54 49 41 4C 4C 59 20 57 45 20 20 20 20 20 20 20 |TIALLY WE |
00000810: 20 20 20 20 41 53 53 55 4D 45 20 54 48 45 20 52 | ASSUME THE R|
00000820: 45 53 54 20 4F 46 20 54 48 45 20 53 54 52 49 4E |EST OF THE STRIN|
00000830: 47 00 76 10 44 02 8F 20 20 49 53 20 54 48 45 20 |G.v.D.. IS THE |
00000840: 4E 55 4D 42 45 52 2C 20 54 48 45 4E 20 53 45 41 |NUMBER, THEN SEA|
00000850: 52 43 48 20 46 4F 52 20 20 20 20 20 20 20 20 20 |RCH FOR |
00000860: 20 41 4E 20 45 41 52 4C 49 45 52 20 4E 4F 4E 2D | AN EARLIER NON-|
00000870: 44 49 47 49 54 2E 00 7C 10 4E 02 8F 00 8E 10 58 |DIGIT..|.N.....X|
00000880: 02 4C 41 53 54 B2 C3 28 49 4E 24 29 AA 31 00 A3 |.LAST..(IN$).1..|
00000890: 10 62 02 81 20 49 20 B2 20 31 20 A4 20 C3 28 49 |.b.. I . 1 . .(I|
000008A0: 4E 24 29 00 A9 10 6C 02 8F 00 F3 10 76 02 8F 20 |N$)...l.....v.. |
000008B0: 20 55 53 45 20 41 20 54 45 4D 50 4F 52 41 52 59 | USE A TEMPORARY|
000008C0: 20 56 41 52 49 41 42 4C 45 20 46 4F 52 20 20 20 | VARIABLE FOR |
000008D0: 20 20 20 20 20 20 20 20 20 54 48 45 20 4E 45 58 | THE NEX|
000008E0: 54 20 43 48 41 52 41 43 54 45 52 20 54 4F 20 53 |T CHARACTER TO S|
000008F0: 41 56 45 00 40 11 80 02 8F 20 20 54 49 4D 45 2E |AVE.@.... TIME.|
00000900: 20 46 4F 52 43 45 20 54 48 45 20 4C 4F 4F 50 20 | FORCE THE LOOP |
00000910: 54 4F 20 53 54 4F 50 20 20 20 20 20 20 20 20 20 |TO STOP |
00000920: 20 20 20 45 41 52 4C 59 20 49 46 20 57 45 20 46 | EARLY IF WE F|
00000930: 49 4E 44 20 41 20 4E 4F 4E 2D 44 49 47 49 54 2E |IND A NON-DIGIT.|
00000940: 00 46 11 8A 02 8F 00 58 11 94 02 54 24 B2 CA 28 |.F.....X...T$..(|
00000950: 49 4E 24 2C 49 2C 31 29 00 9F 11 9E 02 8B 20 54 |IN$,I,1)...... T|
00000960: 24 B3 B1 22 2E 22 20 AF 20 28 54 24 B3 22 30 22 |$.."." . (T$."0"|
00000970: 20 B0 20 54 24 B1 22 39 22 29 20 20 20 20 20 20 | . T$."9") |
00000980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 A7 20 | . |
00000990: 4C 41 53 54 B2 49 3A 49 B2 C3 28 49 4E 24 29 00 |LAST.I:I..(IN$).|
000009A0: A5 11 A8 02 82 00 AB 11 B2 02 8F 00 F8 11 BC 02 |................|
000009B0: 8F 20 20 50 55 54 20 54 48 45 20 56 41 4C 55 45 |. PUT THE VALUE|
000009C0: 20 4F 46 20 54 48 45 20 4E 55 4D 42 45 52 20 49 | OF THE NUMBER I|
000009D0: 4E 20 20 20 20 20 20 20 20 20 20 54 30 4B 45 4E |N T0KEN|
000009E0: 20 28 54 4F 20 49 53 20 41 20 52 45 53 45 52 56 | (TO IS A RESERV|
000009F0: 45 44 20 57 4F 52 44 29 00 39 12 C6 02 8F 20 20 |ED WORD).9.... |
00000A00: 41 4E 44 20 52 45 4D 4F 56 45 20 54 48 45 20 43 |AND REMOVE THE C|
00000A10: 48 41 52 41 43 54 45 52 53 20 46 52 4F 4D 20 20 |HARACTERS FROM |
00000A20: 20 20 20 20 20 20 20 20 54 48 45 20 49 4E 50 55 | THE INPU|
00000A30: 54 20 53 54 52 49 4E 47 2E 00 3F 12 D0 02 8F 00 |T STRING..?.....|
00000A40: 82 12 DA 02 54 30 4B 45 4E 20 B2 20 C5 28 C8 28 |....T0KEN . .(.(|
00000A50: 49 4E 24 2C 4C 41 53 54 AB 31 29 29 20 20 20 20 |IN$,LAST.1)) |
00000A60: 20 20 20 20 20 20 3A 20 49 4E 24 20 B2 20 C9 28 | : IN$ . .(|
00000A70: 49 4E 24 2C C3 28 49 4E 24 29 AB 4C 41 53 54 AA |IN$,.(IN$).LAST.|
00000A80: 31 29 00 88 12 E4 02 8F 00 D2 12 EE 02 8F 20 20 |1)............ |
00000A90: 54 48 49 53 20 45 4E 44 53 20 54 48 45 20 50 41 |THIS ENDS THE PA|
00000AA0: 52 53 45 52 2E 20 4F 4E 20 45 58 49 54 2C 20 20 |RSER. ON EXIT, |
00000AB0: 20 20 20 20 20 20 20 20 46 4F 55 4E 44 3D 30 20 | FOUND=0 |
00000AC0: 49 46 20 54 48 45 20 54 4F 4B 45 4E 20 49 53 20 |IF THE TOKEN IS |
00000AD0: 41 4E 00 1C 13 F8 02 8F 20 20 4F 50 45 52 41 4E |AN...... OPERAN|
00000AE0: 44 20 4F 52 20 49 46 20 54 48 45 20 54 4F 4B 45 |D OR IF THE TOKE|
00000AF0: 4E 20 49 53 20 41 4E 20 20 20 20 20 20 20 20 20 |N IS AN |
00000B00: 20 20 4F 50 45 52 41 54 4F 52 20 46 4F 55 4E 44 | OPERATOR FOUND|
00000B10: 3D 32 2A 50 52 49 4F 52 49 54 59 2E 00 5E 13 02 |=2*PRIORITY..^..|
00000B20: 03 8F 20 20 49 46 20 57 45 20 48 41 56 45 20 41 |.. IF WE HAVE A|
00000B30: 4E 20 4F 50 45 52 41 4E 44 20 54 48 45 4E 20 54 |N OPERAND THEN T|
00000B40: 48 45 20 20 20 20 20 20 20 20 20 20 56 41 4C 55 |HE VALU|
00000B50: 45 20 49 53 20 49 4E 20 54 30 4B 45 4E 2E 00 64 |E IS IN T0KEN..d|
00000B60: 13 0C 03 8F 00 AF 13 16 03 8F 20 20 4E 4F 57 20 |.......... NOW |
00000B70: 42 45 47 49 4E 20 54 48 45 20 45 58 50 52 45 53 |BEGIN THE EXPRES|
00000B80: 53 49 4F 4E 20 50 52 4F 2D 20 20 20 20 20 20 20 |SION PRO- |
00000B90: 20 20 20 20 43 45 53 53 49 4E 47 2E 20 49 46 20 | CESSING. IF |
00000BA0: 54 48 45 20 54 4F 4B 45 4E 20 49 53 20 41 4E 00 |THE TOKEN IS AN.|
00000BB0: FC 13 20 03 8F 20 20 4F 50 45 52 41 4E 44 20 54 |.. .. OPERAND T|
00000BC0: 48 45 4E 20 50 55 53 48 20 49 54 20 4F 4E 54 4F |HEN PUSH IT ONTO|
00000BD0: 20 54 48 45 20 20 20 20 20 20 20 20 20 20 20 4F | THE O|
00000BE0: 50 45 52 41 4E 44 20 53 54 41 43 4B 20 41 4E 44 |PERAND STACK AND|
00000BF0: 20 47 45 54 20 41 4E 4F 54 48 45 52 00 32 14 2A | GET ANOTHER.2.*|
00000C00: 03 8F 20 20 54 4F 4B 45 4E 20 20 20 20 20 20 20 |.. TOKEN |
00000C10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000C20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000C30: 20 2E 00 7B 14 34 03 8B 20 46 4F 55 4E 44 B2 30 | ..{.4.. FOUND.0|
00000C40: 20 A7 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | . |
00000C50: 20 20 20 20 20 20 20 20 20 20 20 20 50 4E B2 50 | PN.P|
00000C60: 4E AA 31 20 3A 20 4E 55 4D 28 50 4E 29 B2 54 30 |N.1 : NUM(PN).T0|
00000C70: 4B 45 4E 20 3A 20 89 20 33 30 30 00 81 14 3E 03 |KEN : . 300...>.|
00000C80: 8F 00 CE 14 48 03 8F 20 20 49 46 20 54 48 45 20 |....H.. IF THE |
00000C90: 54 4F 4B 45 4E 20 49 53 20 41 4E 20 4F 50 45 4E |TOKEN IS AN OPEN|
00000CA0: 49 4E 47 20 20 20 20 20 20 20 20 20 20 20 20 20 |ING |
00000CB0: 20 50 41 52 45 4E 54 48 45 53 49 53 20 54 48 45 | PARENTHESIS THE|
00000CC0: 4E 20 50 55 53 48 20 49 54 20 4F 4E 54 4F 00 0C |N PUSH IT ONTO..|
00000CD0: 15 52 03 8F 20 20 54 48 45 20 4F 50 45 52 41 54 |.R.. THE OPERAT|
00000CE0: 4F 52 20 53 54 41 43 4B 20 41 4E 44 20 47 45 54 |OR STACK AND GET|
00000CF0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 4E | AN|
00000D00: 4F 54 48 45 52 20 54 4F 4B 45 4E 2E 00 12 15 5C |OTHER TOKEN....\|
00000D10: 03 8F 00 5B 15 66 03 8B 20 54 24 B2 22 28 22 20 |...[.f.. T$."(" |
00000D20: A7 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
00000D30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000D40: 20 50 4F B2 50 4F AA 31 20 3A 20 4F 50 28 50 4F | PO.PO.1 : OP(PO|
00000D50: 29 B2 31 20 3A 20 89 20 33 30 30 00 61 15 70 03 |).1 : . 300.a.p.|
00000D60: 8F 00 AD 15 7A 03 8F 20 20 49 46 20 54 48 45 20 |....z.. IF THE |
00000D70: 4F 50 45 52 41 54 4F 52 20 49 53 4E 27 54 20 41 |OPERATOR ISN'T A|
00000D80: 20 43 4C 4F 53 49 4E 47 20 20 20 20 20 20 20 20 | CLOSING |
00000D90: 20 50 41 52 45 4E 54 48 45 53 49 53 20 54 48 45 | PARENTHESIS THE|
00000DA0: 4E 20 45 58 45 43 55 54 45 20 54 48 45 00 FB 15 |N EXECUTE THE...|
00000DB0: 84 03 8F 20 20 45 56 41 4C 55 41 54 45 20 53 55 |... EVALUATE SU|
00000DC0: 42 52 4F 55 54 49 4E 45 20 55 4E 54 49 4C 20 49 |BROUTINE UNTIL I|
00000DD0: 54 20 20 20 20 20 20 20 20 20 20 20 20 43 4F 4D |T COM|
00000DE0: 50 4C 45 54 45 53 2E 20 54 48 49 53 20 57 49 4C |PLETES. THIS WIL|
00000DF0: 4C 20 4C 45 41 56 45 20 54 48 45 00 45 16 8E 03 |L LEAVE THE.E...|
00000E00: 8F 20 20 53 54 41 43 4B 20 49 4E 20 41 20 43 4F |. STACK IN A CO|
00000E10: 4E 53 49 53 54 45 4E 54 20 53 54 41 54 45 20 41 |NSISTENT STATE A|
00000E20: 4E 44 20 20 20 20 20 20 20 20 20 50 55 53 48 20 |ND PUSH |
00000E30: 54 48 45 20 4F 50 45 52 41 54 4F 52 20 4F 4E 54 |THE OPERATOR ONT|
00000E40: 4F 20 54 48 45 00 90 16 98 03 8F 20 20 53 54 41 |O THE...... STA|
00000E50: 43 4B 20 41 54 20 54 48 45 20 41 50 50 52 4F 50 |CK AT THE APPROP|
00000E60: 52 49 41 54 45 20 53 50 4F 54 2E 20 20 20 20 20 |RIATE SPOT. |
00000E70: 20 20 20 20 20 54 48 45 4E 20 47 4F 20 47 45 54 | THEN GO GET|
00000E80: 20 54 48 45 20 4E 45 58 54 20 54 4F 4B 45 4E 2E | THE NEXT TOKEN.|
00000E90: 00 96 16 A2 03 8F 00 DA 16 AC 03 8B 20 54 24 B3 |............ T$.|
00000EA0: B1 22 29 22 20 A7 20 20 20 20 20 20 20 20 20 20 |.")" . |
00000EB0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00000EC0: 20 20 20 20 20 20 20 20 20 20 20 20 20 8D 20 31 | . 1|
00000ED0: 33 35 30 3A 20 89 20 33 30 30 00 E0 16 B6 03 8F |350: . 300......|
00000EE0: 00 27 17 C0 03 8F 20 20 57 45 20 48 41 56 45 20 |.'.... WE HAVE |
00000EF0: 41 20 43 4C 4F 53 49 4E 47 20 50 41 52 45 4E 54 |A CLOSING PARENT|
00000F00: 48 45 53 49 53 20 20 20 20 20 20 20 20 20 20 20 |HESIS |
00000F10: 53 4F 20 57 45 20 55 53 45 20 54 48 45 20 46 4F |SO WE USE THE FO|
00000F20: 4C 4C 4F 57 49 4E 47 00 73 17 CA 03 8F 20 20 53 |LLOWING.s.... S|
00000F30: 54 52 41 54 45 47 59 2E 20 53 45 54 20 54 48 45 |TRATEGY. SET THE|
00000F40: 20 50 52 45 53 45 4E 54 20 54 4F 4B 45 4E 20 20 | PRESENT TOKEN |
00000F50: 20 20 20 20 20 20 20 54 4F 20 30 20 28 41 20 53 | TO 0 (A S|
00000F60: 50 45 43 49 41 4C 20 4F 50 45 52 41 54 4F 52 29 |PECIAL OPERATOR)|
00000F70: 20 53 4F 00 BC 17 D4 03 8F 20 20 54 48 41 54 20 | SO...... THAT |
00000F80: 4E 4F 20 4F 50 45 52 41 54 4F 52 20 57 49 4C 4C |NO OPERATOR WILL|
00000F90: 20 47 45 54 20 50 55 54 20 20 20 20 20 20 20 20 | GET PUT |
00000FA0: 20 20 20 4F 4E 54 4F 20 54 48 45 20 53 54 41 43 | ONTO THE STAC|
00000FB0: 4B 2E 20 54 48 45 4E 20 4B 45 45 50 00 08 18 DE |K. THEN KEEP....|
00000FC0: 03 8F 20 20 43 41 4C 4C 49 4E 47 20 54 48 45 20 |.. CALLING THE |
00000FD0: 45 56 41 4C 55 41 54 45 20 52 4F 55 54 49 4E 45 |EVALUATE ROUTINE|
00000FE0: 20 20 20 20 20 20 20 20 20 20 20 20 55 4E 54 49 | UNTI|
00000FF0: 4C 20 41 4E 20 4F 50 45 4E 49 4E 47 20 50 41 52 |L AN OPENING PAR|
00001000: 45 4E 54 48 45 53 49 53 00 34 18 E8 03 8F 20 20 |ENTHESIS.4.... |
00001010: 49 53 20 46 4F 55 4E 44 2E 20 20 20 20 20 20 20 |IS FOUND. |
00001020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001030: 20 20 20 2E 00 40 18 F2 03 46 4F 55 4E 44 B2 30 | ..@...FOUND.0|
00001040: 00 85 18 FC 03 8B 20 4F 50 28 50 4F 29 B3 B1 31 |...... OP(PO)..1|
00001050: 20 A7 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | . |
00001060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001070: 20 20 20 20 20 20 20 8D 20 31 33 35 30 3A 20 89 | . 1350: .|
00001080: 20 31 30 32 30 00 8B 18 06 04 8F 00 D6 18 10 04 | 1020...........|
00001090: 8F 20 20 4F 4E 43 45 20 41 4E 20 4F 50 45 4E 49 |. ONCE AN OPENI|
000010A0: 4E 47 20 50 41 52 45 4E 54 48 45 53 49 53 20 49 |NG PARENTHESIS I|
000010B0: 53 20 20 20 20 20 20 20 20 20 20 46 4F 55 4E 44 |S FOUND|
000010C0: 20 57 45 20 52 45 4D 4F 56 45 20 49 54 20 46 52 | WE REMOVE IT FR|
000010D0: 4F 4D 20 54 48 45 00 0C 19 1A 04 8F 20 20 53 54 |OM THE...... ST|
000010E0: 41 43 4B 20 41 4E 44 20 47 4F 20 47 45 54 20 54 |ACK AND GO GET T|
000010F0: 48 45 20 4E 45 58 54 20 20 20 20 20 20 20 20 20 |HE NEXT |
00001100: 20 20 20 20 20 20 54 4F 4B 45 4E 2E 00 12 19 24 | TOKEN....$|
00001110: 04 8F 00 26 19 2E 04 50 4F B2 50 4F AB 31 20 3A |...&...PO.PO.1 :|
00001120: 20 89 20 33 30 30 00 2C 19 38 04 8F 00 76 19 42 | . 300.,.8...v.B|
00001130: 04 8F 20 20 54 48 49 53 20 49 53 20 57 48 45 52 |.. THIS IS WHER|
00001140: 45 20 57 45 20 57 49 4E 44 20 55 50 20 41 46 54 |E WE WIND UP AFT|
00001150: 45 52 20 20 20 20 20 20 20 20 20 20 54 48 45 20 |ER THE |
00001160: 45 4E 54 49 52 45 20 53 54 52 49 4E 47 20 48 41 |ENTIRE STRING HA|
00001170: 53 20 42 45 45 4E 00 C0 19 4C 04 8F 20 20 50 52 |S BEEN...L.. PR|
00001180: 4F 43 45 53 53 45 44 2E 20 4E 4F 57 20 57 45 20 |OCESSED. NOW WE |
00001190: 4B 45 45 50 20 43 41 4C 4C 49 4E 47 20 20 20 20 |KEEP CALLING |
000011A0: 20 20 20 20 20 20 54 48 45 20 45 56 41 4C 55 41 | THE EVALUA|
000011B0: 54 45 20 52 4F 55 54 49 4E 45 20 55 4E 54 49 4C |TE ROUTINE UNTIL|
000011C0: 00 07 1A 56 04 8F 20 20 57 45 20 46 49 4E 44 20 |...V.. WE FIND |
000011D0: 54 48 45 20 53 54 41 52 54 2D 4F 46 2D 4C 49 4E |THE START-OF-LIN|
000011E0: 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |E |
000011F0: 54 4F 4B 45 4E 20 4F 4E 20 54 48 45 20 54 4F 50 |TOKEN ON THE TOP|
00001200: 20 4F 46 20 54 48 45 00 52 1A 60 04 8F 20 20 4F | OF THE.R.`.. O|
00001210: 50 45 52 41 54 4F 52 20 53 54 41 43 4B 2E 20 57 |PERATOR STACK. W|
00001220: 48 45 4E 20 54 48 49 53 20 20 20 20 20 20 20 20 |HEN THIS |
00001230: 20 20 20 20 20 20 20 4F 43 43 55 52 53 20 57 45 | OCCURS WE|
00001240: 20 4B 4E 4F 57 20 54 48 41 54 20 57 45 20 48 41 | KNOW THAT WE HA|
00001250: 56 45 00 9F 1A 6A 04 8F 20 20 46 49 4E 49 53 48 |VE...j.. FINISH|
00001260: 45 44 2C 20 41 4E 44 20 54 48 45 20 52 45 53 55 |ED, AND THE RESU|
00001270: 4C 54 20 49 53 20 4F 4E 20 20 20 20 20 20 20 20 |LT IS ON |
00001280: 20 20 54 48 45 20 54 4F 50 20 4F 46 20 54 48 45 | THE TOP OF THE|
00001290: 20 4F 50 45 52 41 4E 44 20 53 54 41 43 4B 2E 00 | OPERAND STACK..|
000012A0: A5 1A 74 04 8F 00 EA 1A 7E 04 8B 20 4F 50 28 50 |..t.....~.. OP(P|
000012B0: 4F 29 20 B3 B1 20 AB 31 20 A7 20 20 20 20 20 20 |O) .. .1 . |
000012C0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000012D0: 20 20 20 20 20 20 20 20 20 20 20 20 8D 20 31 33 | . 13|
000012E0: 35 30 3A 20 89 20 31 31 35 30 00 F0 1A 88 04 8F |50: . 1150......|
000012F0: 00 12 1B 92 04 8F 20 20 50 52 49 4E 54 20 54 48 |...... PRINT TH|
00001300: 45 20 52 45 53 55 4C 54 20 41 4E 44 20 53 54 4F |E RESULT AND STO|
00001310: 50 2E 00 18 1B 9C 04 8F 00 25 1B A6 04 99 20 4E |P........%.... N|
00001320: 55 4D 28 31 29 00 2B 1B B0 04 80 00 31 1B BA 04 |UM(1).+.....1...|
00001330: 8F 00 7E 1B C4 04 8F 20 20 54 48 49 53 20 52 4F |..~.... THIS RO|
00001340: 55 54 49 4E 45 20 45 56 41 4C 55 41 54 45 53 20 |UTINE EVALUATES |
00001350: 54 48 45 20 20 20 20 20 20 20 20 20 20 20 20 20 |THE |
00001360: 20 53 54 41 43 4B 2E 49 46 20 54 48 45 20 50 52 | STACK.IF THE PR|
00001370: 45 53 45 4E 54 20 4F 50 45 52 41 54 4F 52 00 C7 |ESENT OPERATOR..|
00001380: 1B CE 04 8F 20 20 48 41 53 20 41 20 4C 4F 57 45 |.... HAS A LOWE|
00001390: 52 20 50 52 49 4F 52 49 54 59 20 54 48 41 4E 20 |R PRIORITY THAN |
000013A0: 54 48 45 20 20 20 20 20 20 20 20 20 20 20 54 4F |THE TO|
000013B0: 50 20 4F 46 20 54 48 45 20 4F 50 45 52 41 54 4F |P OF THE OPERATO|
000013C0: 52 20 53 54 41 43 4B 00 13 1C D8 04 8F 20 20 54 |R STACK...... T|
000013D0: 48 45 4E 20 54 48 45 20 54 4F 50 20 54 57 4F 20 |HEN THE TOP TWO |
000013E0: 49 54 45 4D 53 20 4F 4E 20 54 48 45 20 20 20 20 |ITEMS ON THE |
000013F0: 20 20 20 20 20 20 20 53 54 41 43 4B 20 41 52 45 | STACK ARE|
00001400: 20 45 56 41 4C 55 41 54 45 44 2C 20 41 4E 44 20 | EVALUATED, AND |
00001410: 54 48 45 00 5E 1C E2 04 8F 20 20 50 52 49 4F 52 |THE.^.... PRIOR|
00001420: 49 54 49 45 53 20 41 52 45 20 52 45 2D 43 48 45 |ITIES ARE RE-CHE|
00001430: 43 4B 45 44 2E 20 49 46 20 20 20 20 20 20 20 20 |CKED. IF |
00001440: 20 20 20 54 48 45 20 50 52 49 4F 52 49 54 59 20 | THE PRIORITY |
00001450: 4F 46 20 54 48 45 20 50 52 45 53 45 4E 54 00 A8 |OF THE PRESENT..|
00001460: 1C EC 04 8F 20 20 4F 50 45 52 41 54 4F 52 20 49 |.... OPERATOR I|
00001470: 53 20 47 52 45 41 54 45 52 20 54 48 41 4E 20 54 |S GREATER THAN T|
00001480: 48 45 20 20 20 20 20 20 20 20 20 20 20 20 50 52 |HE PR|
00001490: 49 4F 52 49 54 59 20 4F 46 20 54 48 45 20 54 4F |IORITY OF THE TO|
000014A0: 50 20 4F 46 20 54 48 45 00 F1 1C F6 04 8F 20 20 |P OF THE...... |
000014B0: 4F 50 45 52 41 54 4F 52 20 53 54 41 43 4B 20 54 |OPERATOR STACK T|
000014C0: 48 45 4E 20 54 48 45 20 54 4F 4B 45 4E 20 20 20 |HEN THE TOKEN |
000014D0: 20 20 20 20 20 20 20 20 49 53 20 50 55 53 48 45 | IS PUSHE|
000014E0: 44 20 4F 4E 54 4F 20 54 48 45 20 53 54 41 43 4B |D ONTO THE STACK|
000014F0: 2E 00 3A 1D 00 05 8F 20 20 49 46 20 54 48 45 20 |..:.... IF THE |
00001500: 50 52 45 53 45 4E 54 20 54 4F 4B 45 4E 3D 30 20 |PRESENT TOKEN=0 |
00001510: 54 48 45 4E 20 57 45 20 20 20 20 20 20 20 20 20 |THEN WE |
00001520: 20 48 41 56 45 20 54 48 45 20 53 50 45 43 49 41 | HAVE THE SPECIA|
00001530: 4C 20 4F 50 45 52 41 54 4F 52 00 86 1D 0A 05 8F |L OPERATOR......|
00001540: 20 20 43 4C 4F 53 49 4E 47 20 50 41 52 45 4E 54 | CLOSING PARENT|
00001550: 48 45 53 49 53 20 4F 52 20 45 4E 44 2D 4F 46 2D |HESIS OR END-OF-|
00001560: 20 20 20 20 20 20 20 20 20 20 4C 49 4E 45 20 53 | LINE S|
00001570: 4F 20 57 45 20 52 45 54 55 52 4E 20 41 46 54 45 |O WE RETURN AFTE|
00001580: 52 20 45 41 43 48 00 99 1D 14 05 8F 20 20 45 56 |R EACH...... EV|
00001590: 41 4C 55 41 54 49 4F 4E 2E 00 9F 1D 1E 05 8F 00 |ALUATION........|
000015A0: E7 1D 28 05 8F 20 20 43 48 45 43 4B 20 54 48 45 |..(.. CHECK THE|
000015B0: 20 50 52 49 4F 52 49 54 59 20 4F 46 20 54 48 45 | PRIORITY OF THE|
000015C0: 20 54 4F 50 20 20 20 20 20 20 20 20 20 20 20 4F | TOP O|
000015D0: 46 20 54 48 45 20 53 54 41 43 4B 20 41 47 41 49 |F THE STACK AGAI|
000015E0: 4E 53 54 20 54 48 45 00 31 1E 32 05 8F 20 20 50 |NST THE.1.2.. P|
000015F0: 52 45 53 45 4E 54 20 4F 50 45 52 41 54 4F 52 2E |RESENT OPERATOR.|
00001600: 20 49 46 20 4E 45 43 45 53 53 41 52 59 20 20 20 | IF NECESSARY |
00001610: 20 20 20 20 20 20 20 50 55 53 48 20 54 48 45 20 | PUSH THE |
00001620: 50 52 45 53 45 4E 54 20 4F 50 45 52 41 54 4F 52 |PRESENT OPERATOR|
00001630: 2E 00 37 1E 3C 05 8F 00 79 1E 46 05 8B 20 B5 28 |..7.<...y.F.. .(|
00001640: 4F 50 28 50 4F 29 AD 32 29 20 B3 20 B5 28 46 4F |OP(PO).2) . .(FO|
00001650: 55 4E 44 AD 32 29 20 20 20 20 20 20 20 A7 20 50 |UND.2) . P|
00001660: 4F B2 50 4F AA 31 20 3A 20 4F 50 28 50 4F 29 B2 |O.PO.1 : OP(PO).|
00001670: 46 4F 55 4E 44 20 3A 20 8E 00 7F 1E 50 05 8F 00 |FOUND : ....P...|
00001680: C2 1E 5A 05 8F 20 20 57 45 20 4D 55 53 54 20 45 |..Z.. WE MUST E|
00001690: 56 41 4C 55 41 54 45 20 54 48 45 20 54 4F 50 20 |VALUATE THE TOP |
000016A0: 54 57 4F 20 20 20 20 20 20 20 20 20 20 20 20 49 |TWO I|
000016B0: 54 45 4D 53 20 4F 4E 20 54 48 45 20 53 54 41 43 |TEMS ON THE STAC|
000016C0: 4B 2E 00 C8 1E 64 05 8F 00 13 1F 6E 05 8B 20 4F |K....d.....n.. O|
000016D0: 50 28 50 4F 29 20 B2 20 32 20 A7 20 20 20 20 20 |P(PO) . 2 . |
000016E0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000016F0: 20 20 20 20 20 20 4E 55 4D 28 50 4E AB 31 29 B2 | NUM(PN.1).|
00001700: 4E 55 4D 28 50 4E AB 31 29 20 AA 20 4E 55 4D 28 |NUM(PN.1) . NUM(|
00001710: 50 4E 29 00 5E 1F 78 05 8B 20 4F 50 28 50 4F 29 |PN).^.x.. OP(PO)|
00001720: 20 B2 20 33 20 A7 20 20 20 20 20 20 20 20 20 20 | . 3 . |
00001730: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001740: 20 4E 55 4D 28 50 4E AB 31 29 B2 4E 55 4D 28 50 | NUM(PN.1).NUM(P|
00001750: 4E AB 31 29 20 AB 20 4E 55 4D 28 50 4E 29 00 A9 |N.1) . NUM(PN)..|
00001760: 1F 82 05 8B 20 4F 50 28 50 4F 29 20 B2 20 34 20 |.... OP(PO) . 4 |
00001770: A7 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 |. |
00001780: 20 20 20 20 20 20 20 20 20 20 20 20 4E 55 4D 28 | NUM(|
00001790: 50 4E AB 31 29 B2 4E 55 4D 28 50 4E AB 31 29 20 |PN.1).NUM(PN.1) |
000017A0: AC 20 4E 55 4D 28 50 4E 29 00 F4 1F 8C 05 8B 20 |. NUM(PN)...... |
000017B0: 4F 50 28 50 4F 29 20 B2 20 35 20 A7 20 20 20 20 |OP(PO) . 5 . |
000017C0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
000017D0: 20 20 20 20 20 20 20 4E 55 4D 28 50 4E AB 31 29 | NUM(PN.1)|
000017E0: B2 4E 55 4D 28 50 4E AB 31 29 20 AD 20 4E 55 4D |.NUM(PN.1) . NUM|
000017F0: 28 50 4E 29 00 3F 20 96 05 8B 20 4F 50 28 50 4F |(PN).? ... OP(PO|
00001800: 29 20 B2 20 36 20 A7 20 20 20 20 20 20 20 20 20 |) . 6 . |
00001810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 | |
00001820: 20 20 4E 55 4D 28 50 4E AB 31 29 B2 4E 55 4D 28 | NUM(PN.1).NUM(|
00001830: 50 4E AB 31 29 20 AE 20 4E 55 4D 28 50 4E 29 00 |PN.1) . NUM(PN).|
00001840: 45 20 A0 05 8F 00 8F 20 AA 05 8F 20 20 4E 4F 57 |E ..... ... NOW|
00001850: 20 50 4F 50 20 54 48 45 20 4F 50 45 52 41 54 4F | POP THE OPERATO|
00001860: 52 20 53 54 41 43 4B 2C 20 20 20 20 20 20 20 20 |R STACK, |
00001870: 20 20 20 20 20 53 49 4E 43 45 20 57 45 20 55 53 | SINCE WE US|
00001880: 45 44 20 54 48 45 20 4F 50 45 52 41 54 4F 52 00 |ED THE OPERATOR.|
00001890: DC 20 B4 05 8F 20 20 41 4E 44 20 50 4F 50 20 54 |. ... AND POP T|
000018A0: 48 45 20 4F 50 45 52 41 4E 44 20 53 54 41 43 4B |HE OPERAND STACK|
000018B0: 20 42 59 20 20 20 20 20 20 20 20 20 20 20 20 4F | BY O|
000018C0: 4E 45 20 53 49 4E 43 45 20 57 45 20 55 53 45 44 |NE SINCE WE USED|
000018D0: 20 54 57 4F 20 4E 55 4D 42 45 52 53 00 1D 21 BE | TWO NUMBERS..!.|
000018E0: 05 8F 20 20 42 55 54 20 50 55 54 20 54 48 45 20 |.. BUT PUT THE |
000018F0: 52 45 53 55 4C 54 20 42 41 43 4B 20 4F 4E 20 54 |RESULT BACK ON T|
00001900: 48 45 20 20 20 20 20 20 20 20 20 20 54 4F 50 20 |HE TOP |
00001910: 4F 46 20 54 48 45 20 53 54 41 43 4B 2E 00 23 21 |OF THE STACK..#!|
00001920: C8 05 8F 00 39 21 D2 05 50 4F B2 50 4F AB 31 20 |....9!..PO.PO.1 |
00001930: 3A 20 50 4E B2 50 4E AB 31 00 3F 21 DC 05 8F 00 |: PN.PN.1.?!....|
00001940: 8A 21 E6 05 8F 20 20 49 46 20 57 45 20 44 4F 4E |.!... IF WE DON|
00001950: 27 54 20 48 41 56 45 20 54 48 45 20 53 50 45 43 |'T HAVE THE SPEC|
00001960: 49 41 4C 20 20 20 20 20 20 20 20 20 20 20 20 4F |IAL O|
00001970: 50 45 52 41 54 4F 52 20 54 48 45 4E 20 47 4F 20 |PERATOR THEN GO |
00001980: 54 4F 20 54 48 45 20 54 4F 50 00 D4 21 F0 05 8F |TO THE TOP..!...|
00001990: 20 20 4F 46 20 54 48 45 20 52 4F 55 54 49 4E 45 | OF THE ROUTINE|
000019A0: 20 41 4E 44 20 54 52 59 20 41 47 41 49 4E 20 20 | AND TRY AGAIN |
000019B0: 20 20 20 20 20 20 20 20 20 20 54 4F 20 45 4E 53 | TO ENS|
000019C0: 55 52 45 20 54 48 41 54 20 54 48 45 20 50 52 45 |URE THAT THE PRE|
000019D0: 53 45 4E 54 00 1C 22 FA 05 8F 20 20 4F 50 45 52 |SENT.."... OPER|
000019E0: 41 54 4F 52 20 47 45 54 53 20 50 55 53 48 45 44 |ATOR GETS PUSHED|
000019F0: 20 4F 4E 20 54 48 45 20 20 20 20 20 20 20 20 20 | ON THE |
00001A00: 20 20 20 20 53 54 41 43 4B 20 49 4E 20 54 48 45 | STACK IN THE|
00001A10: 20 52 49 47 48 54 20 53 50 4F 54 2E 00 35 22 04 | RIGHT SPOT..5".|
00001A20: 06 8F 20 20 4F 54 48 45 52 57 49 53 45 20 52 45 |.. OTHERWISE RE|
00001A30: 54 55 52 4E 2E 00 3B 22 0E 06 8F 00 51 22 18 06 |TURN..;"....Q"..|
00001A40: 8B 20 46 4F 55 4E 44 B3 B1 30 20 89 20 31 33 35 |. FOUND..0 . 135|
00001A50: 30 00 57 22 22 06 8E 00 00 00 |0.W""..... |
..K.D.. FIRST, WE MUST ALLOCATE ROOM
FOR THE TWO STACKS THAT WE...N.
. NEED. THE OPERAND STACK (NUM)
WILL BE TWICE AS LARGE AS THE...X..
OPERATOR STACK (OP). THE TWO
POINTERS TO TOP-OF-STACK (PN.1.... TO T
HE OPERAND STACK AND PO TO THE
OPERATOR STACK) MUST ALSO.~.... BE INIT
IALIZED, AND WE MUST PUT A START
-OF-LINE FLAG INTO THE.K.... THE TOP OF
THE OPERATOR STACK. THE STRING
OF LEGAL OPERATORS... .. MUST ALSO BE
INITIALIZED. THE POSITION IN T
HE STRING OF THE.Y.... OPERATOR MEASURE
S THE PRIORITY OF THAT OPERATOR
.._.....V.... NUM(200),OP(100)...H.OP$."
(+-*/^)"...R.PN.0 : OP(1)..1 : PO.1.....
....... READ IN THE EXPRESSION TO PARSE
AND ECHO IT TO THE SCREEN......
....... "ENTER THE EXPRESSION";IN$.(....
IN$"=";.......X.... THE PARSER BEGINS
AT 290. FIRST REMOVE ALL LEADING
BLANKS..~.".....,.. H(IN$,1)." " .
IN$.I(IN$,C(IN$).1):. 300.B.6
.....@.. NOW IF THERE IS NO MORE STRING
, GO TO THE FINAL PROCESSING....
J...'.T.. IN$."" . 1150.-.^...X.H.. INI
TIALIZE THE OPERATOR TOKEN TO
0 AND GET THE FIRST CHAR...R.. OF THE R
EMAINING LINE INTO A TEMPORAR
Y VARIABLE..A.|.......FOUND.0 : T$.H(IN$
,1)......./.... NOW CHECK THE CHARACTER
AGAINST EACH OF THE POSSIBLE OP
ERATORS.{.... IF WE FIND ONE SET THE VA
LUE OF THE TOKEN TO THE LOCATION
IN...... THE STRING, AND FORCE THE LOO
P TO TERMINATE EARLY..D.....Y.B
.. I . 1 . C(OP$). .L.. T$.J(OP$,I,1) .
FOUND.I:
I.C(OP$).&.V...,.....X.... IF WE'VE FOU
ND AN OPERATOR THEN TAKE IT OFF
THE FRONT OF THE...... STRING AND SKIP
THE REST OF THE PARSING.........
.... FOUND..0 .
IN$.I(IN$,C(IN$).1):. 820.......L.... W
E DON'T HAVE A LEGAL OPERATOR S
O ASSUME AN OPERAND. WE MUST...&.. FIND
THE FIRST NON-DIGIT IN THE REST
OF THE INPUT STRING AND...0.. MAKE A N
OTE OF THE LOCATION SO THAT WE
CAN REMOVE THE TOKEN.1.:.. FROM THE STR
ING. INITIALLY WE ASSUME THE R
EST OF THE STRING.V.D.. IS THE NUMBER,
THEN SEARCH FOR AN EARLIER NON-
DIGIT..|.N.....X.LAST.C(IN$).1...B.. I .
1 . C(IN$)...L.....V.. USE A TEMPORARY
VARIABLE FOR THE NEXT CHARAC
TER TO SAVE.@.... TIME. FORCE THE LOOP
TO STOP EARLY IF WE FIND A NO
N-DIGIT..F.....X...T$.J(IN$,I,1)...... T
$.."." . (T$."0" . T$."9")
. LAST.I:I.C(IN$).................
. PUT THE VALUE OF THE NUMBER IN
T0KEN (TO IS A RESERVED WORD).9.F..
AND REMOVE THE CHARACTERS FROM
THE INPUT STRING..?.P.....Z.T0KEN . E(H(
IN$,LAST.1)) : IN$ . I(IN$,C(IN
$).LAST.1).......R.... THIS ENDS THE PA
RSER. ON EXIT, FOUND=0 IF THE T
OKEN IS AN...... OPERAND OR IF THE TOKE
N IS AN OPERATOR FOUND=2*PRIOR
ITY..^.... IF WE HAVE AN OPERAND THEN T
HE VALUE IS IN T0KEN..D........
.. NOW BEGIN THE EXPRESSION PRO-
CESSING. IF THE TOKEN IS AN... .. O
PERAND THEN PUSH IT ONTO THE O
PERAND STACK AND GET ANOTHER.2.*.. TOKE
N
..{.4.. FOUND.0 .
PN.PN.1 : NUM(PN).T0KEN : . 300...>.
..N.H.. IF THE TOKEN IS AN OPENING
PARENTHESIS THEN PUSH IT ONTO..
.R.. THE OPERATOR STACK AND GET
ANOTHER TOKEN....\...[.F.. T$."("
. PO.PO.1
: OP(PO).1 : . 300.A.P.....Z.. IF THE
OPERATOR ISN'T A CLOSING PARENTH
ESIS THEN EXECUTE THE...... EVALUATE SU
BROUTINE UNTIL IT COMPLETES.
THIS WILL LEAVE THE.E.... STACK IN A CO
NSISTENT STATE AND PUSH THE OPER
ATOR ONTO THE...... STACK AT THE APPROP
RIATE SPOT. THEN GO GET THE NEX
T TOKEN........Z.... T$..")" .
. 1350: . 3
00.......'.... WE HAVE A CLOSING PARENT
HESIS SO WE USE THE FOLLOWING.
S.J.. STRATEGY. SET THE PRESENT TOKEN
TO 0 (A SPECIAL OPERATOR) SO...T.
. THAT NO OPERATOR WILL GET PUT
ONTO THE STACK. THEN KEEP...... CALL
ING THE EVALUATE ROUTINE UNTI
L AN OPENING PARENTHESIS.4.... IS FOUND
. ..@...FOUND.0
...... OP(PO)..1 .
. 1350: . 1020.......V...
. ONCE AN OPENING PARENTHESIS IS
FOUND WE REMOVE IT FROM THE...... ST
ACK AND GO GET THE NEXT TO
KEN....$...&...PO.PO.1 : . 300.,.8...V.B
.. THIS IS WHERE WE WIND UP AFTER
THE ENTIRE STRING HAS BEEN...L.. PR
OCESSED. NOW WE KEEP CALLING TH
E EVALUATE ROUTINE UNTIL...V.. WE FIND
THE START-OF-LINE TOKEN ON
THE TOP OF THE.R.`.. OPERATOR STACK. W
HEN THIS OCCURS WE KNOW TH
AT WE HAVE...J.. FINISHED, AND THE RESU
LT IS ON THE TOP OF THE OPERAND
STACK....T.....~.. OP(PO) .. .1 .
. 1350: . 11
50............ PRINT THE RESULT AND STO
P........%.... NUM(1).+.....1.....~.D..
THIS ROUTINE EVALUATES THE
STACK.IF THE PRESENT OPERATOR.G.N.. HA
S A LOWER PRIORITY THAN THE TO
P OF THE OPERATOR STACK...X.. THEN THE
TOP TWO ITEMS ON THE STACK ARE
EVALUATED, AND THE.^.... PRIORITIES AR
E RE-CHECKED. IF THE PRIORITY
OF THE PRESENT...... OPERATOR IS GREATE
R THAN THE PRIORITY OF THE TO
P OF THE...... OPERATOR STACK THEN THE
TOKEN IS PUSHED ONTO THE STACK
..:.... IF THE PRESENT TOKEN=0 THEN WE
HAVE THE SPECIAL OPERATOR......
CLOSING PARENTHESIS OR END-OF-
LINE SO WE RETURN AFTER EACH...... EV
ALUATION..........(.. CHECK THE PRIORIT
Y OF THE TOP OF THE STACK AGAI
NST THE.1.2.. PRESENT OPERATOR. IF NECE
SSARY PUSH THE PRESENT OPERATOR
..7.<...Y.F.. .(OP(PO).2) . .(FOUND.2)
. PO.PO.1 : OP(PO).FOUND : ...P...
B.Z.. WE MUST EVALUATE THE TOP TWO
ITEMS ON THE STACK..H.D.....N.. O
P(PO) . 2 . NU
M(PN.1).NUM(PN.1) . NUM(PN).^.X.. OP(PO)
. 3 . NUM(PN.
1).NUM(PN.1) . NUM(PN)...... OP(PO) . 4
. NUM(PN.1).NU
M(PN.1) . NUM(PN)...... OP(PO) . 5 .
NUM(PN.1).NUM(PN.
1) . NUM(PN).? ... OP(PO) . 6 .
NUM(PN.1).NUM(PN.1) .
NUM(PN).E .... ... NOW POP THE OPERATO
R STACK, SINCE WE USED THE O
PERATOR.. ... AND POP THE OPERAND STACK
BY ONE SINCE WE USED TWO NUM
BERS..!... BUT PUT THE RESULT BACK ON T
HE TOP OF THE STACK..#!H...9!R.
PO.PO.1 : PN.PN.1.?!.....!... IF WE DON
'T HAVE THE SPECIAL OPERATOR
THEN GO TO THE TOP.T!... OF THE ROUTINE
AND TRY AGAIN TO ENSURE THAT
THE PRESENT.."... OPERATOR GETS PUSHED
ON THE STACK IN THE RIGHT S
POT..5"... OTHERWISE RETURN..;"....Q"..
. FOUND..0 . 1350.W"".....
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL