IF          DEBUG,X100,,X100
NMPROC:  VAL         " X"            < NOM DU PROCESSEUR.
X100:    VAL         0
         IF          DEBUG,,X100,
NMPROC:  VAL         " D"            < NOM DU PROCESSEUR.
X100:    VAL         0
         IDP         "SYNTAX - RELEASE 01/06/1979"
         IDP         "JOHN F. COLONNA"
         EOT         #SIP DEF PROCESSEUR#
         PROG
         WORD        SYNTAX          < ADRESSE DE LANCEMENT.
         WORD        0               < POUR FAIRE $=$+1.
PSYNT:   EQU         $               < A NOTER : P='12 !!!!
         LRP         L
         BR          -2,L            < ENTREE DANS LE PROCESSEUR.
         EOT         #SIP DEFINITION ITEM#
         PAGE
<
<
<        C O N S T A N T E S   D U   D I C T I O N N A I R E  :
<
<
NCATG:   VAL         32              < NBRE DE CATEGORIES GRAMMATICALES.
LMOT:    VAL         40              < NBRE DE CARACTERES MAX D'UN MOT.
NCATG4:  VAL         NCATG+3/4       < NBRE D'OCTETS NECESSAIRES
                                     < AUX CATEGORIES GRAMMATICALES.
NSEM:    VAL         4               < NBRE D'OCTETS DE VALEUR
                                     < SEMANTIQUE DU MOT.
<
<
<        C O N S T A N T E S   L E X I C O G R A P H I Q U E S  :
<
<
LPHR:    VAL         112             < NBRE DE CARACTERES MAX
                                     < D'1NE PHRASE.
                                     < (=LBUFESC DANS DCTESC...)
<
<
<        F O R M A T   D ' U N   D E S C R I P T E U R
<                    D E   M O T  :
<
<
DESCI:   VAL         0               < INDEX DU 1ER CARACTERE DU MOT
                                     < DESCI=-1 EN FIN DE PHRASE.
DESCL:   VAL         1               < LONGUEUR EN OCTETS DU MOT.
                                     < CONTIENT LE NBRE DE MOTS
                                     < RECONNUS EN FIN DE PHRASE.
DESCD:   VAL         2               < NOM DU DICTIONNAIRE D'APPAR-
                                     < TENANCE :
                                     < 0 : LE MOT EST INCONNU ,
                                     < '  ' : MOT USUEL CONNU ,
                                     < <K1><K2> : MOT NON USUEL CONNU.
DESCS:   VAL         3               < SEPARATEUR PRECEDENT LE MOT
                                     < COURANT , CODE A L'AIDE D'UN
                                     < 'SEPX' DANS L'OCTET1 ; L'OCTET0
                                     < CONTIENT EVENTUELLEMENT UN
                                     < INDICATEUR DE DEBUT DE GROUPE.
DESCF:   VAL         4               < CATEGORIE GRAMMATICALE DU MOT
                                     < DANS SON CONTEXTE DANS
                                     < L'OCTET1 , ET DANS L'OCTET0 ,
                                     < LE NIVEAU DE RECURSIVITE DU
                                     < MOT COURANT.
DESCV:   VAL         5               < VALEUR SEMANTIQUE DU MOT.
DESCC:   VAL         NSEM+1/2+DESCV  < CATEGORIES GRAMMATICALES DU MOT.
LDESC:   VAL         NCATG4+3/4+DESCC  < NBRE DE MOTS MACHINE NECESSAI-
                                       < RES POUR MEMORISER LE DESCRIP-
                                       < TEUR D'UN MOT FRANCAIS.
<
<
<        C A T E G O R I E S   L E X I C A L E S  :
<
<
SEP1:    VAL         4               < SEPARATEUR DU TYPE 'SPACE'.
SEP2:    VAL         3               < SEPARATEURS DU TYPE ',',';',....
SEP3:    VAL         2               < SEPARATEUR DU TYPE APOSTROPHE.
SEP4:    VAL         1               < SEPARATEUR DU TYPE PARENTHESE.
FINF:    VAL         0               < SEPARATEUR DE FIN DE PHRASE ,
                                     < SOIT 'EOT' OU R/C.
CAR:     VAL         8               < LIMITE ENTRE LES CARACTERES A
                                     < VALEUR DE LETTRES ET LES
                                     < SEPARATEURS.
LETR:    VAL         8               < CARACTERES DE 'A' A 'Z'.
CHIF:    VAL         9               < CARACTERES DE '0' A '9'.
CARS:    VAL         'A              < CARACTERES SPECIAUX : '-','+','*',...
IGNOR:   VAL         'B              < CARACTERES DE CODE NON
                                     < RECONNUS.
         PAGE
<
<
<        F O R M A T   D E   L A   G R A M M A I R E  :
<
<
TYPE:    VAL         0               < OCTET0=<TYPE> ,
                                     < OCTET1=<ARGUMENT1>.
ARG2:    VAL         1               < <ARGUMENT2>.
SUCCES:  VAL         2               < EMPLACEMENT DU 1ER SUCCESSEUR
                                     < DU NOEUD COURANT.
                                     < LA FIN DE LISTE DE SUCCESSEURS
                                     < EST INDIQUEE PAR UN MOT NUL.
<
<
<        < T Y P E S >   R E C O N N U S  :
<
<
TACT:    VAL         0               < NOEUD D'ACTION NON TERMINALE ;
                                     < <ARGUMENT1> EST TRANSMIS PAR
                                     < LE REGISTRE A A LA ROUTINE
                                     < D'ADRESSE <ARGUMENT2>.
TACTER:  VAL         1               < NOEUD D'ACTION TERMINALE ; MEMES
                                     < CONVENTIONS QU'AVEC 'TACT'.
TVID:    VAL         2               < NOEUD VIDE (MAIS NON TERMINAL).
TERM:    VAL         3               < NOEUD TERMINAL ; <ARGUMENT2>
                                     < CONTIENT LA CATEGORIE GRAMMA-
                                     < TICALE RECHERCHEE POUR LE MOT
                                     < COURANT DE LA PHRASE.
TNT:     VAL         4               < NON-TERMINAL SYNTAXIQUE , AVEC
                                     < ACTION EVENTUELLE SUR L'AVANT
                                     < DERNIER DESCF.
TMOT:    VAL         5               < NOEUD TERMINAL DE TEST DE
                                     < PRESENCE D'UN MOT DONNE DONT
                                     < <ARGUMENT1> EST LA LONGUEUR ,
                                     < ET <ARGUMENT2> UN RELAI INDEXE
                                     < VERS LUI.
                                     < DE PLUS <ARGUMENT1> PEUT CONTE-
                                     < NIR DANS LES BITS 8-11 UN
                                     < INDICATEUR DISCRIMINANAT LES
                                     < PRONOMS RELATIFS QUI/QUE/...
TFIN:    VAL         6               < NOEUD VIDE TERMINAL (C'EST
                                     < UN NOEUD DE FIN DE SUCCESSION
                                     < LINEAIRE).
TFPH:    VAL         7               < TEST DE FIN DE PHRASE.
TNFPH:   VAL         8               < TEST DE NON-FIN DE PHRASE.
TSEP:    VAL         9               < TEST DE SEPARATEUR.
                                     < <ARGUMENT2> CONTIENT LA
                                     < LE SEPARATEUR RECHERCHE SOUS
                                     < FORME DE SEPX.
TNSEP:   VAL         10              < TEST DE NON-SEPARATEUR.
                                     < <ARGUMENT2> CONTIENT LA
                                     < LE SEPARATEUR RECHERCHE SOUS
                                     < FORME DE SEPX.
TNTC:    VAL         11              < NON-TERMINAL SYNTAXIQUE AVEC
                                     < ACTION EVENTUELLE SUR LE
                                     < DESCF COURANT.
<
<
<        FORMAT :
<                      LA GRAMMAIRE DU FRANCAIS EST DECRITE
<                    A 6HAIDE D'UN CERTAINS NBRE DE NOEUDS
<                    SYNTAXIQUES DONT LES TYPES SONT
<                    DEFINIS CI-DESSUS.
<                      LES <SUCCESSEURS> REPRESENTENT LES
<                    ALTERNATIVES POSSIBLES POUVANT SUIVRE
<                    UN NOEUD COURANT.
<                      ON PARCOURS LA GRAMMAIRE DANS LE SENS
<                    'CROISSANT' JUSQU'A RENCONTRER
<                    SOIT UN NOEUD TERMINAL , SOIT UNE CONDITION
<                    NON REMPLIE (ET CONTENUE DANS LE
<                    REGISTRE B . LORS DES RETOURS ARRIERE
<                    EN ERREUR , ON ESSAYE TOUS LES SUCCESSEURS
<                    NON ENCORE TENTES . LA FIN DE LISTE DE
<                    SUCCESSEURS EST UN CAS D'ERREUR.
<
<
<        C A T E G O R I E S   G R A M M A T I C A L E S  :
<
<
NOM:     VAL         1               < NOM.
VERBE:   VAL         2               < VERBE.
ADJECT:  VAL         3               < ADJECTIF.
ADVERB:  VAL         4               < ADVERBE.
PROPER:  VAL         5               < PRONOM PERSONNEL.
PRODEM:  VAL         6               < PRONOM DEMONSTRATIF.
INTERJ:  VAL         7               < INTERJECTION,'OUI','NON'.
PREPOS:  VAL         8               < PREPOSITION.
CONJ:    VAL         9               < CONJONCTION.
ARTICL:  VAL         10              < ARTICLE.
PROREL:  VAL         11              < PRONOM RELATIF.
<
<
<        G R O U P E S   S Y N T A G M A T I Q U E S  :
<
<
PHRASE:  VAL         NCATG+1         < PHRASE.
TGV:     VAL         NCATG+2         < GROUPE VERBAL.
TGN:     VAL         NCATG+3         < GROUPE NOMINAL.
TREL:    VAL         NCATG+4         < PROPOSITION RELATIVE.
TINT:    VAL         NCATG+5         < INTERJECTION.
TCONJ:   VAL         NCATG+6         < CONJONCTION DE COORDINATION.
<
<
<        D I S C R I M I N A N T S  :
<
<
TQUI:    VAL         '80             < DISCRIMINANT DE 'QUI'.
TQUE:    VAL         '90             < DISCRIMINANT DE 'QUE'.
<
<
<        R E C U R S I V I T E   D U   D I S C O U R S  :
<
<
BOR:     VAL         'FF             < 'BEGIN RECURISIVITE' ; ELLE
                                     < SE FAIT EN GENERAL SUR LES
                                     < 'QUE' , 'QUI' ,....
EOR:     VAL         1               < 'END RECURSIVITE' ; ELLE SE
                                     < FAIT SUR LES FINS D'AXIOMES 2
                                     < ET LES FINS D'AXIOMES 3.
FRONT:   VAL         '80             < FRONTIERE DE PROPOSITION A
                                     < NIVEAU DE RECURSIVITE CONSTANT.
<
<                    D E S C R I P T E U R
<        D E   P R O P O S I T I O N   R E L A T I V E  :
<
<        FORMAT :
<                      CHAQUE ENTREE EST BOUBLE-MOT :
<                    -MOT0=@@1ER DESCRIPTEUR-MOT DE CETTE PARTIE
<                          DE PROPOSITION ,
<                    -OCTET2=INDICATEUR DE DEBUT DE GROUPE ,
<                    -OCTET3=NBRE DE MOTS CONTENUS DANS LE GROUPE ,
<                            DISCRIMINANT DE QUI/QUE/....
<
<        FORMAT GLOBAL :
<        <RELAI-DESCRIPTEUR-PROPOSITION> ,
<        <SUJET>(<OPERATEUR>/'0(<OBJET>/'0))(<PRO.REL>/'0) ,
<        '0000.
<
ALPHA:   VAL         0               < 1ERE PARTIE DE LA PROPOSITION.
QUIQUE:  VAL         2               < PRONOM RELATIF DE LA PROPOSITION.
GVREL:   VAL         4               < GROUPE VERBAL DE LA PROPOSITION.
BETA:    VAL         6               < DERNIERE PARTIE DE LA PROPOSITION.
LREL:    VAL         10              < LONGUEU D'UN DESCRIPTEUR DE
                                     < PROPOSITION RELATIVE ; ON
                                     < TROUVE DANS LE MOT0 , UN RELAI
                                     < VERS LE DESCRIPTEUR REEL DE
                                     < LA PROPOSITION , DANS LES 8
                                     < MOTS SUIVANTS , CE QUI EST DECRIT
                                     < CI-DESSUS , ET DANS LE DERNIER
                                     < MOT UN CODE D'ARRET ('0).
SUJET:   VAL         0               < <SUJET> ,
OPERA:   VAL         2               < <OPERATEUR> ,
OBJET:   VAL         4               < <OBJET>.
         PAGE
<
<
<        M E M O I R E   L I B R E  :
<
<
FREE:    VAL         '1000           < ADRESSE DU 1ER MOT LIBRE
                                     < DES 2 DERNIERS K DE LA MEMOIRE.
<
<
<        L O C A L  :
<
<
         LOCAL
LOC:     EQU         $
<
<        M E S S A G E S  :
<
         IF          DEBUG,,X100,
MERR:    BYTE        7;'6D
         ASCI        "ERREUR"
MCOR:    BYTE        8;'6D
         ASCI        "CORRECT "
MNPRO:   BYTE        15;'6D
         ASCI        "0 PROPOSITIONS"
MPRO:    BYTE        5;'6D
         BYTE        '80;"*"
         ASCI        "  "
MRCLF:   BYTE        1;'6D
MSP:     BYTE        1;" "
MREC:    BYTE        5;'6D
         ASCI        "<R> "
MMOT:    BYTE        5;'6D
         BYTE        '81;">"
         ASCI        "  "
MSEM:    BYTE        3;" ";"/";" "
MNOM:    BYTE        4;"="
         ASCI        "NOM "
MVERB:   BYTE        6;"="
         ASCI        "VERBE "
MADJ:    BYTE        9;"="
         ASCI        "ADJECTIF"
MADV:    BYTE        8;"="
         ASCI        "ADVERBE "
MPP:     BYTE        8;"="
         ASCI        "PRO.PER "
MPD:     BYTE        8;"="
         ASCI        "PRO.DEM "
MINJ:    BYTE        7;"="
         ASCI        "INTERJ"
MPREP:   BYTE        12;"="
         ASCI        "PREPOSITION "
MCONJ:   BYTE        12;"="
         ASCI        "CONJONCTION "
MART:    BYTE        8;"="
         ASCI        "ARTICLE "
MPREL:   BYTE        8;"="
         ASCI        "PRO.REL "
X100:    VAL         0
<
<        R E L A I   D E   T A B L E S  :
<
< PHRASE A ANALYSER :
<
PHR:     VAL         FREE            < ZONE CONTENANT LA PHRASE
                                     < A ANALYSER.
APHR:    WORD        PHR+'8000       < RELAI INDEXE VERS LA
                                     < PHRASE A ANALYSER.
