(DEFUN PDEFINE FEXPR (A) ;;THIS PDEFINE MERELY PUT THE PROGRAMMAR FUNCTION ON THE ;;PROPERTY LIST OF THE PARSE NAME UNDER THE INDICATOR ;;'INTERPRET. IT ALSO ADDS THE TAGS FAIL AND RETURN. NOTE THAT ;;THE PDEFINE BODY IS SIMILIAR TO PROG BODY. THIS SETS UP ;;INTERPRETED PROGRAMMAR EXECUTIONS (PUTPROP (CAR A) (NCONC (CDR A) (LIST 'FAIL '(RETURN 'FAIL) 'RETURN '(RETURN 'RETURN))) 'INTERPRET)) (DEFUN INTERPRET (UNIT) ;; INTERPRET IS THE FUNCTION WHICH 'CALLS' AN INTERPRETED ;;PROGRAMMAR PROGRAM. IT FIRST DECLARES AND INITIALIZES ALL ;;THE RELAVENT VARIABLES THEN IT EXECUTES THE PROGRAMMAR BODY ;;AS A PROG NOTE THE USE OF "RE". IT IS SET TO A NODE ONE ;;WISHES TO BE THE INITIAL DAUGHTER OF THIS NODE - ONLY CONJ ;;NEEDS THIS HACK (PROG (FE H ME NB C SM CUT NN T1 T2 T3) (SETQ NN T) (SETQ CUT END) (SETQ C (BUILDNODE (SETQ FE (REVERSE REST)) ;FEATURE LIST (SETQ NB (OR (NB RE) N)) ;BEGINNING IN SENTENCE OF THIS NODE N ;SENTENCE POINTER JUST AFTER THIS NODE (SETQ H RE) ;DAUGHTERS OF THIS NODE NIL)) ;SEMANTIC JAZZ (SETR 'PARENT PARENT C) ;SET PARENT REGISTER (COND ((EQ (APPLY 'PROG (GET UNIT 'INTERPRET)) 'RETURN) (GO RETURN))) ;APPLY THE PROGRAMMAR PROGRAM FAIL (SETQ MES ME) (SETQ N (OR (N RE) NB)) ;RESET SENTENCE POINTER (RETURN NIL) RETURN (SETQ MES ME) (RETURN (REBUILD (REVERSE FE) NB N H SM C)))) (DEFUN : FEXPR (BRANCH) (COND ((EVAL (CAR BRANCH)) ;EVALUATE BRANCH CONDITION (COND ((AND (NULL NN) (CDDDR BRANCH)) (GOCHECK (CDDR BRANCH))) ;IF TRUE AND NO MORE SENTENCE REMAINS (T (GOCHECK BRANCH)))) ;AND IF THIRD BRANCH GIVEN,THEN GO TO THIRD (T (GOCHECK (CDR BRANCH))))) ;BRANCH 2ND BRANCH (DEFUN GOCHECK (LABEL) ;;THE GOCHECK FUNCTION CHECKS THE BRANCHES OF THE PROGRAMMAR ;;CONDITIONAL IF THE BRANCH IS NIL, GOCHECK MERELY RETURNS IF ;;THE BRANCH IS NON-ATOMIC, IT IS TAKEN AS A FAILURE MESAGE ;;GOCHECK PUTS THE MESAGE ON THE MESSAGE LIST AND GOES TO ;;FAIL(IN GINTERP) IF THE BRANCH IS ATOMIC, GOCHECK GOES TO IT ;;REMEMBER THAT THE GO LEADS TO A POINT SOMEWHERE IN THE ;;PROGRAMMAR PROGRAM UNLESS IT IS 'FAIL OR 'RETURN (COND ((NULL (CADR LABEL)) T) ((ATOM (CADR LABEL)) (GO (CADR LABEL))) (T (M (CADR LABEL)) (GO FAIL)))) (DEFUN GOCOND FEXPR (A) ;;GOCOND GOES TO THE 1ST OR 2ND OF TWO TAGS DEPENDING IF THERE ;;REMAINS ANY MORE OF THE SENTENCE YET TO BE PARSED (COND (NN (GO (CAR A))) (T (GO (CADR A)))))