"PARSER for ANTHILL (C)1986 Infocom Inc. All rights reserved." ;> ; ; > > > > > > > ; > "INBUF - Input buffer for READ" > "Parse-cont variable" > ;"start of sentence" > > > > > "Orphan flag" > > > > > "Parser variables and temporaries" ; ; ; "Byte offset to # of entries in LEXV" "Word offset to start of LEXV entries" "Number of words per LEXV entry" "Offset to parts of speech byte" ,PLUS-MODE> 6) (T 4)>> "Offset to first part of speech" ,PLUS-MODE> 7) (T 5)>> "First part of speech bit mask in PSOFF byte" > > > > ; > > ;> > ; ;> > > > > > > > <> <> <>>> " Grovel down the input finding the verb, prepositions, and noun clauses. If the input is or , fall out immediately setting PRSA to ,V?WALK and PRSO to . Otherwise, perform all required orphaning, syntax checking, and noun clause lookup." ) (OF-FLAG <>) LEN (DIR <>) (NW 0) (LW 0) (CNT -1) OWINNER OMERGED (TEMP 0)) > ,P-ITBLLEN> ) (T >)> )>> > > ;> >)> ;"CLEAR P-ADJW & P-NAMW IN THIS COND" > ; ,VEHBIT>> >)> >)> > > )> ; <==? ,PLAYER ,WINNER>> )> > >) (,P-CONT > >) (> <==? ,PLAYER ,WINNER>> )> ; > )>) (T > ; > ,VEHBIT>> >)> > > )> ; > ) ( ) (T )> )> % ,PLUS-MODE> ' ">>) (T '">)> ; >)> > > > ;"Is quote first input token?" > ;"If so, ignore it." >)> > ;"Is THEN first input word?" > ;"If so, ignore it." >)> <==? ,W?GO > ;"Is GO first input word?" >> ;" followed by verb?"> > ;"If so, ignore it." >)> ) ( ,W?OOPS> > ) ( >> 6>> 7>> <+ <* ,P-LEXELEN>3>> > > ) (T > )>) (T >)> ,W?AGAIN ,W?G> > ) ( > ,W?PERIOD ,W?COMMA ,W?THEN> > ,W?AND>> >> 2>>) (T )>) (T > 1>>)> 0> ) (T >)> ;> ) (T >)>>) (T > > > > > ;> > 0> > ) (>> ) (> ;>> ) (T >>)> > ; ) ( > )> > ) ( >) (T )>)> >> ) (> ,ACT?WALK ,ACT?GO> > > ; > > >>> ,W?THEN>)> > > )>) (> ; >> ; )> 2>>>> >>) (> > >> ; "1 IN RETROFIX #34" <==? .NW ,W?OF> > > >> ; )> ) (> >> )>) (<==? ,P-NCN 2> ) (T > > > > )>)>) ;(<==? .WRD ,W?CLOSELY> ) ;( > ) ( ; "RETROFIX #34" > ) (T >)>) () ( > ) (T )>) (T )> >>)> > > )> > > ) ; (T )> 0> > )> > T)>> > > "Check whether word pointed at by PTR is the correct part of speech. The second argument is the part of speech (,PS?). The 3rd argument (,P1?), if given, causes the value for that part of speech to be returned." > .BIT> ) (T > > >)> )>)>> "Scan through a noun phrase, leaving a pointer to its starting location:" ) (FIRST?? T) NW (LW 0) LEN) ;#DECL ((PTR VAL OFF NUM) FIX (WRD NW) (ANDFLG FIRST??) ) 2>> ,W?RIGHT ,W?LEFT> > ,W?END>> ;"kludge for 'right end' etc." >) (> > .WRD> > > > > ,W?LEFT ,W?RIGHT> ;"don't look if L/R was last!" > ,W?END>>> > .WRD>) (ELSE )> >>)>) (T >)> > )> > >> ,W?THE ,W?A ,W?AN> 4>> > >)> > 0> >> )> >> ) (> ;>> ) (T >>)> ; ,ACT?MAKE ,ACT?TAKE>> )> > ) ( ) ( ; > > >)>) ( >> > >> >) ;"3/16/83: This clause used to be later." ( 0> ;"10/26/84: next stmt changed" >> > ,W?THEN> >) ( >> T) ( > >) ( > >> 2>>> ) (T >)>) ;"Next clause replaced by following one to enable OLD WOMAN, HELLO" ;( 0>>> >>) ( >) ( 0>> > ,W?THEN> >) ( T) (T )>) (T )> > >>> ,PLAYER ,NOT-HERE-OBJECT> > ) ( > ) (T )>> )) ) (T )> > > > ) (> >) (T > )> > > ; > ; > > ; )> ; > ; >> .P>>)> ; >) (T )> > ; )> )>> > ) (T )>> ) (I <>) "AUX" V OA OO OI) % ') (T ' 1>>>)> ) (T )>)> )> )> > ) (> >) (T ) (T )> )>)> > )> )> )>) (T ) (T )> )>)> > )> )> )>) (T ) (T )> )>)> > )> )> )>) (T ) (T )> )>)> )>) ;"(<==? .O ,THEM>) (<==? .O ,HER> ) (<==? .O ,HIM> )"> )>) ;"(<==? .I ,THEM>) (<==? .I ,HER> ) (<==? .I ,HIM> )">)> > > > > >)>)> >>)> ,P?ACTION> ,M-BEG>>)> >>)> .I > > ,P?CONTFCN>> >)>)> .I> >>)> .O > > ,P?CONTFCN>> >)>)> .O >> >> )>)> >>)> > > ; ,P?ACTION> ,M-END>> ,M-END>>)>)> .V> ) ( ) ( ) ; ( > ) (T )>> ; ;>> ) ( ) ( > ) ( > ) (T )> ) (T )>> > ) (T )>> > CR> ) (T )>> > > > >>> "For AGAIN purposes, put contents of one LEXV table into another:" > > > 2>> > 3>> > > )>>> "Put contents of one INBUF into another:" ) (T >)>>> "Put the word in the positions specified from P-INBUF to the end of OOPS-INBUF, leaving the appropriate pointers in AGAIN-LEXV:" > ) (T >> >>>)> > >> > )>> .LEN>> ;"new number routine--from Suspect for handling phone numbers" ) (EXC <>) (NOHYP? <>)) > 2>> )> > 3>> > 0> ) (T > >> )> )> ;"Char :" )> ) (<==? .CHR 45> ;"Char -" > )> ) ( ) ( > <- .CHR 48>>>) (T )> >)>> ) (.EXC ) (.TIM ) ( T) ( ) ( T) (T >)> >>) (T )> ,W?INTNUM> ;"old numbers routine--doesn't handle phone numbers." ;) (DOLLAR <>)) > 2>> > 3>> ;> > 0> ) (T > > ) ( ) ( ) (> >> ) (T <- .CHR %>>>)> >)>> ) (.TIM >)" ( ) ;"( T) ( ) ( T) (T >)"> >>)> > ,W?MONEY ; ;) (T > ,W?INTNUM ; ;)>> ; ;> > ) WRD) > 0>> ,PS?VERB ,P1?VERB> > > ) ( > > > )> >>> >>> ) ( ) ( 1> >> >> > > >)> )>) (T > ;>)> >) (T )>) ( 1> >> >> > > >)>)> > > ) (T )>) (,P-ACLAUSE > > > ) (T > > >)> > > ) (T > )>) ( ,PS?ADJECTIVE> ;"same as WT?" >> ) ( ) ( ,PS?OBJECT> .END>> ) (T )> )> > > )>>)>)> > > > ; 0>> > > ,P-ITBLLEN> ) (T >)>> T> )) >) (ELSE )> > ) (ELSE )> 0>> > > > ;> > % ,PLUS-MODE> ') (T ' >)> 0>> > > > ; ,PLUS-MODE> '>) (T ' > >)> 0>> > > > "Print undefined word in input. PTR points to the unknown word in P-LEXV" )> ) (ELSE > >)>>> >> > > >> 2> 3>> > > "]" CR>> " Perform syntax matching operations, using P-ITBL as the source of the verb and adjectives for this input. Returns false if no syntax matches, and does it's own orphaning. If return is true, the syntax is saved in P-SYNTAX." ) (DRIVE2 <>) PREP VERB) ;#DECL ((DRIVE1 DRIVE2) > (SYN) (LEN NUM VERB PREP) FIX (OBJ) ) > )> >> > > ,P-SONUMS>> T) ;"Added 4/27/83" (> >> <==? .PREP >>> ) (<==? > <==? ,P-NCN 1>> ) (<==? > )>)> ) (T )>) (T >)>> >>> ) ( >>> ) ( ) (T ) (T )> ) ( ,ACTORBIT>> ,ACTORBIT>>> ) (T )> ) (T )> )> > ) (T )>> ) (T > )> )>> > ;"? ,P-OTBL?" ) (> >) (T > )>> )> > > > ) (T >)>> )> > )> > ) (.D2 > )>> .THE?>> ) WRD (FIRST?? T) (PN <>)) ) (T >) (T )> > >> >> >>> )> ) ( ) ( > > >> ) ( ) ( ) (T .CP> )> ) ( > ) ( ;"VISIBLE check above" ;> ) ( ;> ) ( ;> ) (T >)> >)>)> >>> "Check for words to be capitalized here" > ) (T )>> >) (T > 32>> 1> <+ 1>>)>> > > )> > ) (<==? .WRD ,W?THROUGH> ) (T )> 0>> <==? ,W?DOWN .WRD>> )> 0>> <==? ,W?OUT .WRD>> ;"Will it ever work? --SWG" )> )>> "pointers used by CLAUSE-COPY (source/destination beginning/end pointers):" > ) "AUX" OCL BEG END BB EE OBEG CNT B E) > > > > > > )> >> > > )> > >>) (ELSE >> )> )>) (ELSE >)> >> .OBEG>>>> > T> >> )> >> )> 2>>> ,P-LEXELEN> 2>>>> ) "AUX" OCL PTR) > > > > ) (ELSE > .WRD> )>> 2>> ) (<==? .PREP> >>)>>> ) >> )> > 1> > > ) (ELSE )> .OBJ)>) (T )>> >) > 0>> > ,P-PRSO> > > >>)> > 0>> > ,P-PRSI> > >> 1> >) (T >)>)>)> > > ) (> ,P-BUTS>) (T .OBJ> >)> >> .NTBL> > > > > % ,PLUS-MODE>) (T '(> >))> > > > > > > ;> > ) LEN WV WRD NW (WAS-ALL? <>) ONEOBJ) ;"Next SETG 6/21/84 for WHICH retrofix" > )> > >> )> ) (T > ) (T >)> >)>) ( > > ) ( ) ( >)>) (T > > >)>) ( >> ;"Next SETG 6/21/84 for WHICH retrofix" > > T) () () (<==? .WRD ,W?OF> )>) % ,PLUS-MODE> '( > )) (T '(> > ;"DA" ))> ( )>)> > > )>>> ) ( ) ( ) ( ) ( ) ( ) (T )>> ) (OLEN 0) OBJ ADJ X) > ;)> )> ,PLUS-MODE> ',P-ADJ) (T ',P-ADJN)>> ,P-ADJ> ,PLUS-MODE> ',P-ADJ) (T ',P-ADJN)> ,PS?OBJECT> ,PLUS-MODE> ',P-ADJ) (T ',P-ADJN)>> >) ( ,PLUS-MODE> ',P-ADJ) (T ',P-ADJN)> ,PS?DIRECTION ,P1?DIRECTION>> > )>)> > > )> ;"[1]" )> > > )> )> )> ) (T )> )> .TLEN>> ;)> ) ( >> > >> "?]" CR>)> ) ( >>> .LEN>> ) (T )> >> ;.TBL>>> )> > % ,PLUS-MODE> '>) (T '> >>)> ) (>> ) ( ,P-NC1) (T ,P-NC2)>> <>> ) (.VRB )> ;"[2]" > > )>) ( .GCHECK> ; "RETROFIX #33" > > % ,PLUS-MODE> ' >>) (T ' > >>)> ) (T )>)> > > ) ( ;)> )> >> ; .X> )> > > >> )) )> ;> ) (T )>> > > ; "Needed only for ZIL" ; "This MOBY-FIND works in ZIP only!" ; > >> >)> )>> > >)> .LEN> "This MOBY-FIND works in both ZIL and ZIP." >> ;"ZIP case" > >> >)> )>> > >)> > > .LEN) (T ;"ZIL case" > ) (T >)>> > 0> )> > 0> )> > 1> >)> > > > .LEN)>> ) ( ) (<==? .TBL ,P-PRSO> >) (T >)> > > > )> ) ( )> > 1> )>>> > > > ;)> > )> )> )>>)> > > >>>>) (>>>>) ( ; ;) (T >)> >> 5>> >> > > )> > > )>>)> ;> 4> 1>> ;)> >> 1>>> 5>> > > ) ( )>>)> .LEN> > )>)>)>> > ) (T ) ( ) (T )>)>> ) (T >)> > )> > > )> > ;"Z0 deleted this" > ; ; "ADDED 3/26/85" ,P-MOBY-FLAG ; "Needed only for ZIL" >>> ; >> ,P-SRCALL) ( ,P-SRCALL) ;"Z0 deleted this" (T ,P-SRCTOP)>>)> >) (T )>>)>> ) (>> 2> 1>>>>> ) (>> 1>>>>> ) (> >> )> > > .OBJ> >> > >>> ) > >> > 0> )> >> >> ) (T )>) (<==? .OBJ ,HER> >> ) (T )>) (<==? .OBJ ,HIM> >> ) (T )>) (<==? .OBJ ,THEM> >> ) (T )>)> > >> ) ( ,BUCKET-PEG> ) ;"you can't take from bucket on peg" (> >) ( <==? > T>> >) ( > ;"else PUT WATER IN BUCKET says YOU'RE NOT HOLDING..." ) (T )> > > ) ( ) (T )> ) ( <==? ,WINNER ,PLAYER>> )> )>)>>) (T)>> ) TMP) 1> ,SMANY>>> ) ( 1> ,SMANY>>> )> ; )> ; > ) ( >) (T >)> ) (T )>> )> > ) (ELSE >)> > >) ( )>>> ; )> > ) (<==? .ITM > ) (T )>) (T )>>> > ) (T )>) ( )>>> ; > .ITM> ) ( )>>> ) (OGWIM <>)) ) ( > ) ( > ) (T > > )>)> 0> )>)> .LIT> ; >>> ) "AUX" L CNT RND MSG RFROB) > > > > >> > ) (T >>)> > > > )> .MSG> > > > > 2>>> >> > > > > )> .MSG)>> > ) ( ) (T )> ) (T )>> )) ) (T )> > > ) (T )>> ) ( > ) (T )>> > ) (T )>> > > ) ( > ) (T )>> ; ) (PLACE <>)) ) (> ) (T )> ) (T )>> ; ) (T )> ) ( ) (T )> ) (T )>> > ) ( >> ) (T >)>> > > ) (T )>> > > > > ) (T )>> )) > ) ( ) (T >)> >>> > > )>) (T )>)>) (T )>)> > )> > > )> )> ) (T )> ) ;( ) ( ) (T ,NOT-HERE-OBJECT)>> ; ) (T )> > )> > )) ,PLUS-MODE> ',P-XADJ) (T ',P-XADJN)>>)> )>) (.PRSO? <>>) (T <>>)>> ;"MOVE-ALL ,FOO removes obj. MOVE-ALL ,FOO ,HERE moves obj to here." ) "AUX" OBJ NXT) ;"doesn't move fuse from cannon" > > > ) (T )>)> ) (T )>>> ;> > ) (T )>>> ;> )> > > > ;"modify if necessary for games with other M-..." > % ,PLUS-MODE> '>) (T '>)>)>> ;)) ) (.THE ) ( ) (T )>> ; ) ( ) ( ) ;(> ) ( ) ( ) (T >)>> > )) ) (T )> > > > ; > ; )) )> ) (T )>> ; ; ; )) > > ; > ;> ; )> )>>