FREE:    VAL         LPHR/2+FREE+1   < PROGRESSION DE LA ZONE LIBRE.
                                     < (+1 A CAUSE DE L'EOT QUE L'ON
                                     < AJOUTE SYSTEMATIQUEMENT EN
                                     < BOUT DE ZONE 'PHR').
<
< ZONE DES ARGUMENTS :
<
LDUM:    VAL         32              < LONGUEUR DE LA ZONE ARGUMENTS.
DUMY:    VAL         FREE            < ZONE DE TRANSMISSION DES
                                     < ARGUMENTS SYNTAXE-->SEMANTIQUE.
PROP1:   VAL         0               < NUMERO DU MOT DE LA ZONE
                                     < DUMY CONTENANT L'ADRESSE REELLE
                                     < DU 1ER MOT DE LA ZONE 'PROPOS'.
PROPP:   VAL         1               < RELAI D'ACCES A LA PROPOSITION
                                     < PRINCIPALE (ET AUX PROPOSITIONS
                                     < RELATIVES PAR INCREMENTATIONS
                                     < SUCCESSIVES DE +1).
NPROP:   VAL         2               < NBRE DE PROPOSITIONS RECONNUES.
CONDRT:  VAL         3               < CONDITIONS DE RETOUR DE
                                     < L'ANALYSE SYNTAXIQUE.
FREE:    VAL         FREE+LDUM
ADUMY:   WORD        DUMY+'8000      < RELAI INDEXE VERS LA ZONE DUMY.
<
< ZONE DES DESCRIPTEURS ET DES PROPOSITIONS :
<
DPHR:    VAL         FREE            < ZONE DE DESCRIPTION LEXICO-
                                     < GRAPHIQUE DE LA PHRASE 'PHR'.
FREE:    VAL         LDESC*LPHR/2+FREE
                                     < PROGRESSION DE LA ZONE LIBRE.
ADPHR:   WORD        DPHR            < ADRESSE DU 1ER DESCRIPTEUR
                                     < LEXICOGRAPHIQUE.
<
<        A T T E N T I O N  :
<                      EN FAIT LA ZONE 'PROPOS' EST
<                    EN RECOUVREMENT AVEC LA ZONE
<                    'DPHR' , ET LE 1ER MOT DE 'DUMY'
<                    DONNE L'ADRESSE REELLE DE
<                    LA ZONE 'PROPOS' ..
<
PROPOS:  VAL         FREE            < ZONE DE DESCRIPTION DES
                                     < PROPOSITIONS CONTENUES DANS LA
                                     < PHRASE ANALYSEE.
FREE:    VAL         LPHR/2+FREE
APROPO:  WORD        PROPOS          < ADRESSE DU RELAI DU 1ER MOT
                                     < DE LA 1ERE PROPOSITION.
APR:     WORD        PROPOS          < ADRESSE DU DESCRIPTEUR DU MOT
                                     < COURANT DE LA PROPOSITION
                                     < COURANTE.
<
< RELAIS COURANTS :
<
AI2H:    WORD        ZERO+PILE-LTNI-LTNI
                                     < @DE L'EN-TETE DE L'ITEM2.
AI2:     WORD        ZERO+PILE-LTNI-LTNI+LTN,X
                                     < RELAI INDEXE VERS LE CORPS
                                     < DE L'ITEM2.
ASEXEC:  WORD        TSEXEC,X        < RELAI VERS LA TABLE DE TRAITE-
                                     < MENT DES TYPES DES NOEUDS DE
                                     < LA GRAMMAIRE.
TSEXEC:  EQU         $
         WORD        ACTNT           < ACTION NON TERMINALE.
         WORD        ACTER           < ACTION TERMINALE.
         WORD        VIDE            < NOEUD VIDE NON TERMINAL.
         WORD        TERMIN          < TERMINAL.
         WORD        NTERM           < NON-TERMINAL SYNTAXIQUE AVEC
                                     < ACTION EVENTUELLE SUR L'AVANT
                                     < DERNIER DESCF.
         WORD        MOTP            < TEST MOT PRECISE.
         WORD        FIN             < NOEUD VIDE TERMINAL.
         WORD        FINPH           < TEST DE FIN DE PHRASE.
         WORD        FINNPH          < TEST DE NON-FIN DE PHRASE.
         WORD        RTSEP           < TEST DE SEPARATEUR.
         WORD        RTNSEP          < TEST DE NON-SEPARATEUR.
         WORD        NTERMC          < NON-TERMINAL SYNTAXIQUE AVEC
                                     < ACTION EVENTUELLE SUR LE
                                     < DESCF COURANT.
TYPMAX:  VAL         $-TSEXEC        < 1ER TPE INEXISTANT.
CG1:     VAL         1               < 1ERE CATEGORIE GRAMMATICALE.
         IF          DEBUG,,X100,
TNOM:    EQU         $-CG1           < TABLE DES ADRESSES DES NOMS DES
                                     < CATEGORIES GRAMMATICALES.
         WORD        MNOM
         WORD        MVERB
         WORD        MADJ
         WORD        MADV
         WORD        MPP
         WORD        MPD
         WORD        MINJ
         WORD        MPREP
         WORD        MCONJ
         WORD        MART
         WORD        MPREL
NCG:     VAL         $-TNOM-CG1      < NBRE DE CATEGORIES GRAMMATICALES.
ANOM:    WORD        TNOM,X          < RELAI VERS LA TABLE DES NOMS
                                     < DES CATEGORIES GRAMMATICALES.
X100:    VAL         0
<
<        D E M A N D E S   A   C M S 4  :
<
DEMOUT:  WORD        '0202           < SORTIE MESSAGE.
         WORD        0               < @OCTET DU MESSAGE.
         WORD        0               < LONGUEUR OCTET DU MESSAGE.
DEMIT:   WORD        '0602           < CHARGEMENT DES PAGES DU
                                     < DICTIONNAIRE DANS L'ITEM2.
         WORD        PILE-LTNI-LTNI*2
         WORD        2*LTNI
         WORD        -1
DEMSGN:  WORD        '0402           < DEMANDE DE CHARGEMENT DES
                                     < OVERLAYS INITIALISEE EN
                                     < GENERATION DU PROCESSEUR.
         WORD        BRANCH-ZERO*2
         WORD        ZERO-BRANCH+PILE-LTNI-LTNI*2
         WORD        -1
DEMCCI:  WORD        '0001           < APPEL DU CCI.
<
<        P I L E   D E   L ' A N A L Y S E U R  :
<
PILE:    VAL         FREE+1
APILE:   WORD        PILE-1          < POUR INITIALISER LE REGISTRE
                                     < K DANS LA ZONE LIBRE.
<
<        A D R E S S E   D E S   R O U T I N E S  :
<
APRINT:  WORD        PRINT           < EMISSION DES MESSAGES.
AOVL:    WORD        OVL             < CHARGEMENT DES OVERLAYS.
GOBACK:  WORD        E371            < PASSAGE A L'OVERLAY SUIVANT.
ANOEUD:  WORD        NOEUD           < ROUTINE PRINCIPALE ET RECURSIVE
                                     < D'ANALYSE SYNTAXIQUE.
AEXPRO:  WORD        EXPRO           < ROUTINE RECURSIVE D'EXTRACTION
                                     < DES PROPOSITIONS CONTENUES
                                     < DANS LA PHRASE ANALYSEE.
ASTACK:  WORD        STACK           < STACKAGE MOT D'UNE PROPOSITION.
AREC:    WORD        REC             < REECRITURE DES PROPOSITIONS
                                     < RELATIVES.
         IF          DEBUG,,X100,
APMOT:   WORD        PMOT            < EDITION DU MOT COURANT.
X100:    VAL         0
<
<        C O N S T A N T E S  :
<
NGE:     ASCI        "GE"            < NOM DE L'OVERLAY 'GE'.
NSEMA:   ASCI        " C"            < NOM DE L'OVERLAY D'ANALYSE
                                     < SEMANTIQUE.
NDIC:    ASCI        ":  3"          < NOM DE LA PAGE DES MOTS USUELS.
         BYTE        '40;"0"
         BYTE        '04;"T"
         PAGE
<
<
<        E M I S S I O N   D ' U N   M E S S A G E  :
<
<
<        ARGUMENT :
<                    A=@MOT DHUN MESSAGE A EMETTRE ,
<                      DONT LE 1ER OCTET CONTIENT LA
<                      LONGUEUR.
<
<
         PROG
PRINT:   EQU         $
         PSR         C               < SAVE LA BASE C.
         LR          A,C             < C=@MOT DU MESSAGE.
         ADR         A,A
         ADRI        1,A             < A=@OCTET DU MESSAGE.
         STA         DEMOUT+1        < QUE L'ON MET DANS DEMOUT.
         LBY         0,C             < RECUPERATION DE LA LONGUEUR.
         STA         DEMOUT+2        < QUE L'ON MET DANS DEMOUT.
         LAD         DEMOUT
         SVC         0               < ENVOI DU MESSAGE A CMS4.
         PLR         C               < RESTAURE LA BASE C.
         RSR
         PAGE
         IF          DEBUG,,X100,
<
<
<        E D I T I O N   D U   M O T   C O U R A N T  :
<
<
<        ARGUMENT :
<                    C=ADRESSE DU DESCRIPTEUR DU MOT COURANT.
<
<
PMOT:    EQU         $
         LA          DESCI,C         < A=INDEX DU 1ER CARACTERE
                                     < DU MOT COURANT.
         SBT         2               < A=@OCTET DU MOT COURANT.
         STA         DEMOUT+1        < QUE L'ON MET DANS DEMOUT.
         LA          DESCL,C         < A=LONGUEUR DU MOT COURANT.
         STA         DEMOUT+2        < QUE L'ON MET DANS DEMOUT.
         LAD         DEMOUT
         SVC         0               < EDITION DU MOT COURANT.
         RSR
X100:    VAL         0
         PAGE
<
<
<        E X T R A C T I O N   D E S   P R O P O S I T I O N S  :
<
<
<        FONCTION :
<                      CETTE ROUTINE RECURSIVE EXTRAIT LES
<                    PROPOSITIONS CONTENUES DANS LA
<                    PHRASE QUE L'ON ANALYSE ; LA DERNIERE
<                    PROPOSITION EXTRAITE EST LA PROPOSITION
<                    PRINCIPALE.
<
<
FINPRO:  VAL         0               < INDICATEUR DE FIN DE LISTE DES
                                     < MOTS D'UNE PROPOSITION.
FINPHR:  VAL         -1              < INDICATEUR DE FIN DE PHRASE.
<
<
<        NOTA :
<                      D1 , D2 ,... DESIGNANT LES
<                    ADRESSES DES DESCRIPTEURS DE MOTS ,
<                    LE RESULTAT DE CETTE ROUTINE EST UNE
<                    LISTE IMPLEMENTEE EN 'PROPOS' ,
<                    ET DONT LE FORMAT EST LE SUIVANT :
<                    (ET N1 , N2 ,.. LES NIVEAUX RECURSIFIS
<                    DES PROPOSITIONS)
<
<        N1 DN...DK <FINPRO> N2 DI...DJ <FINPRO>....<FINPRO><FINFRA>.
<
<
<        UTILISATION DES REGISTRES :
<                    B=NIVEAU RECURSIF COURANT ,
<                    Y=ADRESSE DU 1ER DESCRIPTEUR DU NIVEAU (B).
<
<
EXPRO:   EQU         $
         CPZ         DESCI,C         < EST-CE LA FIN DE PHRASE ???
         JL          E351            < OUI , ON FAIT COMME SI ON
                                     < DESCENDAIT UN NIVEAU RECURSIF.
         LBY         DESCF,C         < SINON , ACCES AU NIVEAU DE
                                     < RECURSIVITE DU MOT COURANT.
         CPR         A,B             < EST-IL AU NIVEAU COURANT ???
         JG          E351            < (B)>(A) : ON DESCEND DE
                                     < NIVEAU RECURSIF.
         JL          E352            < (B)<(A) : ON MONTE DE NIVEAU
                                     < DE RECURSIVITE.
<
< DEPLACEMENT A NIVEAU RECURSIF CONSTANT :
<
         ADRI        LDESC,C         < PROGRESSION DANS LA PHRASE.
         JMP         EXPRO           < VERS LE MOT SUIVANT ...
<
< DEPLACEMENT ASCENTIONNELLE RECURSIF :
<
E352:    EQU         $
         PSR         A,B,Y,C         < SAVE LE DESCF DU MOT COURANT , ET
                                     < SAVE B=NIVEAU COURANT DE RECUR-
                                     <        SIVITE ,
                                     < ET Y=ADRESSE DU 1ER DESCRIPTEUR
                                     <      DU NIVEAU (B).
                                     < ET C=ADRESSE DU 1ER DESCRIPTEUR
                                     <      DE NIVEAU (B)+1.
         ANDI        FRONT-1         < SUPPRESSION DE LA FRONTIERE
                                     < EVENTUELLE.
         STBY        DESCF,C         < LE MOT COURANT PERD PROVI-
                                     < SOIREMENT SON CARACTERE DE
                                     < FRONTIERE ...
                                     < (EVENTUELLEMENT !!!)
         LR          A,B             < CHANGEMENT DE NIVEAU RECURSIF.
         LR          C,Y             < CHANGEMENT DU DEBUT DU NIVEAU.
         BSR         AEXPRO          < APPEL RECURSIF DE EXPRO.
<
< RETOUR POUR DESCENTE DE NIVEAU :
<
         PLR         A,B,Y,W         < RESTAURATION DU NIVEAU DE
                                     < RECURSIVITE ET DE L'ADRESSE
                                     < DU 1ER DESCRIPTEUR DU NIVEAU.
                                     < ET W=ADRESSE DU 1ER DESCRIPTEUR
                                     <      DE NIVEAU (B)+1.
         STBY        DESCF,W         < LE MOT COURANT RETOUVE EVENTUEL-
                                     < LEMENT SON CARACTERE DE MOT
                                     < FRONTIERE ...
         ANDI        FRONT-1         < A=NIVEAU DE RECURSIVITE DU MOT
                                     < COURANT QUE L'ON ATTRIBUE A
                                     < LA PROPOSITION COURANTE.
         BSR         ASTACK          < STACKAGE DU NIVEAU DE RECUR-
                                     < SIVITE DE LA PROPOSITION.
         XR          Y,C             < C POINTE LE 1ER DESCRIPTEUR
                                     < DU NIVEAU , ET Y POINTE LE 1ER
                                     < DESCRIPTEUR SUR LE QUEL IL
                                     < FAUT ARRETER L'EDITION.
<
< RECHERCHE D'UN <GN> PRECEDANT IMMEDIATEMENT :
<
         LR          W,C             < C POINTE LE 1ER DESCRIPTEUR
                                     < DU NIVEAU SUPERIEUR.
E357:    EQU         $
         LBY         DESCF,C
         CPI         FRONT
         JGE         E860            < ON EST A UNE FRONTIERE.
         CPR         A,B             < SI ON N'EST PAS AU NIVEAU 0 ,
                                     < EST-ON AU NIVEAU COURANT ???
         JNE         E861            < NON , ON CONTINUE A RECULER
                                     < A PRIORI.
