"PARSER file for NEW PARSER Copyright (C) 1988 Infocom, Inc. All rights reserved." > ; > >)> ; >> > .X) (T 2>> > )>>> ) (OFFS )) > 0> ) (T > >)>>> 2> *204*>> >) (> )>>) (T >)> >> <0? >> >>> T)>>> >> .EXPR1)>) ( .EXPR2)>> > >> >> ,ORPHAN-NP2 <* 2 <+ 1 ,NOUN-PHRASE-MIN-LENGTH>>> ) (>> >> ) (>> >> )> >> >>> >> > ) (T ;>> >> )>) (T )> ,ORPHAN-NP> <>) (CLASS: <>) (OTHER:ANY <>) (OTHER2:ANY <>) "AUX" RP) ;"Died in parser itself--incomprehensible sentence") (>> > ,PARSER-ERROR-NOUND>> ,PARSER-ERROR-NOUND ;,PARSER-ERROR-TMNOUN>>>>> >)> >)>)>) (T )>)> <>> > > > >> > "current input" > "previous for OOPS & G" > "previous for orphan" > "more cmds after G" > > > > > "# of valid entries in LEXV (byte)" "First LEXV entry (word)" "Words/LEXV entry" <> <> <> <>>> "word pointer to sentence start in P-LEXV" "number of unparsed tokens in P-LEXV" "byte pointer to first free byte in G-INBUF" "word pointer to unknown token in P-LEXV" "word pointer to sentence start in O-LEXV" > > > >> > ;> "number of tokens yet to be parsed" > "source of light, 0=dark" )) ; )> > ) ( > ) (T > ; ;7> > > ;7>)>)> :FIX> ,ROOMS>> ; ,VEHBIT> ,OPENBIT>>> ;7>)> ;7>)> :FIX> >)>)> .LT>> ;> > > > ;"Erase old desc." ;> )> <+ >>> > > ;"negative sign" >)> > ) (T >)>> .D> > > )> )>> ) CHR) > ) (ELSE > > >) (ELSE )>)>> >> ; ; ; ; ; >> ; ; ; ; ; >> ; ; ; ; ; >> ; ; ; ; ; >> >> > > > ) (> ,W?APOSTROPHE> >> 2>>> >>> >>> <* 2 ,LEXV-ELEMENT-SIZE-BYTES>) (T ,LEXV-ELEMENT-SIZE-BYTES)>> .PTR <* .L ,LEXV-ELEMENT-SIZE-BYTES>> ;"need to call INBUF-ADD-VOC for these words:" ) (T > > )> ) ( ;"e.g. Moses'" ,W?S>> > > >> !\s !\z>> 2>>> ) (T >)>>>)> ) (T > ) (> )>) (> )> )>>> ) (T > ) (> )>) (> )> )>>> "Shared files should call this to check parts of speech:" )) ;"synonym?" > >)> > )> > ) ( >) ( >) ( >) ( >) ( >) ( >) ( >) ( ) (T 0)>>) ( >)>
> >>>) (T >>)> .WD)>> .WD1 .WD2> ;"Is this the first word ..." ; <- ,LEXV-LENGTH-BYTES <* 2 ,P-LEXELEN>>> > > ;" followed by verb?"> >> ;"If so, ignore it." > T)>> > >> > > ) (> > >>> ; 0>> ;"JOHN D. FLATHEAD = JOHN FLATHEAD?" )>)> >>>> ) (LEN ) (PTR )) ) (>> ) (T 2>>> ) (T >)> > ,LEXV-ELEMENT-SIZE-BYTES>> .X>>)>>> > )>> )> > > > > > )> > >) ( > > )> >) (T >> >)> ,ROOMS> ; ,VEHBIT>> >)> > >>> >)> ;"to prevent pronouns w/o referents" 4> )> > )> > )> "> )> )> > >)> ,W?PERIOD ,W?THEN> ;"Is THEN first input word?" >>;"If so, ignore it." >)> .PARSER>)> ; ,W?UNDO> > .PARSER>) (> ;"not unknown word?" > ,W?SAVE> ) (T ;)> )>)>> ,P-DIR-CODE>> <- ,LEXV-LENGTH-BYTES <* 2 ,P-LEXELEN>>> ,P-EOI-CODE ,P-COMMA-CODE>>> > > ;> > > >> > 0>> >> > 1>> >) ;(T >)>)> ) (<==? ,W?OOPS ,W?O> ,W?PERIOD ,W?COMMA> > >)> .PARSER>) (>> .PARSER>) (> ,P-LEXV .PTR ,G-LEXV .VAL> ;"Fixes OOPS w/chars" ) (T > .PARSER>)>>) ( > >)> > ,W?AGAIN ,W?G> <0? >> .PARSER>) ( ;"for ZIP20 bug" <- ,LEXV-LENGTH-BYTES <* 2 ,P-LEXELEN>>>> > >> >) (T .PARSER>)>)> > >> > ) (T >)> >> .PARSER>)> > >) (T > > ; > >> >> >>>>)>)> > >)) > ) (<1? .PV> .PARSER>) (T > > )> > ,W?TWICE ,W?THRICE> ,P-WORDS-AGAIN *204*>>> ;"to avoid repeating" 2) (T 1)>> >> )> ) (T )> .PARSER>)>>> > )> )>>> > >> > )>) ( )>)>)> > >> ;>>> "Take the input list, and return a list of possible parses" ;1 ) ( ;2 ) ( ;3 > )> > )> > ;) (>> )>> ) ( ;4 ) ( ;5 ;6> > > ) ;( ;7 <> ) (T )>) ( ) ( >> >>> ) (T )>>) (T )> > <>) "AUX" RES:FIX (NUM 0) (SAV-LEXV ,TLEXV)) ) (T >)> > )>> > ; )> 'PARSE-OBJ1 )> 'PARSE-LOC )> 'PARSE-QW )> 'PARSE-ADJ )> 'PARSE-SUBJ )> 'PARSE-QUERY )>> > > ) (> ) (> <==? .RES ,PARSER-RESULT-DEAD>> ;"DEAD means unknown word or something else that couldn't be recovered by trying some other path" )> ;"In case of partial success, anything saved has to be in orphan stuff" > >> >> :FIX> :FIX> <0? :FIX>>> > 0>> > 0>> <0? :FIX>>>> >) (T )>) (<==? >> ;"Through with this case" >) (T >> )> > )>> > )> )>>> > ,PARSER-RESULT) (<==? .RES ,PARSER-RESULT-DEAD> 1)>> > > > > > > > > >>>> > > > > > > > > > > ; > > > > > > > > > >>> > > > > > > > > > > ; > > > > > > > > > >>>) (T > > > > > > > > > > ; > > > > > > > > > >>>)> ; > ; > > > > > > ;> ;> > > > ; > >>>> ; ; >> ; ; >> > ) ( > ) ( > >> ,W?APOSTROPHE> > >>>) (T >)>> )>> > ) ( > "]" CR> ) (T )>> > > >> ) (T )>) (T ) (T )> )>> > 10)(T 2)>)) ;> ;>> ) (T )>> >> )) > )) > 0> ) (T > ) (<==? .CHR !\-> .N?>) (T )>) ( > .N?>) ( .N?>) (T <- .CHR !\0>>>)> >)>> .N?>) ( .N?>)> >> ,W?INT.TIM) (T >)> ,W?INT.NUM)>>> >> .WRD> )>> > > )) > ;"for orphaning" >> )>)> )>> 0> ,W?APOSTROPHE>> > ;"for possessives")> ;( ) ;"interferes with SAY 'VERB'" (T >)> > ,P-LEXSTART>> )> > ;"A buzzword, so skip over it") (T > ;"a synonym")>) (T > ) (T )>> > 0> .OFFS>> -1>>>> > .OFFS>> ;"The case we found didn't cover all cases. TMP is the extras." > 1> >> ;"New split" >) (T >>)> > )> ;"Save the cases covered by the first thing found" > )> > > 0>> )>>) (T ;"Old split" .SPLIT-NUM>> >)> .SPLIT-NUM .CAV>)>)> )>> )>)> >>)) > > 1> >> >) (T >>)> > )> > > )> > > )>> >) (T .SPLIT-NUM>>>)> )>>) (> ;"error" )>> )> > ;"shift" )>> > T) (T )>)> > 1> > > ) (T > >>> )>)> >> )>) ( > 1>> >) (T >)>)> )>>) ( ;"reduce" >)) > ;> )) )> >>)>> >>> )> >)> ;"The reduction function voids the warranty if it: Pops more or less than REDUCTION-SIZE elements off the data stack. [Fewer is OK if reduction returns false.] Modifies any of the objects on the stack (since COPY-PSTACK doesn't copy the objects." ;>> )> ) (T >)> > > )>) (T )> ;"This assumes that the action in the table is a simple state transition. If not, it's a bug in the table generator." > >>> )> > )>>>) (T ;"ACTION-SPLIT-->done" > )>>>> FALSE> OFFS:FIX) >> .STATE)) :FIX> :FIX> <0? :FIX>>> .GTA>)> >>> )> > >>>)>> )) :FIX> .GNA>) (<==? :FIX .TYPE> .GNA>)> >>)>> > )>> ; " passes.]|"> )>) (> > ) (T )>)>> ;> <>) (> ) (T )>>> ) (T )> >> 2>> >)> > ;"restore P-LEXWORDS" >> ,LEXV-ELEMENT-SIZE-BYTES>> .TMP>>)> ,W?AGAIN> > 1>> ) (T .TMP>> )>>>> > > > ;> 3> )> > NOUN>)> > ADJ>)> >> .V>> > ) (T )> >> >)> ) (V ADJS-COUNT 1>) (GLBS ) (N )) > ) ( ,W?ONE >> > .V .CT>>> >> 7>> ) ;(T > >)> )>>>>