00000000: 00 20 54 4F 20 53 45 54 55 50 2E 47 52 41 4D 4D |. TO SETUP.GRAMM|
00000010: 41 52 0D 20 4D 41 4B 45 20 22 52 54 52 41 43 45 |AR. MAKE "RTRACE|
00000020: 3F 20 22 46 41 4C 53 45 0D 20 52 41 4E 44 4F 4D |? "FALSE. RANDOM|
00000030: 49 5A 45 0D 20 48 45 4C 50 0D 45 4E 44 0D 0D 54 |IZE. HELP.END..T|
00000040: 4F 20 48 45 4C 50 0D 20 4E 44 0D 20 50 52 20 5B |O HELP. ND. PR [|
00000050: 54 48 49 53 20 49 53 20 41 20 47 45 4E 45 52 41 |THIS IS A GENERA|
00000060: 54 49 56 45 20 47 52 41 4D 4D 41 52 20 50 52 4F |TIVE GRAMMAR PRO|
00000070: 47 52 41 4D 2E 5D 0D 20 50 52 20 5B 5D 0D 20 50 |GRAM.]. PR []. P|
00000080: 52 20 5B 54 59 50 45 5D 0D 20 50 52 20 5B 50 4F |R [TYPE]. PR [PO|
00000090: 20 50 4F 53 54 43 41 52 44 5D 0D 20 50 52 20 5B | POSTCARD]. PR [|
000000A0: 50 4F 20 53 45 4E 54 5D 0D 20 50 52 20 5B 41 4E |PO SENT]. PR [AN|
000000B0: 44 20 54 52 59 20 52 55 4E 4E 49 4E 47 20 54 48 |D TRY RUNNING TH|
000000C0: 4F 53 45 20 50 52 4F 43 45 44 55 52 45 53 5D 0D |OSE PROCEDURES].|
000000D0: 20 50 52 20 5B 5D 0D 20 50 52 20 5B 54 59 50 45 | PR []. PR [TYPE|
000000E0: 20 52 54 52 41 43 45 20 54 4F 20 53 45 45 20 41 | RTRACE TO SEE A|
000000F0: 20 54 52 41 43 45 20 4F 46 20 54 48 45 5D 0D 20 | TRACE OF THE]. |
00000100: 50 52 20 5B 50 52 4F 43 45 53 53 2E 20 54 59 50 |PR [PROCESS. TYP|
00000110: 45 20 52 54 52 41 43 45 20 41 47 41 49 4E 20 54 |E RTRACE AGAIN T|
00000120: 4F 20 53 54 4F 50 5D 0D 20 50 52 20 5B 54 48 45 |O STOP]. PR [THE|
00000130: 20 54 52 41 43 49 4E 47 2E 5D 0D 45 4E 44 0D 0D | TRACING.].END..|
00000140: 54 4F 20 50 4F 53 54 43 41 52 44 0D 20 57 4F 52 |TO POSTCARD. WOR|
00000150: 4C 44 20 5B 50 4F 53 54 43 41 52 44 5D 0D 20 52 |LD [POSTCARD]. R|
00000160: 20 22 50 4F 53 54 43 41 52 44 20 5B 47 52 45 45 | "POSTCARD [GREE|
00000170: 54 49 4E 47 20 42 4F 44 59 20 43 4C 4F 53 49 4E |TING BODY CLOSIN|
00000180: 47 5D 0D 20 52 20 22 47 52 45 45 54 49 4E 47 20 |G]. R "GREETING |
00000190: 5B 2B 20 5B 44 45 41 52 20 4A 55 4E 45 2C 5D 20 |[+ [DEAR JUNE,] |
000001A0: 5B 44 45 41 52 20 46 52 45 44 2C 5D 20 5B 47 45 |[DEAR FRED,] [GE|
000001B0: 4E 54 4C 45 4D 45 4E 3A 5D 20 5B 44 45 41 52 20 |NTLEMEN:] [DEAR |
000001C0: 46 4F 4C 4B 53 2C 5D 5D 0D 20 52 20 22 42 4F 44 |FOLKS,]]. R "BOD|
000001D0: 59 20 5B 53 45 4E 54 45 4E 43 45 20 53 45 4E 54 |Y [SENTENCE SENT|
000001E0: 45 4E 43 45 20 53 45 4E 54 45 4E 43 45 5D 0D 20 |ENCE SENTENCE]. |
000001F0: 52 20 22 43 4C 4F 53 49 4E 47 20 5B 2B 20 5B 53 |R "CLOSING [+ [S|
00000200: 45 45 20 59 4F 55 20 53 4F 4F 4E 2C 20 46 52 45 |EE YOU SOON, FRE|
00000210: 44 5D 20 5B 57 49 53 48 49 4E 47 20 59 4F 55 20 |D] [WISHING YOU |
00000220: 57 45 52 45 20 48 45 52 45 2C 20 4A 4F 45 59 5D |WERE HERE, JOEY]|
00000230: 20 5B 53 49 4E 43 45 52 45 4C 59 2C 20 4C 49 4C | [SINCERELY, LIL|
00000240: 41 48 5D 20 5B 2D 2D 41 55 52 45 4C 49 41 5D 5D |AH] [--AURELIA]]|
00000250: 0D 20 52 20 22 53 45 4E 54 45 4E 43 45 20 5B 2B |. R "SENTENCE [+|
00000260: 20 5B 53 55 52 46 27 53 20 55 50 21 5D 20 5B 54 | [SURF'S UP!] [T|
00000270: 48 45 20 57 41 54 45 52 27 53 20 46 55 4E 2E 5D |HE WATER'S FUN.]|
00000280: 20 5B 49 54 20 52 41 49 4E 53 20 41 20 4C 4F 54 | [IT RAINS A LOT|
00000290: 2E 5D 20 5B 49 54 27 53 20 4C 4F 54 53 20 4F 46 |.] [IT'S LOTS OF|
000002A0: 20 46 55 4E 2E 5D 20 5B 44 4F 4E 27 54 20 46 4F | FUN.] [DON'T FO|
000002B0: 52 47 45 54 20 54 4F 20 57 41 54 45 52 20 54 48 |RGET TO WATER TH|
000002C0: 45 20 50 4C 41 4E 54 53 2E 5D 5D 0D 20 53 48 4F |E PLANTS.]]. SHO|
000002D0: 57 20 3A 57 4F 52 4C 44 0D 45 4E 44 0D 0D 54 4F |W :WORLD.END..TO|
000002E0: 20 53 45 4E 54 0D 20 57 4F 52 4C 44 20 5B 50 41 | SENT. WORLD [PA|
000002F0: 52 41 47 52 41 50 48 5D 0D 20 52 20 22 50 41 52 |RAGRAPH]. R "PAR|
00000300: 41 47 52 41 50 48 20 5B 2B 20 5B 53 45 4E 54 45 |AGRAPH [+ [SENTE|
00000310: 4E 43 45 20 2E 5D 20 5B 53 45 4E 54 45 4E 43 45 |NCE .] [SENTENCE|
00000320: 20 2E 20 50 41 52 41 47 52 41 50 48 5D 5D 0D 20 | . PARAGRAPH]]. |
00000330: 52 20 22 53 45 4E 54 45 4E 43 45 20 5B 2B 20 5B |R "SENTENCE [+ [|
00000340: 4D 4E 50 20 49 2E 56 45 52 42 5D 20 5B 4D 4E 50 |MNP I.VERB] [MNP|
00000350: 20 49 2E 56 45 52 42 20 41 44 56 45 52 42 5D 20 | I.VERB ADVERB] |
00000360: 5B 4D 4E 50 20 54 2E 56 45 52 42 20 4D 4E 50 5D |[MNP T.VERB MNP]|
00000370: 20 5B 4D 4E 50 20 54 2E 56 45 52 42 20 4D 4E 50 | [MNP T.VERB MNP|
00000380: 20 41 44 56 45 52 42 5D 5D 0D 20 52 20 22 4D 4E | ADVERB]]. R "MN|
00000390: 50 20 5B 2B 20 4E 50 20 5B 54 48 45 20 41 44 4A |P [+ NP [THE ADJ|
000003A0: 45 43 54 49 56 45 20 43 2E 4E 4F 55 4E 5D 5D 0D |ECTIVE C.NOUN]].|
000003B0: 20 52 20 22 4E 50 20 5B 2B 20 50 2E 4E 4F 55 4E | R "NP [+ P.NOUN|
000003C0: 20 5B 54 48 45 20 43 2E 4E 4F 55 4E 5D 5D 0D 20 | [THE C.NOUN]]. |
000003D0: 52 20 22 50 2E 4E 4F 55 4E 20 5B 2B 20 4C 41 55 |R "P.NOUN [+ LAU|
000003E0: 52 41 20 42 49 4C 4C 59 20 43 4C 41 52 41 20 4A |RA BILLY CLARA J|
000003F0: 4F 45 59 5D 0D 20 52 20 22 43 2E 4E 4F 55 4E 20 |OEY]. R "C.NOUN |
00000400: 5B 2B 20 48 4F 55 53 45 20 44 4F 4F 52 20 44 4F |[+ HOUSE DOOR DO|
00000410: 47 20 43 41 54 20 54 41 42 4C 45 20 49 44 45 41 |G CAT TABLE IDEA|
00000420: 5D 0D 20 52 20 22 56 45 52 42 20 5B 2B 20 54 2E |]. R "VERB [+ T.|
00000430: 56 45 52 42 20 49 2E 56 45 52 42 5D 0D 20 52 20 |VERB I.VERB]. R |
00000440: 22 54 2E 56 45 52 42 20 5B 2B 20 43 48 41 53 45 |"T.VERB [+ CHASE|
00000450: 53 20 53 45 45 53 20 5B 50 4C 41 59 53 20 57 49 |S SEES [PLAYS WI|
00000460: 54 48 5D 5D 0D 20 52 20 22 49 2E 56 45 52 42 20 |TH]]. R "I.VERB |
00000470: 5B 2B 20 53 4C 45 45 50 53 20 52 45 41 44 53 20 |[+ SLEEPS READS |
00000480: 52 55 4E 53 20 53 4C 45 45 50 53 5D 0D 20 52 20 |RUNS SLEEPS]. R |
00000490: 22 41 44 56 45 52 42 20 5B 2B 20 51 55 49 43 4B |"ADVERB [+ QUICK|
000004A0: 4C 59 20 53 4C 45 45 50 49 4C 59 20 53 4C 4F 57 |LY SLEEPILY SLOW|
000004B0: 4C 59 20 46 55 52 49 4F 55 53 4C 59 5D 0D 20 52 |LY FURIOUSLY]. R|
000004C0: 20 22 41 44 4A 45 43 54 49 56 45 20 5B 2B 20 43 | "ADJECTIVE [+ C|
000004D0: 4F 4C 4F 52 4C 45 53 53 20 42 49 47 20 52 45 44 |OLORLESS BIG RED|
000004E0: 20 59 45 4C 4C 4F 57 20 53 4D 41 4C 4C 20 47 52 | YELLOW SMALL GR|
000004F0: 45 45 4E 5D 0D 20 53 48 4F 57 20 3A 57 4F 52 4C |EEN]. SHOW :WORL|
00000500: 44 0D 45 4E 44 0D 0D 54 4F 20 53 48 4F 57 20 3A |D.END..TO SHOW :|
00000510: 53 45 0D 20 49 46 20 45 4D 50 54 59 3F 20 3A 53 |SE. IF EMPTY? :S|
00000520: 45 20 50 52 49 4E 54 20 5B 5D 20 53 54 4F 50 0D |E PRINT [] STOP.|
00000530: 20 28 20 50 52 49 4E 54 31 20 46 49 52 53 54 20 | ( PRINT1 FIRST |
00000540: 3A 53 45 20 29 0D 20 49 46 20 42 46 20 3A 53 45 |:SE ). IF BF :SE|
00000550: 20 3D 20 5B 5D 20 50 52 49 4E 54 20 5B 5D 20 53 | = [] PRINT [] S|
00000560: 54 4F 50 0D 20 49 46 20 46 49 52 53 54 20 42 46 |TOP. IF FIRST BF|
00000570: 20 3A 53 45 20 3D 20 22 2E 20 50 52 49 4E 54 31 | :SE = ". PRINT1|
00000580: 20 22 27 2E 20 27 20 53 48 4F 57 20 42 46 20 42 | "'. ' SHOW BF B|
00000590: 46 20 3A 53 45 20 53 54 4F 50 0D 20 50 52 49 4E |F :SE STOP. PRIN|
000005A0: 54 31 20 22 27 20 27 20 53 48 4F 57 20 42 46 20 |T1 "' ' SHOW BF |
000005B0: 3A 53 45 0D 45 4E 44 0D 0D 54 4F 20 52 45 50 4C |:SE.END..TO REPL|
000005C0: 41 43 45 20 3A 4F 4C 44 20 3A 4E 45 57 20 3A 4C |ACE :OLD :NEW :L|
000005D0: 49 53 54 0D 20 49 46 20 45 4D 50 54 59 3F 20 3A |IST. IF EMPTY? :|
000005E0: 4C 49 53 54 20 4F 50 20 5B 5D 0D 20 49 46 20 3A |LIST OP []. IF :|
000005F0: 4F 4C 44 20 3D 20 46 49 52 53 54 20 3A 4C 49 53 |OLD = FIRST :LIS|
00000600: 54 20 4F 50 20 53 45 20 3A 4E 45 57 20 42 46 20 |T OP SE :NEW BF |
00000610: 3A 4C 49 53 54 0D 20 4F 50 20 46 50 55 54 20 46 |:LIST. OP FPUT F|
00000620: 49 52 53 54 20 3A 4C 49 53 54 20 52 45 50 4C 41 |IRST :LIST REPLA|
00000630: 43 45 20 3A 4F 4C 44 20 3A 4E 45 57 20 42 46 20 |CE :OLD :NEW BF |
00000640: 3A 4C 49 53 54 0D 45 4E 44 0D 0D 54 4F 20 53 45 |:LIST.END..TO SE|
00000650: 4C 45 43 54 20 3A 50 41 54 54 45 52 4E 0D 20 49 |LECT :PATTERN. I|
00000660: 46 20 46 49 52 53 54 20 3A 50 41 54 54 45 52 4E |F FIRST :PATTERN|
00000670: 20 3D 20 22 2B 20 4F 50 20 50 49 43 4B 52 41 4E | = "+ OP PICKRAN|
00000680: 44 4F 4D 20 42 46 20 3A 50 41 54 54 45 52 4E 0D |DOM BF :PATTERN.|
00000690: 20 4F 50 20 3A 50 41 54 54 45 52 4E 0D 45 4E 44 | OP :PATTERN.END|
000006A0: 0D 0D 54 4F 20 50 49 43 4B 52 41 4E 44 4F 4D 20 |..TO PICKRANDOM |
000006B0: 3A 4C 49 53 54 0D 20 49 46 20 45 4D 50 54 59 3F |:LIST. IF EMPTY?|
000006C0: 20 3A 4C 49 53 54 20 53 54 4F 50 0D 20 4F 50 20 | :LIST STOP. OP |
000006D0: 49 54 45 4D 20 28 20 31 20 2B 20 52 41 4E 44 4F |ITEM ( 1 + RANDO|
000006E0: 4D 20 43 4F 55 4E 54 20 3A 4C 49 53 54 20 29 20 |M COUNT :LIST ) |
000006F0: 3A 4C 49 53 54 0D 45 4E 44 0D 0D 54 4F 20 52 20 |:LIST.END..TO R |
00000700: 3A 4D 41 54 43 48 20 3A 50 41 54 54 45 52 4E 0D |:MATCH :PATTERN.|
00000710: 20 49 46 20 3A 52 54 52 41 43 45 3F 20 53 48 4F | IF :RTRACE? SHO|
00000720: 57 20 3A 57 4F 52 4C 44 0D 20 4C 4F 43 41 4C 20 |W :WORLD. LOCAL |
00000730: 22 41 4E 53 57 45 52 0D 20 4D 41 4B 45 20 22 41 |"ANSWER. MAKE "A|
00000740: 4E 53 57 45 52 20 52 45 50 4C 41 43 45 20 3A 4D |NSWER REPLACE :M|
00000750: 41 54 43 48 20 28 20 53 45 4C 45 43 54 20 3A 50 |ATCH ( SELECT :P|
00000760: 41 54 54 45 52 4E 20 29 20 3A 57 4F 52 4C 44 0D |ATTERN ) :WORLD.|
00000770: 20 49 46 20 3A 57 4F 52 4C 44 20 3D 20 3A 41 4E | IF :WORLD = :AN|
00000780: 53 57 45 52 20 53 54 4F 50 0D 20 4D 41 4B 45 20 |SWER STOP. MAKE |
00000790: 22 57 4F 52 4C 44 20 3A 41 4E 53 57 45 52 0D 20 |"WORLD :ANSWER. |
000007A0: 52 20 3A 4D 41 54 43 48 20 3A 50 41 54 54 45 52 |R :MATCH :PATTER|
000007B0: 4E 0D 45 4E 44 0D 0D 54 4F 20 57 4F 52 4C 44 20 |N.END..TO WORLD |
000007C0: 3A 50 41 54 54 45 52 4E 0D 20 4D 41 4B 45 20 22 |:PATTERN. MAKE "|
000007D0: 57 4F 52 4C 44 20 3A 50 41 54 54 45 52 4E 0D 45 |WORLD :PATTERN.E|
000007E0: 4E 44 0D 0D 54 4F 20 52 53 48 41 50 45 0D 20 57 |ND..TO RSHAPE. W|
000007F0: 4F 52 4C 44 20 5B 52 53 48 41 50 45 5D 0D 20 52 |ORLD [RSHAPE]. R|
00000800: 20 22 52 53 48 41 50 45 20 5B 2B 20 5B 4D 4F 56 | "RSHAPE [+ [MOV|
00000810: 45 20 52 53 48 41 50 45 5D 20 5B 54 55 52 4E 20 |E RSHAPE] [TURN |
00000820: 52 53 48 41 50 45 5D 20 5B 5D 5D 0D 20 52 20 22 |RSHAPE] []]. R "|
00000830: 4D 4F 56 45 20 5B 2B 20 5B 46 44 20 31 30 5D 20 |MOVE [+ [FD 10] |
00000840: 5B 46 44 20 33 30 5D 20 5B 46 44 20 35 5D 5D 0D |[FD 30] [FD 5]].|
00000850: 20 52 20 22 54 55 52 4E 20 5B 2B 20 5B 52 54 20 | R "TURN [+ [RT |
00000860: 31 30 5D 20 5B 52 54 20 33 30 5D 20 5B 52 54 20 |10] [RT 30] [RT |
00000870: 34 35 5D 5D 0D 45 4E 44 0D 0D 54 4F 20 52 54 52 |45]].END..TO RTR|
00000880: 41 43 45 3F 0D 20 4D 41 4B 45 20 22 52 54 52 41 |ACE?. MAKE "RTRA|
00000890: 43 45 3F 20 4E 4F 54 20 3A 52 54 52 41 43 45 0D |CE? NOT :RTRACE.|
000008A0: 20 50 52 20 53 45 20 22 52 54 52 41 43 45 3F 20 | PR SE "RTRACE? |
000008B0: 3A 52 54 52 41 43 45 3F 0D 45 4E 44 0D 0D 54 4F |:RTRACE?.END..TO|
000008C0: 20 52 54 52 41 43 45 0D 20 4D 41 4B 45 20 22 52 | RTRACE. MAKE "R|
000008D0: 54 52 41 43 45 3F 20 4E 4F 54 20 3A 52 54 52 41 |TRACE? NOT :RTRA|
000008E0: 43 45 3F 0D 20 50 52 20 53 45 20 22 52 54 52 41 |CE?. PR SE "RTRA|
000008F0: 43 45 20 3A 52 54 52 41 43 45 3F 0D 45 4E 44 0D |CE :RTRACE?.END.|
00000900: 0D 4D 41 4B 45 20 22 53 54 41 52 54 55 50 20 5B |.MAKE "STARTUP [|
00000910: 53 45 54 55 50 2E 47 52 41 4D 4D 41 52 5D 0D 77 |SETUP.GRAMMAR].w|
. TO SETUP.GRAMMAR. MAKE "RTRACE? "FALSE
. RANDOMIZE. HELP.END..TO HELP. ND. PR [
THIS IS A GENERATIVE GRAMMAR PROGRAM.].
PR []. PR [TYPE]. PR [PO POSTCARD]. PR [
PO SENT]. PR [AND TRY RUNNING THOSE PROC
EDURES]. PR []. PR [TYPE RTRACE TO SEE A
TRACE OF THE]. PR [PROCESS. TYPE RTRACE
AGAIN TO STOP]. PR [THE TRACING.].END..
TO POSTCARD. WORLD [POSTCARD]. R "POSTCA
RD [GREETING BODY CLOSING]. R "GREETING
[+ [DEAR JUNE,] [DEAR FRED,] [GENTLEMEN:
] [DEAR FOLKS,]]. R "BODY [SENTENCE SENT
ENCE SENTENCE]. R "CLOSING [+ [SEE YOU S
OON, FRED] [WISHING YOU WERE HERE, JOEY]
[SINCERELY, LILAH] [--AURELIA]]. R "SEN
TENCE [+ [SURF'S UP!] [THE WATER'S FUN.]
[IT RAINS A LOT.] [IT'S LOTS OF FUN.] [
DON'T FORGET TO WATER THE PLANTS.]]. SHO
W :WORLD.END..TO SENT. WORLD [PARAGRAPH]
. R "PARAGRAPH [+ [SENTENCE .] [SENTENCE
. PARAGRAPH]]. R "SENTENCE [+ [MNP I.VE
RB] [MNP I.VERB ADVERB] [MNP T.VERB MNP]
[MNP T.VERB MNP ADVERB]]. R "MNP [+ NP
[THE ADJECTIVE C.NOUN]]. R "NP [+ P.NOUN
[THE C.NOUN]]. R "P.NOUN [+ LAURA BILLY
CLARA JOEY]. R "C.NOUN [+ HOUSE DOOR DO
G CAT TABLE IDEA]. R "VERB [+ T.VERB I.V
ERB]. R "T.VERB [+ CHASES SEES [PLAYS WI
TH]]. R "I.VERB [+ SLEEPS READS RUNS SLE
EPS]. R "ADVERB [+ QUICKLY SLEEPILY SLOW
LY FURIOUSLY]. R "ADJECTIVE [+ COLORLESS
BIG RED YELLOW SMALL GREEN]. SHOW :WORL
D.END..TO SHOW :SE. IF EMPTY? :SE PRINT
[] STOP. ( PRINT1 FIRST :SE ). IF BF :SE
= [] PRINT [] STOP. IF FIRST BF :SE = "
. PRINT1 "'. ' SHOW BF BF :SE STOP. PRIN
T1 "' ' SHOW BF :SE.END..TO REPLACE :OLD
:NEW :LIST. IF EMPTY? :LIST OP []. IF :
OLD = FIRST :LIST OP SE :NEW BF :LIST. O
P FPUT FIRST :LIST REPLACE :OLD :NEW BF
:LIST.END..TO SELECT :PATTERN. IF FIRST
:PATTERN = "+ OP PICKRANDOM BF :PATTERN.
OP :PATTERN.END..TO PICKRANDOM :LIST. I
F EMPTY? :LIST STOP. OP ITEM ( 1 + RANDO
M COUNT :LIST ) :LIST.END..TO R :MATCH :
PATTERN. IF :RTRACE? SHOW :WORLD. LOCAL
"ANSWER. MAKE "ANSWER REPLACE :MATCH ( S
ELECT :PATTERN ) :WORLD. IF :WORLD = :AN
SWER STOP. MAKE "WORLD :ANSWER. R :MATCH
:PATTERN.END..TO WORLD :PATTERN. MAKE "
WORLD :PATTERN.END..TO RSHAPE. WORLD [RS
HAPE]. R "RSHAPE [+ [MOVE RSHAPE] [TURN
RSHAPE] []]. R "MOVE [+ [FD 10] [FD 30]
[FD 5]]. R "TURN [+ [RT 10] [RT 30] [RT
45]].END..TO RTRACE?. MAKE "RTRACE? NOT
:RTRACE. PR SE "RTRACE? :RTRACE?.END..TO
RTRACE. MAKE "RTRACE? NOT :RTRACE?. PR
SE "RTRACE :RTRACE?.END..MAKE "STARTUP [
SETUP.GRAMMAR].W
×
C64 Image
> CLICK IMAGE PREVIEW FOR FULL MODAL