E860:    EQU         $
         LBY         DESCS,C         < ACCES A L'EVENTUEL INDICATEUR
                                     < DE DEBUT DE GROUPE.
         CPI         TINT            < EST-CE UNE INTERJECTION ???
         JE          E358            < OUI , ON L'EDITE ...
         CPI         TGN             < EST-CE UN DEBUT DE <GN> ???
         JE          E370            < OUI , ON VA LE MEMORISER.
                                     < SUR LE DEBUT DU <GN>.
E861:    EQU         $
         LR          C,A             < POUR VALIDATION DE LA BASE C.
         CP          ADPHR           < EST-ON SUR LE 1ER DESCRIPTEUR
                                     < DE LA PHRASE ???
         JE          E370            < OK , ON EST AU DEBUT DE PHRASE.
         ADRI        -LDESC,C        < SINON , RETOUR ARRIERE DANS
                                     < LA PHRASE.
         JMP         E357
<
< MEMORISATION DU NIVEAU DE RECURSIVITE DE LA PROPOSITION :
<
E370:    EQU         $
E358:    EQU         $
         LBY         DESCF,C
         CPI         FRONT+1         < ON FAIT MONTER LE CARY SI
                                     < (A)<FRONT+1 , SOIT SI :
                                     < (A)<=FRONT.
         ADCR        B               < ON FAIT +1 SUR LE NIVEAU DE
                                     < RECURSIVITE SI ON N'EST
                                     < PAS A UNE FRONTIERE , OU SI ON
                                     < EST AU NIVEAU 0.
         ADRI        -1,B            < RESTAURE B TEL QU'IL DOIT ETRE ....
         ANDI        FRONT-1         < A=NIVEAU DE RECURSIVITE DU MOT.
         JMP         E872            < VERS LA RECUPERATION ...
<
< BOUCLE DE RECUPERATION D'UNE PROPOSITION :
<
E353:    EQU         $
         CPZ         DESCI,C         < TEST DE FIN DE PHRASE ???
         JL          E351            < OUI , ON FAIT COMME SI ON TROUVAIT
                                     < UNE DESCENTE DE NIVEAU.
         LBY         DESCF,C         < ACCES AU NIVEAU DU MOT COURANT.
         CPI         FRONT           < EST-CE UN MOT FRONTIERE ???
         JGE         E870            < OUI , ON ARRETE LA RECUPERATION.
E872:    EQU         $
         SBR         B,A             < CALCUL DE LA DISTANCE DU NIVEAU
                                     < DU MOT COURANT AU NIVEAU
                                     < COURANT.
         CPI         1
         JG          E355            < LE MOT EST IGNORE : SEULS LES
                                     < MOTS DE MEME NIVEAU , OU DU
                                     < NIVEAU SUPERIEUR SONT
                                     < EMPILES ....
<
< EMPILEMENT DU MOT COURANT DE LA PROPOSITION COURANTE :
<
         LR          C,A             < A=@DESCRIPTEUR DU MOT COURANT.
         BSR         ASTACK          < EMPILEMENT DU MOT COURANT.
E355:    EQU         $
         ADRI        LDESC,C         < PROGRESSION DANS LA PHRASE
                                     < COURANTE.
         CPR         Y,C             < TEST DE FIN DE PROPOSITION.
         JNE         E353            < NON , ON CONTINUE ....
<
< FIN DE LA PROPOSITION COURANTE :
<
E871:    EQU         $
         LAI         FINPRO          < A=<FINPRO>.
         BSR         ASTACK          < EMPILEMENT DE <FINPRO>.
         JMP         EXPRO           < EN CAS DE FIN DE PROPOSITION ,
                                     < ON PASSE AU MOT LA SUIVANT.
<
< CAS DE LA RENCONTRE D'UN MOT FRONTIERE :
<
E870:    EQU         $
         LR          Y,C             < ON SAUTE LE MOT FRONTIERE ,
                                     < AINSI QUE QUE TOUX CEUX QUI
                                     < LE SUIVENT.
         JMP         E871            < VERS LA FIN DE PROPOSITION.
<
< DEPLACEMENT PAR DESCENTE RECURSIVE :
<
E351:    EQU         $
         RSR                         < ON FAIT UN RETOUR POUR EDITER
                                     < LA PROPOSITION QUE L'ON VIENT
                                     < D'ISOLER.
<
<
<        E M P I L E M E N T   M O T
<        D ' U N E   P R O P O S I T I O N  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EMPILE L'ARGUMENT
<                    (A) DANS LA PILE 'PROPOS' , ET
<                    FAIT PROGRESSER LE POINTEUR DE
<                    PILE 'APR'.
<
<
<        ARGUMENT :
<                    A=@DESCRIPTEUR DE MOT , OU
<                     =<FINPRO> , OU
<                     =<FINPHR>.
<
<
STACK:   EQU         $
         STA         &APR            < EMPILEMENT DE L'ARGUMENT.
         IC          APR             < PROGRESSION DU POINTEUR DE PILE.
         RSR
         PAGE
<
<
<        G R O U P E   S Y N T A G M A T I Q U E  :
<
<
<        FONCTION :
<                      MEMORISER DANS LE DESCS DU MOT
<                    COURANT POUR 'TYPGR' , ET DANS LE
<                    DESCS DU MOT PRECEDENT POUR 'TYPGRP'
<                    UN INDICATEUR DE DEBUT DE GROUPE
<                    SYNTAGMATIQUE.
<
<
<        ARGUMENT :
<                    A=<ARGUMENT1>=TYPE DU GROUPE.
<
<
TYPGR:   EQU         $
         STBY        DESCS,C
         RSR                         < AIN'T IT HARD ????
TYPGRP:  EQU         $
         STBY        DESCS-LDESC,C
         RSR                         < MEME REMARQUE ...
<
<
<        A N N U L A T I O N   I N D I C A T E U R  :
<
<
<        FONCTION :
<                      ANNULE LES EFFETS DE 'TYPGR' LORS
<                    DES RETOURS EN ARRIERE DANS
<                    L'ANALYSE.
<                    TYPERR : SUR LE MOT COURANT ,
<                    TYPERP : SUR LE MOT PRECEDENT.
<
<
<        ARGUMENT :
<                    A=<ARGUMENT1>=0.
<
<
<        RESULTAT :
<                    B=5#0 (APPEL PAR 'TACTER').
<
<
TYPERR:  EQU         $
         STBY        DESCS,C         < RAZ INDICATEUR DE DEBUT GROUPE.
         LBI         5               < RETOUR EN ERREUR.
         RSR
TYPERP:  EQU         $
         STBY        DESCS-LDESC,C
         LBI         5
         RSR
         PAGE
<
<
<        R E E C R I T U R E   D E S
<        P R O P O S I T I O N S   R E L A T I V E S  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST CHARGEE D'UN
<                    TRAVAIL SEMI-SEMANTIQUE ; ELLE DOIT
<                    METTRE CHAQUE PROPOSITION ISOLEE
<                    SOUS LA FORME SUIVANTE :
<                    <SUJET>((<PRO.REL>)<OPERATEUR>(<OBJET>)) ,
<                    PUIS :
<                    <SUJET>(<OPERATEUR>(<OBJET>))(<PRO.REL>) ,
<                    EN TENANT COMPTE DES ECRITURES
<                    SPECIFIQUES A CHAQUE PRONOM RELATIF ,
<                    ET EN PARTICULIER A 'QUI' ET 'QUE'.
<                      <N1> ET <N2> DESIGNANT DES <GN> ,
<                    ET <V> UN <GV> , ON A LES REGLES
<                    DE REECRITURE SUIVANTE :
<
<                    <N1>'QUI'<V><N2>--><N1><V><N2> ,
<                    <N1>'QUE'<V><N2>--><N2><V><N1> ,
<                    <N1>'QUE'<N2><V>--><N2><V><N1>.
<
<
<        ARGUMENT :
<                    A=@NIVEAU DE RECURSIVITE DE LA
<                      PROPOSITION (A STACKER...).
<
<
REC:     EQU         $
         PSR         X
<
< NETTOYAGE DU DESCRIPTEUR DE PROPOSITION :
<
         LB          APR             < B=POINTEUR DE PILE.
         SBT         0+16            < POSITIONNEMENT DE L'INDEX.
         STB         APR             < APR DEVIENT UN RELAI INDEXE.
         LXI         LREL-1
E802:    EQU         $
         STZ         &APR            < REMISE A 0.
         JDX         E802
         RBT         0+16            < SUPPRESSION DE L'INDEX.
         STB         APR             < RESTAURE LE POINTEUR DE PILE.
<
< STACKAGE DE LA PROPOSITION :
<
         BSR         ASTACK
<
< PREPARATION DE LA REECRITURE :
<
         LR          A,W             < W BASE LE NIVEAU DE RECUR-
                                     < SIVITE DE LA PROPOSITION.
         LA          APR
         LR          A,C
         ADRI        -2,C            < C BASE LE DESCRIPTEUR DE
                                     < PROPOSITION RELATIVE -2.
         ADRI        LREL-1,A
         STA         APR             < RESERVATION DE LA MEMOIRE
                                     < DESTINEE AU DESCRIPTEUR DANS
                                     < LA PILE.
         LYI         0               < Y=0=PAS DE GROUPE CONJONCTIF
                                     < EN COURS.
<
< PARCOURS DE LA PROPOSITION A LA RECHERCHE DES
< DEBUTS DE GROUPE SYNTAGMATIQUES :
<
E804:    EQU         $
         ADRI        1,W             < PASSAGE AU MOT SUIVANT DE
                                     < LA PROPOSITION.
         LA          0,W             < A=@DESCRIPTEUR DU MOT COURANT.
         JAE         E805            < EN FAIT : FIN DE PROPOSITION.
         LR          W,B             < SAVE W DANS B.
         LR          A,W             < W=@DESCRIPTEUR DU MOT COURANT.
         LBY         DESCS,W         < ACCES A L'INDICATEUR DE DEBUT
                                     < DE GROUPE SYNTAGMATIQUE.
         JAE         E806            < CE N'EST PAS UN DEBUT DE GROUPE.
         CPI         TCONJ           < OUI , ALORS EST-CE UN 'TCONJ' ???
         JE          E809            < OUI , LES CONJONCTIONS NE SONT
                                     < PAS TRAITEES LORS DE CETTE
                                     < PASSE.
         CPZR        Y               < Y-A-T'IL UN GROUPE CONJONCTIF
                                     < EN COURS ???
         JE          E840            < NON , DONC LE DEBUT DE GROUPE
                                     < SUR LEQUEL ON EST DOIT ETRE PRIS.
<
< CAS DES 'TCONJ' EN COURS :
<
         ADRI        1,Y             < COMPTAGE DES MOTS RECUPERES A LA
                                     < SUITE D'UN 'TCONJ'.
         CPBY        1,C             < LE GROUPE PRECEDENT EST-IL
                                     < DE MEME NATURE QUE LE GROUPE
                                     < QUI COMMENCE ???
         JE          E806            < OUI , LE GROUPE QUI COOMENCE
                                     < ICI EST DONC IGNORE.
         LYI         0               < SI LES 2 GROUPES DIFFERENT ,
                                     < ON MET FIN AU 'TCONJ' EN COURS ,
                                     < ET ON COMMENCE UN NOUVEAU
                                     < GROUPE.
<
< CAS DES DEBUTS DE GROUPE TGV/TGN/TINT/TREL :
<
E840:    EQU         $
         ADRI        2,C             < PROGRESSION DE LA BASE DE
                                     < GROUPE DANS LE DESCRIPTEUR.
         STBY        1,C             < L'OCTET2 RECOIT L'INDICATEUR
                                     < DE DEBUT DE GROUPE.
         CPI         TREL            < EST-CE UN GROUPE 'TREL' ???
         LAI         1               < NON A PRIORI (1=VALEUR
                                     < INITIALE DU COMPTEUR OCTET3).
         JNE         E807            < CAS DES GROUPE TGN/TGV/TINT.
         LA          DESCF,W         < CAS DES GROUPES 'TREL'.
         ANDI        'FF             < A=DISCRIMINANT DES PRONOMS
                                     < RELATIFS.
E807:    EQU         $
         OR          1,C             < CONCATENATION AVEC L'INDICATEUR
                                     < DE DEBUT DE GROUPE (OCTET2).
         STA         1,C             < MISE EN PLACE :
                                     < OCTET2=INDICATEUR DEBUT GROUPE ,
                                     < OCTET3=COMPTEUR INITIAL DES
                                     <        MOTS DU GROUPE , OU
                                     <        DISCRIMINANT SI 'TREL'.
         STB         0,C             < LE MOT0 RECOIT LE RELAI DE
                                     < DEBUT DE GROUPE (=@@MOT DE
                                     < DEBUT DU GROUPE).
