(FILECREATED " 8-Aug-84 12:37:43" {ERIS}<SPEECH>HALVORSEN>PARSE-LEX.;7 5023   

      changes to:  (VARS PARSE-LEXCOMS TEMPARRAY)
		   (FNS REORDER-STRESS-INFO PARSE-LEX-ARRAY)

      previous date: " 8-Aug-84 11:55:48" {ERIS}<SPEECH>HALVORSEN>PARSE-LEX.;5)


(* Copyright (c) 1984 by Xerox Corporation. All rights reserved.)

(PRETTYCOMPRINT PARSE-LEXCOMS)

(RPAQQ PARSE-LEXCOMS [(FNS PARSE-LEX-ARRAY PARSE-WORD-RECORD LISTIFY.SYLLABIFICATION 
			   REORDER-STRESS-INFO STRESS.TO.END)
		      (P (LOAD? (QUOTE {ERIS}<LISPUSERS>LOADFILES.DCOM)
				(QUOTE SYSLOAD))
			 (LOADFILES (QUOTE (NIL {ERIS}<SPEECH>LEXICON))
				    (QUOTE (NLOAD DFOOT))
				    (QUOTE (DCOM NIL])
(DEFINEQ

(PARSE-LEX-ARRAY
  [LAMBDA (ARRAY)                                            (* pkh: " 8-Aug-84 11:55")

          (* Takes as input an array of entries from Webster's pocket dictionary; modifies the pronunciation to exhibit foot
	  structure, and prints out the modified pronunciation on FOOTOUTPUTFILE, which is a global variable)


    (for I WREC [BITTBL ← (MAKEBITTABLE (QUOTE (- < *]
	 TEMP from 1 to (ARRAYSIZE ARRAY)
       do (SETQ TEMP (ELT ARRAY I))                          (* Get a line from the dictionary)
	  (SETQ WREC (create WORD
			     INPUT ← (fetch (LEXENTRY ORTH) of TEMP)))

          (* Create a WORD record which the foot-parser knows about; the array with dictionary entries are LEXENTRY records;
	  ORTH of a LEXENTRY is INPUT of a WORD record; PRON of a LEXENTRY is the STRUCTURE field of a WORD record once the 
	  pronunciation string in the dictionary has been turned into a list of lists of the segments in a syllable;
	  i.e. "men-tor" becomes ((m e n -) (t o r)))


	  (replace (WORD STRUCTURE) of WREC with (LISTIFY.SYLLABIFICATION (fetch (LEXENTRY PRON)
									     of TEMP)
									  BITTBL))
	  (PARSE-WORD-RECORD WREC)                           (* Foot parsing the WORD record)
                                                             (* Finally printing out the modified pronunciation)
	  (printout FOOTOUTPUTFILE (fetch INPUT of WREC)
		    .TAB 22 (PACKWORD (fetch STRUCTURE of WREC))
		    T])

(PARSE-WORD-RECORD
  [LAMBDA (WREC)                                             (* pkh: " 7-Aug-84 19:03")
    (PROGN                                                   (* Takes word with syllables indicated by -, explodes 
							     the strings and puts them in reverse order under the 
							     property SYLLABLES)
	   (REORDER-STRESS-INFO WREC)
	   (replace STRUCTURE of WREC with (fetch STRUCTURE of WREC))
                                                             (* Get the syllables in the correct order 
							     (left-to-right))
	   (COND
	     ((AND (NEQ (QUOTE NOBIND)
			(EVALV (QUOTE DEBUG)))
		   DEBUG)
	       (printout NIL T WREC T)))
	   (FOOT-PARSER WREC])

(LISTIFY.SYLLABIFICATION
  [LAMBDA (PRON BITTBL)                                      (* pkh: " 7-Aug-84 18:59")

          (* Turns a string with syllable boundary indicators into a list of lists (one list for each syllable) with the 
	  syllable separator as the last element of the list)


    (PROG ((OLD-SEPR 0))
          (RETURN (for (NEW-SEPR ← (STRPOSL BITTBL PRON 1))
		       SYLLLIST while NEW-SEPR by (STRPOSL BITTBL PRON (ADD1 NEW-SEPR))
		     do (push SYLLLIST (UNPACK (SUBSTRING PRON (ADD1 OLD-SEPR)
							  NEW-SEPR)))
			(SETQ OLD-SEPR NEW-SEPR)
		     finally (RETURN (REVERSE (push SYLLLIST (UNPACK (SUBSTRING PRON (ADD1 OLD-SEPR])

(REORDER-STRESS-INFO
  [LAMBDA (WREC)                                             (* pkh: " 8-Aug-84 12:18" posted: "29-Mar-82 16:46")
                                                             (* Iterate through all the syllables and put the stress 
							     at the end)
    (for SYLL in (fetch (WORD STRUCTURE) of WREC) do (STRESS.TO.END SYLL) finally (RETURN WREC])

(STRESS.TO.END
  [LAMBDA (SYLLABLE.AS.LIST)                                 (* pkh: " 7-Aug-84 16:57")

          (* Takes a syllable, in the form of a list; if there is a stress indication, i.e. a number, then put it at the end
	  of the list)


    [COND
      ((SETQ STRESS (for SOUND in SYLLABLE.AS.LIST thereis (NUMBERP SOUND)))
	(DREMOVE STRESS SYLLABLE.AS.LIST)
	(COND
	  [(IGREATERP (LENGTH (LAST.BUT.NOT.SEPR SYLLABLE.AS.LIST))
		      1)
	    (RPLACD (NTH SYLLABLE.AS.LIST (SUB1 (LENGTH SYLLABLE.AS.LIST)))
		    (CONS STRESS (LAST SYLLABLE.AS.LIST]
	  (T (NCONC SYLLABLE.AS.LIST (LIST STRESS]
    SYLLABLE.AS.LIST])
)
(LOAD? (QUOTE {ERIS}<LISPUSERS>LOADFILES.DCOM)
       (QUOTE SYSLOAD))
(LOADFILES (QUOTE (NIL {ERIS}<SPEECH>LEXICON))
	   (QUOTE (NLOAD DFOOT))
	   (QUOTE (DCOM NIL)))
(PUTPROPS PARSE-LEX COPYRIGHT ("Xerox Corporation" 1984))
(DECLARE: DONTCOPY
  (FILEMAP (NIL (681 4775 (PARSE-LEX-ARRAY 691 . 2256) (PARSE-WORD-RECORD 2258 . 2999) (
LISTIFY.SYLLABIFICATION 3001 . 3698) (REORDER-STRESS-INFO 3700 . 4117) (STRESS.TO.END 4119 . 4773))))
)
STOP