<
< PASSAGE AU MOT SUIVANT :
<
E808:    EQU         $
         LR          B,W             < RESTAURE W.
         JMP         E804            < (S'IL EXISTE....).
<
< CAS DES GROUPES CONJONCTIFS :
<
E809:    EQU         $
         LYI         TCONJ           < Y=TCONJ#0 : POUR MEMORISER
                                     < LE DEBUT DU GROUPE.
<
< CAS DES MOTS QUI NE SONT PAS A
< UN DEBUT DE GROUPE :
< (OU DANS UN GROUPE IDENTIQUE AU
< PRECEDENT ET SEPARE PAR UN 'TCONJ').
<
E806:    EQU         $
         IC          1,C             < ON SE CONTENTE DE LES COMPTER.
         JMP         E808            < VERS L'ACCES AU MOT SUIVANT.
<
<        R E E C R I T U R E   D E   L A   P R O P O S I T I O N  :
<
E805:    EQU         $
         LR          Y,A
         CPI         TCONJ
         JNE         E876            < OK , IL N'Y A PAS DE 'TCONJ'
                                     < EN COURS , OU BIEN AU MOINS UN
                                     < GROUPE LE SUIVAIT.
         DC          1,C             < SINON , 'TCONJ' SE TROUVAIT
                                     < SEUL EN BOUT DE PROPOSITION ,
                                     < ON LE SUPPRIME DONC DU DERNIER
                                     < GROUPE.
E876:    EQU         $
         LA          APR
         LR          A,C
         ADRI        -LREL+1,C       < REINITIALISATION DE C SUR LA
                                     < 1ERE ENTTREE DU DESCRIPTEUR.
         LBY         QUIQUE+1,C      < ACCES AU DEBUT DE GROUPE
                                     < 'TREL' PRESUME ...
         CPI         TREL            < EST-CE BIEN UN 'TREL' ????
         JNE         E810            < NON RIEN A FAIRE ....
<
< CAS D'UNE VRAIE PROPOSITION RELATIVE :
<
         LA          QUIQUE+1,C
         ANDI        'FF             < ACCES AU DISCRIMINANT.
         JAE         E813            < CE N'EST PAS 'QUI'/'QUE'/...
<
< CAS DES PRONOMS 'QUI'/'QUE'/... :
<
         CPI         TQUI            < EST-CE 'QUI' ??
         JE          E813            < C'EST 'QUI'.
         CPI         TQUE            < EST-CE 'QUE' ????
         JNE         $               < E R R E U R   A N A L Y S E  ....
<
< CAS DU 'QUE' :
<
         LA          ALPHA,C
         LB          ALPHA+1,C
         PSR         A,B             < SAUVEGARDE DE <ALPHA> DANS LA
                                     < PILE D'ANALYSE.
         LX          BETA,C
         LY          BETA+1,C        < (X,Y)=<BETA> PRESUME.
         LBY         GVREL+1,C       < ACCES A L'INDICATEUR DE DEBUT
                                     < DE GROUPE DE GVREL.
         CPI         TGV             < EST-CE BIEN 'TGV' ???
         JE          E812            < OUI , OK , ON A DANS L'ORDRE :
                                     < <GV><BETA>.
<
< CAS OU L'ON A :    'QUE'<BETA><GV> :
<
         LA          GVREL,C
         LB          GVREL+1,C       < (A,B)=<BETA> REEL , ET
                                     < (X,Y)=<GV> REEL.
         XR          A,X             < ECHANGE DE <BETA>
         XR          B,Y             < ET <GV>.
         STA         GVREL,C         < MISE EN PLACE DU VRAI <GV>.
         STB         GVREL+1,C       < (A LA PLACE DE <BETA>).
<
< REECRITURE :
<                    <ALPHA>'QUE'<GV><BETA>--><BETA>'QUE'<GV><ALPHA>
<
E812:    EQU         $
         STX         ALPHA,C         < <BETA> ECRASE <ALPHA>.
         STY         ALPHA+1,C
         PLR         A,B             < RESTAURE LE VRAI <ALPHA>.
         STA         BETA,C          < <ALPHA> REMPLACE <<BETA>.
         STB         BETA+1,C
<
< MISE SOUS LA FORME <SUJET>(<OPERATEUR>(<OBJET>))(<PRO.REL>) :
<
E813:    EQU         $
         LA          QUIQUE,C
         LB          QUIQUE+1,C
         PSR         A,B,C           < SAVE <PRO.REL> DANS LA PILE
                                     < D'ANALYSE.
         XR          K,C             < SAVE K DANS C.
         ADRI        LREL-2-1,K      < K POINTE BETA+1.
         PLR         A,B,X,Y         < RECUPERATION DE <GV><BETA>.
         ADRI        -2,K            < DEPLACEMENT DE K.
         PSR         A,B,X,Y         < MISE DE <GV><BETA> EN
                                     < <OPERATEUR><OBJET>.
         LR          C,K             < RESTAURE LA PILE K.
         PLR         A,B,C           < RESTAURATION DE C ET <PRO.REL>.
         STA         BETA,C          < MISE DU <PRO.REL> EN QUEUE
         STB         BETA+1,C        < DU DESCRIPTEUR.
<
<        ON A DONC MAINTENANT :
<                    <SUJET>(<OPERATEUR>(<OBJET>))(<PRO.REL>).
<
< SORTIE DE LA ROUTINE :
<
E810:    EQU         $
         PLR         X               < RESTAURE X.
         RSR                         < ET C'EST TOUT ....
         PAGE
<
<
<        T E S T   S E P A R A T E U R   D E V A N T   U N E
<        C O N J O N C T I O N   D E   C O O R D I N A T I O N  :
<
<
<        FONCTION :
<                      CETTE ROUTINE APPELEE PAR LA GRAMMAIRE
<                    DE RECONNAISSANCE DES CONJONCTIONS
<                    DE COORDINATION , LAISSE LE NIVEAU DE
<                    RECURSIVITE INCHANGE , SAUF SI LE SEPARATEUR
<                    PRECEDANT LA CONJONCTION EST DE TYPE 'SEP2'.
<
<
<        ARGUMENTS :
<                    A='FF ,
<                    C=@DESCRIPTEUR SUIVANT LA CONJONCTION.
<
<
TSEPAC:  EQU         $
         AND         DESCS-LDESC,C   < A=TYPE DU SEPARATEUR PRECEDANT
                                     < LA CONJONCTION.
         CPI         SEP2            < EST-IL DE TYPE 'SEP2' ???
         JNE         E720            < NON , IL EST IGNORE.
         LAI         '7F             < CAS DES TYPE 'SEP2' :
         STBY        -2*LDESC+DESCF,C  < ON DEMANDE UN RETOUR AU
                                       < NIVEAU DE RECURSIVITE DE BASE.
E720:    EQU         $
         RSR
         PAGE
<
<
<        A N A L Y S E U R   S Y N T A X I Q U E  :
<
<
<        FONCTION :
<                      CETTE ROUTINE EST LA ROUTINE
<                    PRINCIPALE D'ANALYSE SYNTAXIQUE
<                    RECURSIVE ; ELLE S'APPUIE SIMULTA-
<                    NEMENT SUR LA GRAMMAIRE DU FRANCAIS ,
<                    SUR LA LISTE LEXICOGRAPHIQUE DE LA
<                    PHRASE A ANALYSER.
<
<
<        UTILISATION DES REGISTRES :
<                    W : BASE LE NOEUD COURANT DE LA GRAMMAIRE ,
<                        OU L'ADRESSE DE L'ADRESSE DU SUCCESSEUR
<                        COURANT DU NOEUD COURANT.
<                    C : BASE LA LISTE DESCRIPTIVE  ET
<                        LEXICOGRAPHIQUE DE LA PHRASE.
<                    B : CONTIENT LA CONDITION COURANTE
<                        DE PARCOURS DE LA GRAMMAIRE :
<                                    0 : OK ,
<                                    1 : MOT PRECISE NON TROUVE ,
<                                        OU TERMINAL NON RECONNU
<                                        (AU POINT DE VUE DES CATEGO-
<                                        RIES GRAMMATICALES).
<                                    2 : FIN DE LISTE SUCCESSEURS ,
<                                    3 : PAS DE FIN DE PHRASE.
<                                    4 : ERREUR DE SEPARATEUR.
<                                    5 : CODE DE 'TYPERR'.
<
<
<        ARGUMENT :
<                    W=ADRESSE DU NOEUD COURANT DE LA GRAMMAIRE ,
<                    C=@DESCRIPTEUR COURANT DE LA PHRASE.
<                    A=EN GENERAL CONTIENT L'ADRESSE DE
<                      L'ADRESSE DU NOEUD COURANT DANS UNE
<                      LISTE DE SUCCESSEURS.
<
<
<        RESULTAT :
<                    B=CONDITION DE RETOUR DE LA GRAMMAIRE ,
<                    C=LA VALEUR ARGUMENT DANS LE CAS D'UN
<                      RETOUR EN ERREUR ,
<                      ET UNE VALEUR EN GENERALE DIFFERENTE
<                      (DUE AU PARCOURS DE LA PHRASE) EN CAS DE RETOUR
<                      OK (B=0).
<
<
NOEUD:   EQU         $
         PSR         A,W             < BEGIN RECURSIVITE.
         PSR         C               < LA BASE C EST SAUVEGARDEE A
                                     < PART AFIN DE POUVOIR CHOISIR
                                     < AU RETOUR ENTRE LA RESTAURER
                                     < OU PAS ....
         LBI         0               < CONDITION OK A PRIORI.
<
< ACCES AU NOEUD COURANT :
<
         LBY         TYPE,W
         CPI         TYPMAX          < VALIDATION DU PARCOURS DE LA
                                     < GRAMMAIRE ....
         JL          $+2             < OK.
         ACTD                        < E R R E U R   A N A L Y S E ...
         LR          A,X             < X=TYPE DU NOEUD COURANT.
<
< TRANSMISSION DE <ARGUMENT1> AUX TYPES :
<
         LA          TYPE,W
         ANDI        'FF             < A=<ARGUMENT1>.
         BR          &ASEXEC         < AIGUILLAGE SPECIFIQUE REALISANT
                                     < LE TYPE DU NOEUD.
<
<        R E T O U R   D E   L A   R E A L I S A T I O N
<                    D E S   T Y P E S  :
<
LOOPN:   EQU         $
         CPZR        B               < TEST DES CONDITIONS DE RETOUR.
         JE          GETS            < LE RETOUR DU TYPE ETANT OK ,
                                     < ON VA ESSAYER DE PARCOURIR LE
                                     < CHEMIN ISSU DE CE NOEUD ET ALLANT
                                     < VERS L'UN DESSUCCESSEURS.
<
<        R E T O U R S   E N   E R R E U R  :
<
RETER:   EQU         $
         PLR         C               < EN CAS D'UN RETOUR EN ERREUR ,
                                     < ON RESTAURE LA BASE C DONNEE
                                     < COMME ARGUMENT D'ENTREE.
<
<        R E T O U R   D E   L ' A N A L Y S E  :
<
RETURN:  EQU         $
         PLR         A,W             < FIN DE LA RECURSIVITE COURANTE.
         RSR                         < RETOUR AVEC LA CONDITION (B).
<
<        R E T O U R   O K  :
<
RETOK:   EQU         $
         ADRI        -1,K            < ON DECREMENTE LE REGISTRE K ,
                                     < AFIN DE NE PAS DEPILER LA BASE
                                     < C ARGUMENT D'ENTREE , AFIN DE
                                     < TRANSMETTRE LA VALEUR TELLE
                                     < QU'ELLE VIENT D'ETRE EVENTUELLE-
                                     < MENT MODIFIEE ...
         JMP         RETURN          < VERS LA SORTIE DE L'ANALYSEUR.
<
<        A C C E S   A U X   S U C C E S S E U R S  :
<
GETS:    EQU         $
         ADRI        SUCCES,W        < POSITIONNEMENT DE LA BASE
                                     < W SUR LE 1ER NOEUD SUCCESSEUR
                                     < DU NOEUD COURANT.
<
< BOUCLE DE PARCOURS DE LA LISTE
< DES NOEUDS SUCCESSEURS :
<
E100:    EQU         $
         LA          0,W             < RECUPERATION DE L'ADRESSE
                                     < PRESUMEE D'UN NOEUD SUCCESSEUR.
         JAE         E101            < ERREUR : ON EST ARRIVE AU BOUT
                                     < DE LA LISTE DES SUCCESSEURS.
         XR          A,W             < OK , ON A TROUVE UN SUCCESSEUR :
                                     < W=@DU NOEUD SUCCESSEUR ,
                                     < ET A=SAVE LE REGISTRE W
                                     < CONTENANT L'ADRESSE DE L'ADRESSE
                                     < DU SUCCESSEUR.
         BSR         ANOEUD          < VERS LE TRAITEMENT DU NOEUD
                                     < SUCCESSEUR COURANT.
<
<        R E T O U R   D ' U N   S U C C E S S E U R  :
<
         LR          A,W             < RESTAURE LE REGISTRE W.
         CPZR        B               < TEST DES CONDITIONS DE RETOUR
                                     < DU NOEUD SUCCESSEUR.
         JE          RETOK           < OK , ON FAIT UN RETOUR OK.
         ADRI        1,W             < DANS LE CAS D'UN RETOUR EN ERREUR
                                     < DU NOEUD SUCCESSEUR , ON TENTE DE
                                     < PASSER SUR LE NOEUD SUCCESSEUR
                                     < SUIVANT.
         JMP         E100
<
< CAS OU IL N'Y A PLUS DE NOEUDS SUCCESSEURS :
<
E101:    EQU         $
         LBI         2               < B=2#0 : CODE D'ERREUR CORRESPON-
                                     < DANT AU FAIT QU'ON EST ARRIVE
                                     < AU BOUT DE LA LISTE.
         JMP         RETER           < VERS UN RETOUR EN ERREUR.
<
<
<        T R A I T E M E N T   D E S   T Y P E S   D E   N O E U D S  :
<
<
<        ARGUMENT :
<                    A=<ARGUMENT1>.
<
<
<        N O E U D   V I D E   N O N   T E R M I N A L  :
<
VIDE:    EQU         GETS            < VERS L'ACCES AUX SUCCESSEURS.
<
<        N O E U D   V I D E   T E R M I N A L  :
<
<        FONCTION :
<                      DANS LE CAS OU <ARGUMENT1> EST
<                    DIFFERENT DE 0 , ELLE L'AJOUTE A
<                    L'OCTET0 DU DESCF DU DESCRIPTEUR
<                    LEXICOGRAPHIQUE PRECEDENT.
<
FIN:     EQU         $
         JAE         RETOK           < <ARGUMENT1>=0 : RIEN A FAIRE ,
                                     < VERS UN RETOUR OK.
         LR          A,X             < SINON : X=<ARGUMENT1>.
         LBY         DESCF-LDESC,C   < A=OCTET0 DU DESCF DU DESCRIPTEUR
                                     < LEXICOGRAPHQIE PRECEDENT.
         ADR         X,A             < AUQUEL ON AJOUTE <ARGUMENT1>.
         STBY        DESCF-LDESC,C   < ET QUE L'ON MET A JOUR ....
         JMP         RETOK           < PUIS ON FAIT UN RETOUR OK ...
<
<        A C T I O N   N O N   T E R M I N A L E  :
<
ACTNT:   EQU         $
         BSR         ARG2,W          < APPEL DE LA ROUTINE SPECIFI-
                                     < QUE AVEC : A=<ARGUMENT1>.
         JMP         LOOPN           < VERS LE TEST DE LA CONDITION
                                     < DE RETOUR ET L'ACCES EVENTUEL
                                     < AUX SUCCESSEURS.
<
<        A C T I O N   T E R M I N A L E  :
<
ACTER:   EQU         $
         BSR         ARG2,W          < APPEL DE LA ROUTINE SPECIFI-
                                     < QUE AVEC : A=<ARGUMENT1>.
<
<        T E S T   D E   R E T O U R  :
<
RETEST:  EQU         $
         CPZR        B               < TEST DE LA CONDITION B.
         JE          RETOK           < OK , ON FAIT UN RETOUR OK.
         JMP         RETER           < ERREUR , RETOUR EN ERREUR.
<
<        N O E U D   N O N   T E R M I N A L  :
<
<        FONCTION :
<                      CE TYPE DE NOEUD CORRESPOND AUX VLASSES
<                    GRAMMATICALES DU TYPE <GROUPE NOMINAL> ,
<                    <GROUPE VERBAL> ,....
<                      DE PLUS SI <ARGUMENT1> EST DIFFERENT
<                    DE 0 , ELLE LE MET EN OCTET0 DU
<                    DESCF DE L'AVANT-DERNIER DESCRIPTEUR
<                    LEXICOGRAPHIQUE POUR NTERM ('TNT') ,
<                    ET DU DESCRIPTEUR LEXICO. COURANT
<                    POUR NTERMC ('TNTC').
<
NTERMC:  EQU         $
         JAE         E300            < OK , <ARGUMENT1>=0.
         STBY        DESCF,C         < SINON <ARGUMENT1> EST MIS EN
                                     < OCTET0 DU DESCF DU MOT COURANT.
         JMP         E300            < ET C'EST PARTI ...
NTERM:   EQU         $
         JAE         E300            < OK , <ARGUMENT1>=0.
         STBY        -2*LDESC+DESCF,C  < SINON , <ARGUMENT1> EST MIS
                                     < OCTET0 DE L'AVANT-DERNIER DESCRIP
                                     < TEUR LEXICOGRAPHIQUE.
E300:    EQU         $
         LA          ARG2,W          < A=ADRESSE DE LA SOUS-GRAMMAIRE
                                     < APPELEE PAR CE NOEUD NON
                                     < TERMINAL.
         XR          A,W             < W=ADRESSE DU PREMIER NOEUD
                                     < DE LA SOUS-GRAMMAIRE ,
                                     < ET A=SAVE LA VALEUR PRECEDENTE
                                     < DE LA BASE W.
         BSR         ANOEUD          < VERS L'ANALYSE DE LA SOUS-
                                     < GRAMMAIRE.
         LR          A,W             < RESTAURE W=ADRESSE DU NOEUD
                                     < COURANT.
         JMP         LOOPN           < VERS LE TEST DE LA CONDITION
                                     < DE RETOUR ET L'ACCES EVENTUEL
                                     < AUX SUCCESSEURS.
<
<        N O E U D   T E R M I N A L  :
<
<        FONCTION :
<                      CE TYPE DE NOEUD CORRESPOND A LA
<                    RECHERCHE DE MOT DANS LA PHRASE A
<                    ANALYSER POSSEDANT UNE CATEGORIE
<                    GRAMMATICALE DONNE (ET CONTENUE
<                    DANS <ARGUMENT2>).
<
<        A T T E N T I O N  :
<                      'TERMINAL' DESIGNE ICI UN TERMINAL
<                    AU SENS SYNTAXIQUE , ET NON PAS
<                    ADNS LE SENS OU IL UTILSE ICI ,C'EST-A
<                    DIRE 'BOUT DE CHEMIN' DANS LA
<                    GRAMMAIRE.
<
TERMIN:  EQU         $
         CPZ         DESCI,C         < EST-ON EN BOUT DE PHRASE ????
         JL          E111            < OUI , FIN DE PHRASE , LE MOT
                                     < CHERCHE N'Y EST SUREMENT PAS ....
         LX          ARG2,W          < X=CATEGORIE GRAMMATICALE
                                     < RECHERCHEE POUR LE MOT COURANT
                                     < DE LA PHRASE.
         LA          DESCC,C         < ACCES AUX CATEGORIES GRAMMA-
                                     < TICALES DU MOT COURANT.
         IF          NCATG4-4,X100,X100,
         LB          DESCC+1,C       < CATEGORIES GRAMMATICALES DU
                                     < MOT COURANT.
X100:    VAL         0
         TBT         0,X             < LE MOT COURANT POSSEDE-T'2L
                                     < LA CATEGORIE RECHERCHEE ????
         JNC         E111            < NON , ON VA DONC FAIRE UN RETOUR
                                     < EN ERREUR.
         LBY         DESCF,C         < SAVE L'OCTET0 DE DESCF.
         STX         DESCF,C         < SAVE LA CATEGORIE GRAMMATICALE
                                     < RECONNUE POUR LE MOT COURANT
                                     < DE <PHRASE> ; CE SAVE PEUT ETRE
                                     < PROVISOIRE , CAR LA CATEGORIE
                                     < REELLE DU MOT COURANT PEUT
                                     < ENCORE CHANGER ....
         STBY        DESCF,C         < RESTAURE L'OCTET0 DE DESCF.
         LBI         0               < SI LE MOT COURANT POSSEDE LA
                                     < CATEGORIE RECHERCHEE , ON FAIT
                                     < UN RETOUR OK : B=0.
<
<        P R O G R E S S I O N   D A N S   L A   P H R A S E  :
<
PROGRE:  EQU         $
         ADRI        LDESC,C         < PROGRESSION DE LA BASE DE LA
                                     < LISTE DESCRIPTIVE DE LA PHRASE.
         JMP         GETS            < VERS LA RECHERCHE DES SUCCES-
                                     < SEURS (SANS TESTER B , PUISQU'
                                     < ON LE SAIT NUL....).
<
<        R E C H E R C H E   M O T   S P E C I F I E  :
<
<        FONCTION :
<                      CE TYPE PERMET DE RECONNAITRE DES
<                    MOTS PRECISES SPECIFIQUEMENT , TELS
<                    'QUE' , 'NE' , 'PAS' ,...
<
<        ARGUMENT :
<                    A=<ARGUMENT1>=LONGUEUR DU MOT RECHERCHE , ET
<                      EVENTUELLEMENT UN DISCRIMINANT DANS LES
<                      BITS8-11 (CF. TQUI/TQUE/...).
<
MOTP:    EQU         $
         LY          DESCI,C         < Y=INDEX PRESUME DU 1ER MOT
                                     < CARACTERE COURANT DE LA PHRASE.
         CPZR        Y               < EST-ON EN BOUT DE PHRASE ????
         JL          E111            < OUI , DONC LE MOT RECHERCHE
                                     < N'Y EST PAS ....
         ANDI        'F              < A=LONGUEUR DU MOT SPECIFIE.
         CP          DESCL,C         < ET COMPARAISON A LA LONGUEUR DU
                                     < MOT COURANT DE LA PHRASE.
         JNE         E111            < ON N'EST PAS EN PRESENCE DU MOT
                                     < SPECIFIE , PUISQUE LES LONGUEURS
                                     < DIFFERENT.
         LR          A,B             < B=LONGUEUR DU MOT RECHERCHE.
         LXI         0               < X=INDEX DU MOT RECHERCHE.
<
< BOUCLE DE RECONNAISSANCE :
<
E110:    EQU         $
         LBY         &ARG2,W         < A=UN CARACTERE DU MOT RECHERCHE.
         XR          X,Y             < ECHANGE DES INDEX.
         CPBY        &APHR           < ET COMPARAISON A UN CARACTERE
                                     < DU MOT COURANT DE LA PHRASE.
         XR          X,Y             < RE-ECHANGE DES INDEX.
         JNE         E111            < ON N'EST PAS EN PRESENCE DU MOT
                                     < SPECIFIE.
         ADRI        1,X             < PROGRESSION INDEX MOT PRECISE.
         ADRI        1,Y             < PROGRESSION INDEX MOT ARGUMENT.
         ADRI        -1,B            < S'IL Y A IDENTITE , DECOMPTE
                                     < DES CARACTERES ENCORE A RECON-
                                     < NAITRE.
         CPZR        B               < EST-CE FINI ???
         JNE         E110            < NON , ON CONTINUE.
<
< CAS OU ON A TROUVE LE MOT SPECIFIE (A NOTER : B=0) :
<
         LA          DESCF,C
         ANDI        'FF00           < SUPPRESSION DE L'OCTET1.
         LR          A,X             < ET SAVE L'OCTET0 DANS X.
         LA          TYPE,W
         ANDI        'F0             < RECUPERATION DU DISCRIMINANT
                                     < EVENTUEL (TQUI/TQUE/...).
         ORR         X,A             < REGROUPEMENT DES 2 OCTETS.
         STA         DESCF,C         < ET RANGEMENT DE DESCF.
         JMP         PROGRE          < VERS LA PROGRESSION DANS LA
                                     < PHRASE , PUIS LA RECHERCHE DES
                                     < SUCCESSEURS.
<
< CAS DES MOTS SPECIFIES NON TROUVES ,
< OU DES TERMINAUX DE CATEGORIES
< NON RECONNUES :
<
E111:    EQU         $
         LBI         1               < CODE DE L'ERREUR.
         JMP         RETER           < VERS UN RETOUR EN ERREUR.
<
<        T E S T   N O N   T E R M I N A L
<        D E   F I N   D E   P H R A S E  :
<
FINPH:   EQU         $
         CPZ         DESCI,C         < EST-ON EN FIN DE PHRASE ???
         JL          GETS            < OUI , ALLONS VERS LA RECHERCHE
                                     < DES SUCCESSEURS EVENTUELS ;
                                     < A NOTER : B=0 !!!
E120:    EQU         $               < ENTRY DE TEST DE NON-FIN DE
                                     < PHRASE.
         LBI         3               < SI ON N'EST PAS EN FIN DE PHRASE ,
                                     < ON CONSIDERE CELA COMME UNE
                                     < ERREUR (B=3).
         JMP         RETER           < VERS UN RETOUR EN ERREUR ...
<
<        T E S T   N O N   T E R M I N A L   D E
<        N O N - F I N   D E   P H R A S E  :
<
FINNPH:  EQU         $
         CPZ         DESCI,C         < EST-ON EN FIN DE PHRASE ????
         JGE         GETS            < NON , ALLONS VERS LA RECHERCHE
                                     < DES SUCCESSEURS EVENTUELS ;
                                     < A NOTER : B=0 !!!
         JMP         E120            < SI ON EST EN FIN DE PHRASE , ON
                                     < CONSIDERE CELA COMME UNE
                                     < ERREUR DE CODE B=3.
<
<        T E S T   N O N - T E R M I N A L
<        D E   S E P A R A T E U R  :
<
RTSEP:   EQU         $
         LA          DESCS,C         < ACCES AU SEPARATEUR PRECEANT
                                     < LE MOT COURANT.
         ANDI        'FF             < PAR PRUDENCE , ON NE SAIT JAMAIS!
         CP          ARG2,W          < EST-CE LE SEPARATEUR RECHERCHE ???
         JE          GETS            < OUI , C'EST BON ; A NOTER : B=0.
<
< CAS DES ERREURS DE SEPARATEURS :
<
E450:    EQU         $
         LBI         4               < CODE D'ERREUR : B=4.
         JMP         RETER           < VERS UN RETOUR EN ERREUR ...
<
<        T E S T   N O N   T E R M I N A L
<        D E   N O N - S E P A R A T E U R  :
<
RTNSEP:  EQU         $
         LA          DESCS,C         < ACCES AU SEPARATEUR PRECEDANT
                                     < LE MOT COURANT.
         ANDI        'FF             < TOUJOURS PAR PRUDENCE ...
         CP          ARG2,W          < EST-CE LE NON-SEPARATEUR CHERCHE?
         JNE         GETS            < OUI , OK ; A NOTER : B=0.
         JMP         E450            < NON ERREUR DE SEPARATEUR ...
         PAGE
<
<
<        A N A L Y S E U R   S Y N T A X I Q U E
<        D U   F R A N C A I S  :
<
<
<        E N T R Y  :
<
<
         WORD        DPHR            < VALEUR INITIALE DE LA BASE C ,
                                     < SUR LE 1ER DESCRIPTEUR LEXI-
                                     < COGRAPHIQUE.
         WORD        LOC+'80         < VALEUR INITIALE DE LA BASE L.
         WORD        AXIOME          < VALEUR INITIALE DE LA BASE
                                     < W SUR L'AXIOME DE LA GRAMMAIRE.
SYNTAX:  EQU         $
         LRP         K
         ADRI        -1,K
         LR          L,B             < B=BASE L D'APPEL DE 'SYNTAX' ,
                                     < POUR DISCRIMINER LES APPELS
                                     < PAR GE , DES APPELS PAR LE
                                     < CCI (!DEBUG OU !<R/C>).
         PLR         C,L,W           < INITIALISATION DE C , L ET W.
         LA          APILE
         LR          A,K             < INITIALISATION DE LA PILE K.
<
< INITIALISATION DE L'ANALYSEUR :
<
         LAI         6
         STBY        DEMSGN          < MISE DE DEMSGN EN MODE 'LOAD
                                     < SOUS :SYS'.
<
<        M O D E   D ' A P P E L  :
<
         ADRI        ZERO-PSYNT,B    < B=0 SI APPEL APR LE CCI.
         CPZR        B               < TEST DU MODE D'APPEL ???
         JNE         E730
         BR          GOBACK          < RIEN A FAIRE SI APPEL PAR CCI.
E730:    EQU         $
<
<        A N A L Y S E   S Y N T A X I Q U E  :
<
         BSR         ANOEUD          < LANCEMENT DE L'ANALYSE SYNTAXIQUE
                                     < SUR L'AXIOME DE LA GRAMMAIRE.
<
<        R E T O U R   D ' A N A L Y S E  :
<
         LY          ADPHR           < Y=@1ER DESCRIPTEUR LEXICO-
                                     < GRAPHIQUE DE LA PHRASE.
         LR          Y,C             < REPOSITIONNEMENT DE LA BASE C
                                     < SUR LE 1ERE DESCRIPTEUR.
         LXI         CONDRT
         STB         &ADUMY          < TRANSMISSION DES CONDITIONS
                                     < DE RETOUR DE L'ANALYSE.
         PSR         B               < SAVE LES CONDITIONS DE RETOUR.
         CPZR        B               < TEST DES CONDITIONS DE RETOUR.
         JNE         E400            < CAS D'UN RETOUR EN ERREUR.
<
<        G E N E R A T I O N   D E S   N I V E A U X
<        D E   R E C U R S I V I T E  :
<
E710:    EQU         $               < RETOUR AU NIVEAU DE BASE.
         LXI         0               < X=NIVEAU COURANT DE RECURSIVITE.
<
< BOUCLE DE CALCUL DES NIVEAUX DE RECURISVITE DU DISCOURS :
<
E401:    EQU         $
         CPZ         DESCI,C         < EST-CE LA FIN DE PHRASE ???
         JL          E402            < OUI , C'EST FINI ...
         LBY         DESCF,C
         CPI         FRONT           < EST-ON A UNE FRONTIERE ???
         JE          E851            < OUI , LE NIVEAU EST INCHANGE ,
                                     < ET ON LAISSE LA FRONTIERE.
         LA          DESCF,C         < POUR ACCES A L'OCTET0 DU
                                     < DESCF DU MOT COURANT.
         SARD        8+16            < SINON , B=-AMPLITUDE DE CHANGE-
                                     < MENT DE NIVEAU DE RECURSIVITE
                                     < DU MOT SUIVANT PAR RAPPORT AU
                                     < MOT COURANT.
E403:    EQU         $
         LR          X,A             < A=NIVEAU COURANT DE RECURSIVITE.
         SBR         B,X             < CALCUL DU NOUVEAU NIVEAU DE
                                     < RECURSIVITE POUR LE MOT SUIVANT.
E850:    EQU         $               < ENTRY POUR FRONTIERE.
         STBY        DESCF,C         < QUE L'ON MET EN OCTET0 DU
                                     < DESCF DU MOT COURANT.
         ADRI        LDESC,C         < PASSAGE AU MOT SUIVANT.
         CPZR        X               < RETOUR AU NIVEAU DE BASE ???
         JL          E710            < OUI : CAS DES CONJONCTIONS DE
                                     < COORDINATION PRECEDEES PAR UN
                                     < SEPARATEUR DE TYPE 'SEP2'.
         JMP         E401
<
< CAS DES FRONTIERES :
<
E851:    EQU         $
         ORR         X,A             < LE MOT COURANT EST MIS AU NIVEAU
                                     < DE RECURSIVITE COURANT , MAIS ,
                                     < ON LAISSE LA FRONTIERE.
         JMP         E850
<
<
<        P R O P O S I T I O N S  :
<
<
<        FONCTION :
<                      LE MODULE SUIVANT EST DESTINE
<                    A ISOLER LES PROPOSITIONS CONTENUES
<                    DANS LA PHARSE , SOUS UNE FORME
<                    PROCHE DES OPERATEURS BINAIRES DE
<                    L'ARITHMETIQUE , SOIT EN GENERAL :
<
<                    <OPERANDE>(<OPERATEUR>(<OPERANDE>)) , SOIT ICI :
<
<                    <GN>(<PRO.REL>)(<GV>(<GN>)) , AVEC LES
<                    DEFINTIONS RESTRICTIVES SUIVANTES :
<
<                    <GN>::=<PRO.PER> /
<                           <ART>((<ADV>*)<ADJ>*)<NOM>((ADV>*)<ADJ>*)) ,
<                    <GV>::=<VERBE>(<ADV>*) /
<                           'NE'<VERBE>'PAS'(<ADV>*).
<
<
<        RESULAT :
<                      LE RESULTAT DE CETTE PASSE EST
<                    'PROPP' QUI DONNE L'ADRESSE D'UNE LISTE
<                    D'ADRESSE DE DESCRIPTEURS DES
<                    PROPOSITIONS DE LA PHRASE ; UN
<                    DESCRIPTEUR DE PROPOSITION DONNANT :
<                    - LE NIVEAU DE RECURSIVITE DE LA PROPOSITION ,
<                    - LA LISTE DES ADRESSES DES DESCRIPTEURS
<                      DES MOTS DE LA PROPOSITION ,
<                    - UN CODE DE FIN DE PROPOSITION ('0000).
<
<
<                    PROPP-->(ADP1,DR1),...,(ADPI,DRI),...,(ADPN,DRN),-1
<                    DRI EST UN DESCRIPTEUR DE PROPOSITION SOUS
<                        LA FORME :
<                            <SUJET>((<PRO.REL>)<OPERATEUR>(<OBJET>)) ,
<                    ADPI--><NR>,ADM1,ADM2,...,ADMJ,...,ADMP,'0000 ,
<                    ADPI DESIGNE L'ADRESSE D'UN DESCRIPTEUR
<                         DE PROPOSITION , ET
<                    ADMJ L'ADRESSE D'UN DESCRIPTEUR DE MOT.
<                    <NR> EST LE NIVEAU DE RECURSIVITE DE LA
<                         PROPOSITION ,
<                    LA PROPOSITION P1 EST LA PROPOSITION PRINCIPALE
<                    DE LA PHRASE.
<
<
<        G E N E R A T I O N   D E S   P R O P O S I T I O N S  :
<
<
E402:    EQU         $
         LAD         LDESC,C         < A=@ DE LA 1ERE MEMOIRE LIBRE
                                     < DERRIERE LES DESCRIPTEURS.
         STA         APROPO          < A PARTIR DU QUEL , ON VA
         STA         APR             < SAUVEGARDER LES PROPOSITIONS.
         LR          Y,C             < C=@1ER DESCRIPTEUR.
         LBI         -1              < B=NIVEAU COURANT DE RECURSIVITE.
                                     < (INITIAL).
         BSR         AEXPRO          < EXTRACTION DES PROPOSITIONS
                                     < CONTENUES DANS LA PHRASE.
<
< FIN DE PHRASE :
<
E400:    EQU         $
         LAI         FINPHR          < A=<FINPHR>.
         BSR         ASTACK          < EMPILEMENT DE <FINPHR>.
         LXI         PROP1
         LA          APROPO          < RECUPERATION @ DE 'PROPOS'.
         STA         &ADUMY          < TRANSMISSION DE L'ADRESSE
                                     < REELLE DE LA ZONE 'PROPOS'.
         LXI         PROPP
         LA          APR             < ADRESSE DU 1ER MOT LIBRE
                                     < DERRIERE LA ZONE 'PROPOS'.
         STA         &ADUMY          < TRANSMISSION DU RELAI VERS
                                     < LA PROPOSITION PRINCIPALE ...
<
<
<        L I S T E   D E S   P R O P O S I T I O N S  :
<
<
         LXI         0               < INITIALISATION DU COMPTEUR DES
                                     < PROPOSITIONS RECONNUES.
         LY          APROPO
         LR          Y,W             < W=@DU NIVEAU DE RECURSIVITE
                                     < DE LA 1ERE PROPOSITION.
<
< BOUCLE DE RECUPERATION DES ADRESSES DES
< NIVEAUX DE RECURSIVITE DES PROPOSITIONS :
<
E600:    EQU         $
         LA          0,W
         JAL         E601            < FIN DE PHRASE.
         PSR         W               < EMPILEMENT DE L'ADRESSE DU
                                     < NIVEAU DE RECURSIVITE.
         ADRI        1,X             < COMPTAGE DES PROPOSITIONS.
<
< BOUCLE DE PARCOURS D'UNE PROPOSITION :
<
E602:    EQU         $
         ADRI        1,W             < MOT SUIVANT.
         LA          0,W
         JANE        E602            < (A)#<FINPRO> : ACCES MOT SUIVANT.
         ADRI        1,W             < DANS LE CAS D'UNE FIN DE PRO-
                                     < POSITION , ON PASSE A LA SUIVANTE
         JMP         E600            < VERS LE TEST DE FIN DE PHRASE.
<
< BOUCLE D'INVERSION DE L'ORDRE :
<
E601:    EQU         $
         LAI         NPROP
         XR          A,X
         STA         &ADUMY          < TRANSMISSION DU NOMBRE DE
                                     < PROPOSITIONS RECONNUES.
         JAE         E604            < CAS D'UN RETOUR EN ERREUR.
         XR          A,X             < X=NBRE DE PROPOSITIONS.
E603:    EQU         $
         PLR         A               < A=RELAI D'ACCES PROPOSITION.
         BSR         AREC            < STACKAGE DE LA PROPOSITION ,
                                     < ET REECRITURE.
         JDX         E603            < PROPOSITION SUIVANTE.
E604:    EQU         $
         LAI         FINPHR
         BSR         ASTACK          < MISE D'UN INDICATEUR DE FIN
                                     < DE PHRASE DANS LA LISTE DES
                                     < PROPOSITIONS.
         PLR         B               < RESTAURE CONDITIONS DE RETOUR.
         LY          ADPHR           < Y=@1ER DESCRIPTEUR LEXICO.
         LR          Y,C             < C=@1ER DESCRIPTEUR LEXICOGRA-
                                     < PHIQUE DE LA PHRASE.
         PAGE
         IF          DEBUG,,X100,
<
<
<        E D I T I O N   D E   L ' A N A L Y S E  :
<
<
         CPZR        B               < TEST DU RESULTAT DE RETOUR.
         JE          E205            < RETOUR OK , ON VA EDITER LE
                                     < RESULTAT DE L'ANALYSE.
<
< RETOUR EN ERREUR :
<
         LAD         MERR
         BSR         APRINT          < ENVOI D'UN MESSAGE D'ERREUR.
         JMP         E202            < VERS LE CHARGEMENT DE L'OVERLAY
                                     < SUIVANT.
<
< CAS DES RETOURS OK :
<
E205:    EQU         $
         LAD         MCOR
         BSR         APRINT          < ENVOI D'1N MESSAGE OK.
<
< BOUCLE D'EDITION DU RESULTAT :
<
E200:    EQU         $
         CPZ         DESCI,C         < EST-CE LA FIN DE PHRASE ???
         JL          E204            < OUI , ON ARRETE LA L'EDITION.
         LBY         DESCF,C         < ACCES A L'OCTET0 DU DESCF.
         ADRI        1,A
         ORI         '80             < CONVERSION EN UN COMPTE DE
                                     < DUPLICATIONS POUR LES VISUS.
         STBY        MMOT+1          < MAJ DU NBRE DE '>' A EDITER.
         LAD         MMOT
         BSR         APRINT          < ENVOI D'UN MESSAGE DE DEBUT
                                     < DE LIGNE.
         BSR         APMOT           < EDITION DU MOT COURANT.
         LAD         MSEM            < ENVOI D'UN LIMITEUR.
         BSR         APRINT
         LAD         DESCV,C         < A=@MOT DE LA VALEUR SEMANTIQUE.
         ADR         A,A             < A=@OCTET DE LA VALEUR.
         STA         DEMOUT+1        < MIS DANS DEMOUT.
         LAI         NSEM
         STA         DEMOUT+2        < MISE EN PLACE DU COMPTE OCTETS.
         LAD         DEMOUT
         SVC         0               < EDITION DE LA VALEUR SEMANTIQUE.
         LA          DESCF,C
         ANDI        'FF             < A=CATEGORIE GRAMMATICALE
                                     < RECONNUE POUR LE MOT COURANT.
         JAE         E203            < LE MOT COURANT EST UN MOT
                                     < PRECISE , RIEN A EDITER.
         CPI         '80
         JGE         E203            < MOT PRECISE DU TYPE 'QUI'/'QUE' ,
                                     < IL EST DONC IGNORE.
         LR          A,X             < SINON : X=CATEGORIE RECONNUE.
         LA          &ANOM           < SINON A=@DU NOM DE LA CATEGORIE
                                     < GRAMMATICALE DU MOT COURANT.
         BSR         APRINT          < EDITION DE SA CATEGORIE ...
E203:    EQU         $
<
< PROGRESSION DANS LA PHRASE :
<
E210:    EQU         $
         ADRI        LDESC,C         < PROGRESSION DU POINTEUR DES
                                     < DESCRIPTEURS LEXICOGRAPHIQUES.
         JMP         E200            < AU MOT SUIVANT ....
<
< FIN DE PHRASE :
<
E204:    EQU         $
<
< EDITION DU NBRE DE PROPOSITIONS :
<
         LXI         NPROP
         LA          &ADUMY          < A=NBRE DE PROPOSITIONS.
         ORI         '30             < ON SUPPOSE QU'IL N'Y EN A PAS
                                     < PLUS DE 9 (!!!).
         STBY        MNPRO+1
         LAD         MNPRO
         BSR         APRINT          < EDITION DU NBRE.
<
< EDITION DES PROPOSITIONS :
<
         LXI         PROPP
         LY          &ADUMY          < ACCES AU RELAI DE LA PROPOSITION
                                     < PRINCIPALE.
<
< EDITION D'UNE PROPOSITION :
<
E610:    EQU         $
         LR          Y,W             < W=@@LISTE D'UNE PROPOSITION.
         LA          0,W             < A=@LISTE D'UNE PROPOSITION.
         JAL         E560            < FIN DE PHRASE.
         LR          A,W             < W=@NIVEAU DE RECURSIVITE DE
                                     < LA PROPOSITION COURANTE.
         LA          0,W             < A=NIVEAU DE RECURSIVITE.
         JAL         $               < E R R E U R ....
         ADRI        1,W             < PASSAGE SUR LE 1ER MOT DE
                                     < LA PROPOSITION.
         ORI         '80             < CONVERSION EN UN COMPTE DE
                                     < DUPLICATION POUR LES VISUS.
         ADRI        1,A             < POUR AVOIR UN COMPTE>0.
         STBY        MPRO+1          < MISE A JOUR DU MESSAGE.
         LAD         MPRO
         BSR         APRINT          < CHANGEMENT DE LIGNE.
E563:    EQU         $
         LA          0,W
         JAE         E561            < FIN DE PROPOSITION.
<
< EDITION DU MOT COURANT DE LA PROPOSITION COURANTE :
<
         LR          A,C             < C=@DESCRIPTEUR DU MOT COURANT.
         LBY         DESCS,C         < ACCES INDICATEUR DEBUT DE GROUPE.
         JAE         E580            < CE N'EST PAS UN DEBUT DE GROUPE.
         LAI         MSEM-MSP        < CAS DES DEBUTS DE GROUPE.
E580:    EQU         $
         ADRI        MSP-ZERO,A      < DEBUT DE GROUPE ???
                                     < OUI : A=@MSEM ,
                                     < NON : A=@MSP.
         BSR         APRINT          < ENVOI D'UN 'SPACE' DE
                                     < SEPARATION DE MOT.
         BSR         APMOT           < OK , EDITION DU MOT COURANT.
         ADRI        1,W             < PASSAGE AU MOT SUIVANT DE LA
         JMP         E563            < LA PROPOSITION COURANTE.
<
< FIN DE PROPOSITION :
<
E561:    EQU         $
         ADRI        LREL,Y          < PASSAGE A LA PROPOSITION
                                     < SUIVANTE.
         JMP         E610
<
< FIN DE PHRASE :
<
E560:    EQU         $
<
< EDITION DES PROPOSITIONS REECRITES :
<
         LXI         PROPP
         LY          &ADUMY          < ACCES PROPOSITION PRINCIPALE.
<
< EDITION 1 PROPOSITION :
<
E834:    EQU         $
         LR          Y,W
         CPZ         0,W
         JL          E833            < FIN DE PHRASE.
         LAD         MREC
         BSR         APRINT          < ENVOI D'UNE EN-TETE.
         ADRI        1,W             < W BASE LE 1ER MOT DU DESCRIPTEUR
                                     < DE PROPOSITION RELATIVE.
E832:    EQU         $
         LA          0,W
         JAE         E830            < FIN DE PROPOSITION.
         LR          A,C             < C=@@DESCRIPTEUR DU 1ER MOT
                                     < DU GROUPE COURANT.
         LBY         1,W             < ACCES A L'INDICATEUR DE DEBUT
                                     < DE GROUPE.
         CPI         TREL            < EST-CE UN 'TREL' ???
         JE          E830            < OUI , FIN DE PROPOSITION.
         LA          1,W
         ANDI        'FF
         LR          A,X             < X=NBRE DE MOTS DANS LE GROUPE.
E831:    EQU         $
         PSR         C,X
         LA          0,C
         LR          A,C             < C=@DESCRIPTEUR DU MOT COURANT.
         BSR         APMOT           < EDITION DU MOT COURANT.
         LAD         MSP
         BSR         APRINT          < ENVOI D'1N SEPARATEUR.
         PLR         C,X
         ADRI        1,C             < MOT SUIVANT DU GROUPE.
         JDX         E831
         LAD         MSEM
         BSR         APRINT          < ENVOI D'1N SEPARATEUR DE GROUPE.
         ADRI        2,W             < PASSAGE GROUPE SUIVANT.
         JMP         E832
<
< FIN DE PROPOSITION :
<
E830:    EQU         $
         ADRI        LREL,Y          < PASSAGE NEXT PROPOSITION.
         JMP         E834
<
< FIN DE PHRASE :
<
E833:    EQU         $
         LY          ADPHR           < Y=@1ER DESCRIPTEUR LEXICO.
         LR          Y,C             < RESTAURATION DE LA BASE C.
E202:    EQU         $
X100:    VAL         0
<
<        C H A R G E M E N T   D E   L ' O V E R L A Y
<                    S U I V A N T  :
<
E371:    EQU         $
         LAI         BRANCH-ZERO
         LR          A,W             < W=@BRANCH D'OVERLAY.
         LA          NSEMA           < NOM DE LA BRANCHE D'ANALYSE
                                     < SEMANTIQUE.
E201:    EQU         $
         STA         0,W             < LE NOM DE L'OVERLAY A APPELER
                                     < EST MIS EN TETE DE BRANCHE.
         LAD         DEMSGN          < A=@DEMSGN ; W=@BRANCH.
         BSR         AOVL            < TENTATIVE DE CHARGEMENT.
         LAD         DEMCCI          < CAS DES ERREURS DE CHARGEMENT.
         SVC         0               < RETOUR PROVISOIRE AU CCI.
         LA          NGE             < LORS D'UN !GO , ON PROCEDE
                                     < A UN RETOUR A 'GE'.
         JMP         E201            < VERS LE CHARGEMENT DE 'GE'.
         PAGE
<
<
<        G R A M M A I R E   F R A N C A I S E  :
<        ( A S S E R T I V E - N E G A T I V E )
<
<
<        NOTATIONS :
<                    <GN> DESIGNE UN <GROUPE-NOMINAL> ,
<                    <GV> UN <GROUPE VERBAL>.
<                    <XXX>* INDIQUE QUE LA VARIABLE <XXX> PEUT AVOIR
<                           UN NBRE QUELCONQUE D'OCCURENCES SUCCESSIVES.
<                    (<XXX>) INDIQUE QUE L'OCCURENCE DE <XXX> EST
<                            FACULTATIVE.
<                    <XXX>::=<YYY>/
<                            <ZZZ> SIGNIFIE QUE :
<                                    <XXX>::=<YYY> OU
<                                    <XXX>::=<ZZZ>.
<
<
<        <PHRASE>::=<PHRASE COMPLETE> ,
<        <PHRASE>::=<PHRASE INTERJECTIVE>.
<
<
AXIOME:  EQU         $               < AXIOME DE LA GRAMMAIRE.
<
< DISCRIMINATION ENTRE LES PHRASES COMPLETES
< (SUJET+VERBE+COMPLEMENT) ET LES
< PHRASES INCOMPLETES (INTERJECTIONS,...) :
<
AXIO1:   BYTE        TVID;0
         WORD        0
         WORD        GN1             < LA <PHRASE> COMMENCE-T'ELLE
                                     < PAR UN <GN> ???
         WORD        INT             < NON , EST-ELLE INTERJECTIVE ???
         WORD        0               < NON , <PHRASE> INCOMPREHENSIBLE.
<
<        P H R A S E   I N T E R J E C T I V E  :
<
<        <PHRASE INTERJECTIVE>::=<INTERJECTION>.
<
INT:     EQU         $
         BYTE        TACT;TINT
         WORD        TYPGR           < MEMORISATION 'TYPE INTERJECTION'.
         WORD        INT1            < ET C'EST PARTI ...
         WORD        0
INT1:    BYTE        TERM;0
         WORD        INTERJ          < LE MOT COURANT DE <PHRASE> EST-
                                     < IL UNE INTERJECTION ???
         WORD        TFINT1          < OUI , REGARDONS SI LA PHRASE
                                     < EST TERMINEE ???
         WORD        0               < LA PHRASE N'EST PAS TERMINEE ,
                                     < LA <PHRASE> EST INCOMPREHENSIBLE.
TFINT1:  BYTE        TFPH            < TEST DE FIN DE PHRASE ???
         WORD        0
         WORD        TFINT2          < OK , FIN DE PHRASE TROUVEE.
         WORD        0               < ERREUR : ON N'A PAS TROUVE LA
                                     < FIN DE PHRASE.
TFINT2:  BYTE        TFIN;0          < FIN DE PHRASE INTERJECTIVE ,
                                     < PAR UNE FIN DE CHEMIN DANS
                                     < LA GRAMMAIRE.
<
<        P H R A S E   C O M P L E T E  :
<
<        <PHRASE COMPLETE>::=<GN> ,
<        <PHRASE COMPLETE>::=<GN><GV>.
<
GN1:     BYTE        TVID;0          < TEST DU SEPARATEUR PRECEDENT.
         WORD        0
         WORD        GDEB            < EST-ON A UN DEBUT DE PHRASE ???
         WORD        GDEB2           < EST-ON DERRIERE UN 'SEP2' (',',.)
         WORD        GCONT           < AUTRES CAS ....
         WORD        0
<
<        T E S T   D E   D E B U T   D E   P H R A S E  :
<
GDEB:    BYTE        TSEP;0
         WORD        SEP1+1          < TEST DU SEPARATEUR MAXIMUM.
         WORD        GN2             < OUI , C'EST OK VERS <GN2>.
         WORD        0               < NON , CE N'EST PAS LE DEBUT
                                     < DE LA PHRASE.
<
<        T E S T   D E   S E P 2  :
<
GDEB2:   BYTE        TSEP;0
         WORD        SEP2            < TEST DES SEPARATEURS 'SEP2' ???
         WORD        GN2             < OUI , OK VERS <GN2> ...
         WORD        0               < NON.
<
<        C A S   D E S   A U T R E S   S E P A R A T E U R S  :
<
<        ON N'AUTORISE QUE <GN> DERRIERE LES AUTRES SEPARATEURS !!!
<
GCONT:   BYTE        TNT;0
         WORD        GN              < TEST D'UN <GN> SEUL ???
         WORD        FING1           < OK , TEST DE LA FIN DE PHRASE ???
         WORD        0               < ERREUR.
<
<        D E B U T   D E   P H R A S E  :
<        O U   S E P A R A T E U R S   ' S E P 2 '  :
<
<        ON AUTORISE ALORS UN GROUPE COMPLET : <GN><GV> !!!
<
GN2:     BYTE        TNTC;FRONT      < ET MISE EN PLACE D'UNE FRONTIERE
                                     < DE RECURSIVITE ...
         WORD        GN              < RECONNAIT-ON LE NON-TERMINAL
                                     < <GN> ???
         WORD        GV1             < OUI , <GN> EST RECONNU , ALLONS
                                     < RECHERCHER L'EVENTUEL <GV>.
         WORD        FING1           < <GV> EST ABSENT , ALORS LA
                                     < <PHRASE> DOIT ETRE TERMINEE ...
         WORD        0               < LA <PHRASE> N'ETANT PAS TERMINEE
                                     < APRES <GN> LORSQUE <GV> EST
                                     < ABSENT , IL Y A ERREUR.
FING1:   BYTE        TFPH;0          < TEST DE FIN DE PHRASE ???
         WORD        0
         WORD        FING2           < OK , LA FIN DE PHRASE
                                     < EST RECONNUE.
         WORD        0               < ERREUR , ON N'EST PAS SUR
                                     < LA FIN DE PHRASE.
FING2:   BYTE        TFIN;0          < FIN DE CHEMIN DANS LA GRAMMAIRE ,
                                     < POUR <PHRASE> NE CONTENAT
                                     < QUE <GN>.
<
< RECHERCHE DU <GV> DANS L'AXIOME :
<
GV1:     BYTE        TNT;0           < RECHERCHE DU <GV> DANS <PHRASE> ??
         WORD        GV              < <GV> EST-IL LA ???
         WORD        FING1           < OUI , <GV> EST LA , ALLONS ALORS
                                     < TESTER LA PRESENCE DE LA FIN
                                     < DE <PHRAEE>.
         WORD        0               < ON N'EST PAS SUR LA FIN
                                     < DE <PHRASE> , IL Y A DONC ERREUR.
<
<        P H R A S E   C O N T E N U E
<        D A N S   U N E   R E C U R S I V I T E  :
<                    ( 2 )
<
<        <PHRASE2>::=<GN><GV>.
<
AXIO2:   EQU         $
         BYTE        TACT;TREL
         WORD        TYPGRP          < MEMORISATION 'DEBUT DE RELATIVE'.
         WORD        AXIO2I          < ET C'EST PARTI ...
         WORD        GERRP           < SUPPRESSION TYPE 'TREL'.
         WORD        0
AXIO2I:  BYTE        TNT;BOR         < B E G I N   R E C U R S I V I T E
                                     < ALLONS TESTER LA PRESENCE
                                     < DE <GN> DANS <PHRASE2>.
         WORD        GN              < EST-ON EN PRESENCE DE <GN> ???
         WORD        AXI2GV          < AYANT RECONNU <GN> DANS LA
                                     < <PHRASE2> , ALLONS TESTER LA
                                     < RECONNAISSANCE DE <GV>.
         WORD        0               < ERREUR , <PHRASE2> ERRONNEE ,
                                     < CAR IL LUI MANQUE SON <GV>.
<
< RECHERCHE DU <GV> DANS UNE <PHRASE2> :
<
AXI2GV:  BYTE        TNT;0
         WORD        GV              < EST-ON EN PRESENCE D'1N <GV>.
         WORD        GENDR           < OUI , ALORS ALLONS FAIRE UNE
                                     < FIN DE RECURSIVITE.
         WORD        0               < NON <PHRASE2> ERRONNEE.
<
<        G R O U P E   N O M I N A L  :
<
<        <GN>::=<PRONOM PERSONNEL>('DONT'<PHRASE2> /
<                                  'QUE'<PHRASE2> /
<                                  'QUE'<PHRASE3> /
<                                  'QUI'<PHRASE3> )
<        <GN>::=<ARTICLE>((<ADVERBE>*)<ADJECTIF>*)<NOM>((<ADVERBE>*)
<               <ADJECTIF>*)/
<               'DONT'<PHRASE2>/
<               'QUE'<PHRASE2>/
<               'QUE'<PHRASE3>/
<               'QUI'<PHRASE3>.
<
GN:      EQU         $
         BYTE        TACT;TGN
         WORD        TYPGR           < MEMORISATION 'DEBUT DE <GN>'.
         WORD        GNI             < ET C'EST PARTI ...
         WORD        GERR            < SUPPRESSION TYPE 'TGN'.
         WORD        0
<
< DISCRIMINATION ENTRE LES <GN>
< REDUITS A UN <PRONOM PERSONNEL> ET LES AUTRES :
<
GNI:     EQU         $
         BYTE        TVID;0
         WORD        0
         WORD        GNP             < EST-ON EN PRESENCE D'UN
                                     < <PRONOM PERSONNEL> ????
         WORD        GNN             < NON , ALORS EST-ON EN PRESENCE
                                     < D'UN <GN> COMPLET ????
         WORD        0               < NON , LE <GN> PRESUME EST
                                     < INCOMPREHENSIBLE.
<
< RECHERCHE <PRONOM PERSONNEL> :
<
GNP:     BYTE        TERM;0
         WORD        PROPER          < LE MOT COURANT DE <PHRASE>
                                     < EST-IL DANS LA CATEGORIE DES
                                     < PRONOMS PERSONNELS ???
         WORD        GNOP1           < OUI , EST-IL SUIVI DE 'DONT' ???
         WORD        GNOP2           < NON , EST-IL SUIVI DE 'QUE' ???
         WORD        GNOP3           < NON , EST-IL SUIVI DE 'QUI' ???
         WORD        GCONJ           < NON , EST-IL SUIVI D'UNE
                                     < <CONJONCTION> ???
         WORD        GVIDE           < NON , LE <PRONOM-PERSONNEL>
                                     < EST SEUL , ON ARRETE LA LE
                                     < PARCOURS DU CHEMIN DANS LA
                                     < GRAMMAIRE.
         WORD        0               < SINON , IL Y A ERREUR.
<
< RECHERCHE DES <GN> DE TYPE <ARTICLE><NOM> :
<
GNN:     BYTE        TERM;0
         WORD        ARTICL          < LE MOT COURANT DE <PHRASE>
                                     < EST-IL DANS LA CATEGORIE
                                     < DES ARTICLES ???
         WORD        GNADV           < CAS D'UN <ARTICLE> , EST-IL
                                     < SUIVI D'UN <ADVERBE> (OU
                                     < PLUSIEURS) ?????
         WORD        GNADJ           < PAS D'<ADVERBE> , MAIS PEUT-
                                     < ETRE UN OU PLUSIEURS <ADJECTIF> ???
         WORD        GNOM            < NON , ALORS PEUT-ETRE UN <NOM> ???
         WORD        0               < NI <ADVERBE> , NI <ADJECTIF> ,
                                     < NI <NOM> : DONC ERREUR.
<
< TEST <ADVERBE> DANS UN <GN> :
<
GNADV:   BYTE        TERM;0
         WORD        ADVERB          < LE MOT COURANT DE <PHRASE>
                                     < EST-IL DANS LA CATEGORIE
                                     < DES ADVERBES ????
         WORD        GNADJ           < OUI , ALORS EST-IL SUIVI D'UN
                                     < OU PLUSIEURS <ADJECTIF> ????
         WORD        GNADV           < PAS , OU PAS ENCORE D'<ADJECTIF>,
                                     < PEUT-ETRE ALORS UN AUTRE
                                     < <ADVERBE> ????
         WORD        0               < NI <ADJECTIF> , NI <ADVERBE> ,
                                     < ALORS , IL Y A ERREUR ...
<
< RECHERCHE DES <ADJECTIF> DANS <GN> :
<
GNADJ:   BYTE        TERM;0
         WORD        ADJECT          < LE MOT COURANT DE <PHRASE>
                                     < EST-IL DANS LA CATEGORIE DES
                                     < ADJECTIFS ????
         WORD        GNOM            < OUI , ALORS EST-IL SUIVI
                                     < D'UN <NOM> ???
         WORD        GNADJ           < NON PAS , OU PAS ENCORE ,
                                     < MAIS PEUT-ETRE Y-A-T'IL UN
                                     < AUTRE <ADJECTIF> ???
         WORD        0               < NI <NOM> , NI <ADJECTIF> , ALORS
                                     < IL Y A ERREUR ....
<
< RECHERCHE DE <NOM> DANS <GN> :
<
GNOM:    BYTE        TERM;0
         WORD        NOM             < LE MOT COURANT DE <PHRASE> EST-IL
                                     < DANS LA CATEGORIE DES NOMS ????
         WORD        GNOADV          < OUI , ALORS , EST-IL SUIVI
                                     < D'UN <ADVERBE> ????
         WORD        GNOADJ          < NON , PEUT-ETRE EST-IL SUIVI
                                     < D'UN <ADJECTIF> ???
         WORD        GNOP1           < NON , PEUT-ETRE EST-IL SUIVI
                                     < DU MOT 'DONT' ????
         WORD        GNOP2           < NON , PEUT-ETRE EST-IL SUIVI
                                     < PAR LE MOT 'QUE' ???
         WORD        GNOP3           < NON , PEUT-ETRE EST-CE LE
                                     < MOT 'QUI' ???
         WORD        GCONJ           < NON , ALORS UNE <CONJONCTION> ???
         WORD        GVIDE           < RIEN DE TOUT CELA , ON CONSI-
                                     < DERE QUE LE <GN> EST COMPLET.
         WORD        0
<
<        A N N U L A T I O N   D E B U T   D E   G R O U P E  :
<
GERR:    BYTE        TACTER;0
         WORD        TYPERR          < RAZ INDICATEUR DEBUT DE GROUPE.
GERRP:   BYTE        TACTER;0
         WORD        TYPERP          < ARZ INDICATEUR DEBUT DE GROUPE.
<
<        F I N   D E   C H E M I N  :
<
GVIDE:   BYTE        TFIN;0          < ON ARRETE LA LE CHEMIN
                                     < DANS LA GRAMMAIRE.
<
<        F I N   D E   R E C U R S I V I T E  :
<
GENDR:   BYTE        TFIN;EOR        < ON ARRETE LA LE CHEMIN DANS
                                     < LA GRAMMAIRE , EN FAISANT DE PLUS
                                     < UNE FIN DE RECURSIVITE DU
                                     < DISCOURS ...
<
< RECHERCHE DE <ADVERBE> APRES <NOM> :
<
GNOADV:  BYTE        TERM;0
         WORD        ADVERB          < LE MOT COURANT DE <PHRASE> ,
                                     < EST-IL UN ADVERBE ?????
         WORD        GNOADJ          < OUI , ALORS EST-IL SUIVI
                                     < D'UN <ADJECTIF> ????
         WORD        GNOADV          < NON , ALORS PEUT-ETRE UN
                                     < AUTRE <ADVERBE> ???
         WORD        0               < NON , NI <ADJECTIF> , NI
                                     < <ADVERBE> , IL Y A ERREUR ....
<
< RECHERCHE <ADJECTIF> APRES <NOM>(<ADVERBE>*) :
<
GNOADJ:  BYTE        TERM;0
         WORD        ADJECT          < LE MOT COURANT DE <PHRASE>
                                     < EST-IL UN ADJECTIF ????
         WORD        GNOADJ          < OUI , EST-IL ALORS SUIVI D'UN
                                     < AUTRE <ADJECTIF> ????
         WORD        GNOP1           < NON , ALORS EST-IL SUIVI
                                     < DU MOT PRECISE 'DONT' ???
         WORD        GNOP2           < NON , ALORS EST-IL SUIVI
                                     < DU MOT 'QUE' ???
         WORD        GNOP3           < NON , ALORS EST-IL SUIVI DU
                                     < MOT 'QUI' ???
         WORD        GCONJ           < NON , ALORS UNE <CONJONCTION> ???
         WORD        GVIDE           < NON , ON ADMET QUE LE <GN>
                                     < EST COMPLET , ON ARRETE LE
                                     < PARCOURS DU CHEMIN.
         WORD        0
<
<        R E C H E R C H E   D E   ' D O N T '  :
<
DONT:    ASCI        "DONT"
GNOP1:   BYTE        TMOT;4          < EST-ON EN PRESENCE DU MOT
         WORD        DONT,X          < PRECISE 'DONT' ???
         WORD        AXIO2           < OUI , ALORS A-T'ON BIEN
                                     < 'DONT'<PHRASE2> ????
         WORD        0               < NON , PSA DE <PHRASE2> : ERREUR ..
<
<        P H R A S E   C O N T E N U E
<        D A N S   U N E   R E C U R S I V I T E  :
<                    ( 3 )
<
<        <PHRASE3>::=<GV>.
<
AXIO3:   EQU         $
         BYTE        TACT;TREL
         WORD        TYPGRP          < MEMORISATION 'DEBUT DE RELATIVE'.
         WORD        AXIO3I          < ET C'EST PARTI ...
         WORD        GERRP           < SUPPRESSION TYPE 'TREL'.
         WORD        0
AXIO3I:  BYTE        TNT;BOR         < B E G I N   R E C U R S I V I T E
         WORD        GV              < EST-ON EN PRESENCE DE <GV> ???
         WORD        GENDR           < OUI , ON ARRETE LA LE PARCOURS
                                     < DU CHEMIN DANS LA GRAMMAIRE , EN
                                     < FAISANT DE PLUS UNE FIN DE
                                     < RECURSIVITE.
         WORD        0               < NON ALORS ERREUR ...
<
<        R E C H E R C H E   D E   ' Q U E '  :
<
QUE:     ASCI        "QUE "
GNOP2:   BYTE        TMOT;TQUE+3     < EST-ON EN PRESENCE DU MOT
         WORD        QUE,X           < PRECISE 'QUE' ????
         WORD        AXIO2           < OUI , ALORS A-T'ON :
                                     < 'QUE'<PHRASE2> ???
         WORD        AXIO3           < NON , ALORS A-T'ON :
                                     < 'QUE'<PHRASE3> ???
         WORD        0               < NON , ERREUR.
<
<        R E C H E R C H E   D E   ' Q U I '  :
<
QUI:     ASCI        "QUI "
GNOP3:   BYTE        TMOT;TQUI+3     < EST-ON EN PRESENCE DU MOT
         WORD        QUI,X           < PRECISE 'QUI' ????
         WORD        AXIO3           < OUI , A-T'ON BIEN ALORS
                                     < 'QUI'<PHRASE3> ????
         WORD        0               < NON , ERREUR ....
<
<        < G R O U P E   V E R B A L >  :
<
<        <GV>::=<VERBE> ,
<        <GV>::=<VERBE><GN> ,
<        <GV>::=<VERBE><ADVERBE>* ,
<        <GV>::=<VERBE><ADVERBE>*<GN> ,
<        <GV>::=<VERBE><ADVERBE>*'DE'<GN> ,
<        <GV>::='NE'<VERBE>'PAS' ,
<        <GV>::='NE'<VERBE>'PAS'<ADVERBE>*
<        <GV>::='NE'<VERBE>'PAS'<ADVERBE>*<GN> ,
<        <GV>::='NE'<VERBE>'PAS'<ADVERBE>*'DE'<GN> ,
<        <GV>::='NE'<VERBE><GN>'QUE'<GN>.
<
GV:      EQU         $
         BYTE        TACT;TGV
         WORD        TYPGR           < MEMORISATION 'DEBUT DE <GV>'.
         WORD        GVI             < ET C'EST PARTI ...
         WORD        GERR            < SUPPRESSION TYPE 'TGN'.
         WORD        0
<
< DISCRIMINATION ENTRE LES ASSERTIONS
< ET LE NEGATIONS :
<
GVI:     EQU         $
         BYTE        TVID;0
         WORD        0
         WORD        ASSERT          < EST-CE UNE ASSERTION ???
         WORD        NEGAT           < NON , ALORS EST-CE UNE NEGATION ?
         WORD        0               < NIN ASSERTION , NI NEGATION ,
                                     < ALORS ERREUR !!!
<
<        T E S T   P H R A S E   A S S E R T I V E  :
<
ASSERT:  BYTE        TERM;0
         WORD        VERBE           < LE MOT COURANT DE <PHRASE>
                                     < EST-IL UN VERBE ???
         WORD        ASSADV          < OUI , ALORS EST-IL SUIVI
                                     < D'UN OU PLUSIEURS <ADVERBE> ???
         WORD        ASSGN           < NON , ALORS EST-IL SUIVI D'UN
                                     < <GN> ????
         WORD        GCONJ           < NON , ALORS UNE <CONJONCTION> ???
         WORD        GVIDE           < NON , NI <ADVERBE> , NI
                                     < <GN> , ON ARRETE ICI LE
                                     < PACOURS DU CHEMIN ...
         WORD        0
<
< RECHERCHE D'UN <ADVERBE> DERRIERE UN <VERBE> :
<
ASSADV:  BYTE        TERM;0
         WORD        ADVERB          < LE MOT COURANT DE <PHRASE>
                                     < EST-IL UN <ADVERBE> ???
         WORD        ASSDE           < NON , PAS DE <GN> , ALORS
                                     < EST-IL SUIVI PAR 'DE' ???
         WORD        ASSGN           < OUI , ALORS EST-IL SUIVI DE <GN>?
         WORD        ASSADV          < NON PAS 'DE' , ALORS PEUT-ETRE
                                     < UN AUTRE <ADVERBE> ????
         WORD        GCONJ           < NON , ALORS UNE <CONJONCTION> ???
         WORD        GVIDE           < LE <VERBE><ADVERBE> N'EST NI
                                     < SUIVI DE <GN> , NI DE 'DE' ,
                                     < NI D'UN AUTRE <ADVERBE> ; ON
                                     < ARRETE LE PARCOURS DU CHEMIN ...
         WORD        0
<
< RECHERCHE DE 'DE' DERRIERE <VERBE>(<ADVERBE>) :
<
DE:      ASCI        "DE"
ASSDE:   BYTE        TMOT;2
         WORD        DE,X            < LE MOT COURANT DE <PHRASE>
                                     < EST-IL LE MOT PRECISE 'DE' ????
         WORD        ASSGN           < OUI , ALORS EST-IL SUIVI
                                     < DE <GN> ???
         WORD        0               < NON PAS DE <GN> DERRIERE
                                     < <VERBE>(<ADVERBE>)'DE' ...
                                     < ALORS ERREUR ....
<
< RECHERCHE D'UN <GN> DERRIERE UN <VERBE>... :
<
ASSGN:   BYTE        TNT;0
         WORD        GN              < EST-ON EN PRESENCE DE <GN> ????
         WORD        GVIDE           < OUI , ON ARRETE ICI LE PARCOURS
                                     < DU CHEMIN ...
         WORD        0
<
<        T E S T   P H R A S E   N E G A T I V E  :
<
NE:      ASCI        "NE"
NEGAT:   BYTE        TMOT;2
         WORD        NE,X            < LE MOT COURANT DE <PHRASE>
                                     < EST-IL LE MOT PRECISE 'NE' ???
         WORD        NEGV            < OUI , EST-IL SUIVI ALORS
                                     < D'UN <VERBE> ???
         WORD        0               < NON PAS DE <VERBE> , ERREUR ....
<
< RECHERCHE D'UN <VERBE> DERRIERE 'NE' :
<
NEGV:    BYTE        TERM;0
         WORD        VERBE           < LE MOT COURANT DE <PHRASE>
                                     < EST-IL UN VERBE ???
         WORD        NEGP            < OUI , ALORS EST-IL SUIVI
                                     < DU MOT PRECISE 'PAS' ????
         WORD        NEGGN1          < NON , ALORS EST-IL SUIVI
                                     < D'UN <GN> ???
         WORD        0               < NI 'PAS' , NI <GN> , ALORS
                                     < IL Y A ERREUR ...
<
< RECHERCHE D'UN <GN> DERRIERE 'NE'<VERBE> :
<
NEGGN1:  BYTE        TNT;0
         WORD        GN              < EST-ON EN PRESENCE D'UN <GN> ????
         WORD        NEGQUE          < OUI , ALORS EST-IL SUIVI D'UN
                                     < 'QUE' ????
         WORD        0               < NON PAS DE 'QUE' : ERREUR ...
<
< RECHERCHE DE 'QUE' DERRIERE 'NE'<VERBE><GN> :
<
NEGQUE:  BYTE        TMOT;3
         WORD        QUE,X           < LE MOT COURANT DE <PHRASE>
                                     < EST-IL LE MOT PRECISE 'QUE' ???
         WORD        NEGGN           < OUI , ALORS EST-IL SUIVI
                                     < D'UN 2EME <GN> ????
         WORD        0               < NON PAS DE 2EME <GN> : ERREUR ...
<
< RECHERCHE D'UN <GN> DERRIERE 'NE'<VERBE>'PAS' , OU
< DERRIERE 'NE'<VERBE><GN>'QUE' :
<
NEGGN:   BYTE        TNT;0
         WORD        GN              < EST-ON EN PRESENCE D'UN <GN> ???
         WORD        GVIDE           < OUI , LAORS ON ARRETE LE
                                     < PARCOURS DU CHEMIN ...
         WORD        0
<
< RECHERCHE D'UN 'PAS' DERRIERE 'NE'<VERBE> :
<
PAS:     ASCI        "PAS "
NEGP:    BYTE        TMOT;3
         WORD        PAS,X           < LE MOT COURANT DE <PHRASE>
                                     < EST-IL LE MOT PRECISE 'PAS' ???
         WORD        NEGADV          < OUI , ALORS EST-IL SUIVI
                                     < D'UN <ADVERBE> ???
         WORD        NEGGN           < NON , ALORS EST-IL SUIVI
                                     < D'UN <GN> ???
         WORD        GVIDE           < NON , ON ARRETE ICI LE
                                     < PARCOURS DU CHEMIN ...
         WORD        0
<
< RECHERCHE D'UN <ADVERBE> DERRIERE 'NE'<VERBE>'PAS' :
<
NEGADV:  BYTE        TERM;0
         WORD        ADVERB          < LE MOT COURANT DE <PHRASE>
                                     < EST-IL UN <ADVERBE> ????
         WORD        ASSDE           < OUI , ALORS EST-IL SUIVI
                                     < DE 'DE'<GN> ???
         WORD        NEGGN           < NON , ALORS EST-IL SUIVI
                                     < DE <GN> SEUL ???
         WORD        NEGADV          < NON , ALORS PEUT-ETRE UN
                                     < AUTRE <ADVERBE> ???
         WORD        GCONJ           < NON , ALORS UNE <PROPOSITION> ???
         WORD        GVIDE           < NON , ON ARRETE ICI LE
                                     < PARCOURS DU CHEMIN ....
         WORD        0
<
<        R E C H E R C H E   D E S   C O N J O N C T I O N S  :
<
GCONJ:   BYTE        TACT;TCONJ
         WORD        TYPGR           < MISE EN PLACE D'UN DEBUT DE
                                     < GROUPE CONJONCTIF A PRIORI.
         WORD        GCONJI          < TEST CONJONCTION ???
         WORD        GERR            < NON , ARZ DU TYPE 'TCONJ'.
         WORD        0
GCONJI:  BYTE        TERM;0
         WORD        CONJ            < EST-ON EN PRESENCE D'UNE
                                     < CONJONCTION ???
         WORD        GCI
         WORD        0
GCI:     BYTE        TNT;0
         WORD        GN1             < ET ON ON RE-RENTRE DANS LA
                                     < GRAMMAIRE ....
         WORD        GVIDE           < FIN DE CHEMIN.
         WORD        0
         PAGE
<
<
<        V A L I D A T I O N   D E   L ' I M P L A N T A T I O N  :
<
<
PILE:    VAL         'FF0-6          < RETOUR SUR LA PILE DE SODOME.
X12:     EQU         ZERO+PILE-LTNI-LTNI
X10:     VAL         X12-$
ZEROV:   EQU         ZERO+X10        < ERREUR D'ASSEMBLAGE SI MAUVAISE
                                     < IMPLANTATION.
         DZS         X10+1           < PAR PURE PROPRETE.
         EOT         #SIP GEN PROCESSEUR#



Copyright © Jean-François COLONNA, 2022-2024.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2022-2024.