/* Fichier gramt.c */ &REFER(VARTAHIT,GRAMTAHIT). &GRAMMAIRE. &ENTREE: depart(I). /* RPOINT0. Lecture dans le dico dicttrttahit des valeurs de */ /* ULT des feuilles des elements structures, equivalentes aux */ /* valeurs de UL non vides. */ RPOINT0: 0(*) / 0:( (ULT(DICT(*))^=0) & (TRAITES=0) ) => 0 / 0:0 ( ULT = ULT(DICT(0)) ; PARTIE = PARTIE(DICT(0)) ; ORDRE = ORDRE(DICT(0)); SUBSTADJ = SUBSTADJ(DICT(0)) ; NUMT = NUMT(DICT(0)) ; TRAITES=OUI ; TYPT = TYPT(DICT(0)) ; SUBST = SUBST(DICT(0)) ; ULTS = ULTS(DICT(0)) ). /* RPOINT1. Affectation aux variables ULT des noeuds non */ /* feuilles des elements structures aux valeurs des variables */ /* UL des memes noeuds. */ RPOINT1: 0(1) / 0:( (UL^=0) & (TRAITES=0) ) => 0(1) / 0:0( ULT = %(ULT)<-UL(*) ; TRAITES=OUI ). --> gramordre: 0(1) / 0: K = GN; 1: K = GNPREP. --> general. --> %STOP. /* Verifier quand il y aura +sieurs regles de changer en U(10). */ &GRAM: gramordre. /* Appeler recursivement sur RCPLTNOM et le point 2. */ /* Pb de bouclage sur RCPLTNOM quand on est en U(10). */ /* Prise en compte de l'ordre du possessif 'o' ou 'a' dans le COMPLEMENT du NOM du GN. */ RCPLTNOM: 0(1,2(3,4)) / 0: K = GN; 1: CAT = N; 2: K = GNPREP; 3: (CAT = PREP)&(ORDRE = 0); 4:(CAT = N) => 0(1,2(3,4)) / 3:3(<(TPREP(3) = A)|(SEMA(4) & (CONCR | MAT) ^= 0) : ORDRE = A # ORDRE = O>). --> general. &GRAM: general(I). /*Lancement de la grammaire de Substantivation d'Adjectif si SUBSTADJ=OUI. */ RSUBSTADJ(@Trt_SubstAdj; 2): 2(0?(1)) / 0: (K=PHRASE); 1: (SUBSTADJ = OUI) => 2(0(1)). --> Trt_CCirc: 0 / 0: (FS = COMPCIR). --> Trt_Sub_Inf: 0 / 0: (FS = OBJT) | (FS=OBJI). --> Relais1. /* Grammaire de Substantivation de l'Adjectif. */ &GRAM: Trt_SubstAdj. /* On refabrique entierement la phrase en supposant /* dans un premier temps que l'adjectif /* a substantiver fait partie du Groupe Nominal SUJET. */ */ */ RTRTSUBSTADJ: 0(1(GN(*,ADJ),*,GV1(VB1))) / 1: (K=PHRASE); GN: (K=GN); ADJ: (SUBSTADJ = OUI); VB1: (CAT=V) => 0(X(GNR(*GN<ADJ,>*,PHREL(QUI,GV1(VB1),*1<GV1,>*)),GV(VB))) / X:1; GNR:GN; PHREL: (ULT='*PHREL'); GV: (ULT='*GV'; K=GV); QUI: (ULT='i'); VB: ( CAT=V; ULT = ULT(ADJ) ) / TEMP(GV)=TEMP(GV1). --> %STOP. &GRAM: Trt_CCirc(I). /* Ajout de la preposition "i" dans un GNPREP, */ /* complement circonstanciel. */ RTRTCOMPCIR1: GN(*,QQ) / GN:( (K=GNPREP) & (FS=COMPCIR) ); QQ:( (ULT^='i') & (CAT=PREP) & (TPREP^=SUR) ) => GN(QQ) / QQ:(ULT='i'). /* Ajout de la preposition "i" dans un GN, */ /* complement circonstanciel. */ RTRTCOMPCIR2: GN(*,QQ) / GN:( (K=GN) & (FS=COMPCIR) ); QQ: (ULT^='i') => GN(I,QQ) / I: (ULT='i'). /* Ajout de la preposition "i" dans un GNPREP, */ /* complement circonstanciel. */ RTRTCOMPCIR3: GN(*,QQ) / GN:( (K=GNPREP) & (FS=COMPCIR) ); QQ:( (ULT^='i') & (CAT=PREP) & (TPREP=SUR) ) => GN(NEW,QQ) / NEW:( ULT='i'). --> Trt_Sub_Inf: 0 / 0: ( KPH=PHINF). --> Relais1. &GRAM:Trt_Sub_Inf(U(10)). /* Traitement de la subordonnee infinitive car consideree comme COD du verbe. */ RPHINF1: 0(GV(PHINF),*,%3) / GV: K=GV; PHINF: KPH=PHINF => 0(GV,PHINF,%3). /* Traitement de la preposition 'de' introduisant une subordonnee infinitive. */ RINFDET: 0(1) / 0: (KPH=PHINF) ; 1: (TPREP=DE) => 0(1) / 1:1 (ULT='e'). /* Traitement interne du PHINF dans le cas d'un verbe de decision. */ RPHINF2: PHINF(*,GV) / GV: K=GV; PHINF: KPH=PHINF => PHINF(I,TE,GV) / I:(ULT='i'); TE: (ULT='te'). --> Trt_CObjet. &GRAM: Trt_CObjet(I). /* Traitement du pronom personnel COI place avant le verbe ainsi que des GN, complement d'objet direct et indirect. */ RCODI1: PH(GV(*,%GN1,GN2,*),*,PT) / PH: K=PHRASE; GV: K=GV; GN1: (K=GN)&(FS=OBJI); GN2: ((K=GN) | (K=GNPREP)) & ((FS=OBJT)|(FS=OBJI)) => PH(GV,%GN1,GN2,PT). /* Traitement du pronom personnel COI place avant le verbe dans le cas d'un seul pronom personnel. */ RCODI2: PH(GV(*,GN),*,PT) / PH: K=PHRASE; GV: K=GV; GN: (K=GN)&( (FS=OBJI)|(FS=OBJT) ); GN$: ( (FS^=OBJT)&(FS^=OBJI) ) => PH(GV,GN,PT). /* Ajout de la preposition "i" dans chaque GN d'un gros COD ou COI avec Coordination sauf s'il y a "ho'e". */ RTRTCODI1: GN(GN1(*,QQ)) / GN:( (K=GN) & ((FS=OBJT)|(FS=OBJI)) & (COORDIN=C) ); GN1: ( (K=GN) & (COORDIN=P) ); QQ:( (ULT^='i') & (ULT^='ho''e') ) => GN(GN1(I,QQ)) / I: (ULT='i'). /* Ajout de la preposition "i" dans un GN, COD ou COI sauf s'il y a "ho'e". */ RTRTCODI2: GN(*,QQ) / GN:( ((K=GN)|(K=GNPREP)) & ((FS=OBJT)|(FS=OBJI)) & (CAT^=REP) & (COORDIN = 0) ); QQ:( (ULT^='i') & (ULT^='ho''e') ) => GN(I,QQ) / I: (ULT='i'). --> Relais1. &GRAM: Relais1. --> Trt_Verbe: 0 / 0: K=GV. --> Trt_Nom. &GRAM: Trt_Verbe(I). /* Traitement du passe ou present par l'ajout d'une particule 'ua ou 'e */ /* Et inversion du sujet et du verbe apres le traitement des COD et COI. */ RVERBE: PH(GN,*,GV(*,VB)) / PH: K=PHRASE; GV: K=GV; GN: K=GN; VB: CAT=V => PH(GV(PART,VB),GN) / PART: (<TEMP(GV) & TEMP(FPASSE) ^= 0: ULT='''ua' # ULT='''e'>). /* Traitement de la Negation avec 'ne-pas' tt seul dans le GADV. */ RTRFNEG1: PH(GN,*,GV(*,DEB_NEG,%GADV(*,%FIN_NEG,*))) / PH: (K=PHRASE); GV : (K=GV); DEB_NEG:( (K=GADV) & (SEM=NEGAT) ); FIN_NEG: (UL='ne-pas') => PH(DEB_NEG,GN,GV). /* Traitement de la Negation avec 'ne-pas' pas tout seul dans le GADV. */ RTRFNEG2: PH(GN,*,GV(*,DEB_NEG,%GADV(%FIN_NEG))) / PH: (K=PHRASE); GV : (K=GV); DEB_NEG:( (K=GADV) & (SEM=NEGAT) ); FIN_NEG: (UL='ne-pas') => PH(DEB_NEG(FIN_NEG),GN,GV). /* Traitement du prefixe dans le verbe. */ RPREFIX(Trt_Prefix;0): 0(1,*,%2)/ 0: K=GV; 1: (CAT=V) & (PREFIX^=0) => 0(1,GADV(PREF),%2) / GADV:*FGADV; PREF:*FSNAV( ULT='PREFIX'). /* Dedoublement du verbe en cas de besoin: PARTIE='MULT2'. */ RDDVB: 0(1,*,%2) / 0: K=GV; 1: ( (CAT=V) & (PARTIE='MULT2') ) => 0(1,GADV(ADV),%2) / 1:1 ( PARTIE='MULT2';ULT= ULT(DICT(*)); PARTIE=0 ); GADV:*FGADV(ULT='*GADV'); ADV:*FSNAV ( PARTIE='MULT2' ; ULT=ULT(DICT(1,2))). RTRNOMADV: 0(1,*,2(*,3,*,4)) / 0: (K=GV); 1: (CAT=V); 2: (K=GN); 3: ( (CAT=DETERM) & (SOUSD=ARTD) ); 4: ( (CAT=N) & (TRANS=NOMADV) ) => X(*0<,2>*,GADV(ADV)) / X:0; GADV:*FGADV(ULT='*GADV'); ADV:*FSNAV(ULT=ULT(4)). --> Trt_Nom. /* Grammaire de Traitement des groupes nominaux. */ &GRAM: Trt_Nom(I). /* Le traitement de la substantivation des verbes utilisés comme nom avec préfixe. */ RTRTSUBST: GN(NM) / GN:( (K = GN) | (K = GNPREP) ) ; NM:( (CAT = N) & (SUBST=O) & (TRAITES=OUI)) => GN(NM) / NM: NM( TRAITES=NON; SUBST=N ; ULT= %(ULT)<-ULTS(*) ). /* Le traitement du pluriel dans le groupe nominal ne s arrete pas a la particule MAU */ /* car les particules NA, NAU et TAU y interviennent aussi. */ RCREATPLUR1: GN(ART,*,NM) / GN:( (K = GN) | (K = GNPREP) ) ; ART: (CAT=DETERM) ; NM:( (CAT = N) & (NUM = PLU) ) => GN(ART,PART,NM) / PART: (ULT='mau'). /* Traitement du pluriel effectue apres le chargement a partir du dico DICTTRTAHIT */ /* d'un mot au singulier transforme en mot au pluriel. */ RCREATPLUR3: GN(ART,*,NM) / GN: (K = GN); ART: (CAT=DETERM); NM: ( (CAT = N) & (NUMT = PLU) ) => GN(ART,PART,NM) / PART: (ULT='mau'). /* L inversion des adjectifs dans le groupe nominal intervient quand l adjectif vient */ /* avant le nom. La decomposition du groupe nominal est ici Nom + Adjectif. */ RINVRSADJ: GN(ADJ,NM) / GN: K = GN; ADJ: CAT = ADJOINT; NM: CAT = N => X(*GN<,ADJ>*,NM,*GN<ADJ,NM>*,ADJ,*GN<NM,>*) / X:GN. RDDADJ: GN(*,GN1(Q1,*),*,CONJ,*,GN2(Q2,*),*,GA,*) / GN1: K = GN; CONJ: CAT=CONJCT; GN2: K=GN; GA: K=GA => GN(GN1(Q1,GA),CONJ,GN2(Q2,GA2(*GA*))) / GA2:GA. /* Dedoublement du nom en cas de besoin: PARTIE='MULT2'. */ RDDNOM: GN(1(*),*,%2) / GN: ( (K = GN) | (K = GNPREP) ) ; 1: ( (CAT=N) & (PARTIE='MULT2') ) => GN(1, GA( ADJ ), %2) / 1:1 ( PARTIE='MULT2';ULT= ULT(DICT(*)); PARTIE=0 ); GA:*FGA(ULT='*GA'); ADJ:*FSNAD ( PARTIE='MULT2' ; ULT=ULT(DICT(1,2))). /* Suppression de 'o' herite de la traduction NON-A-PROPOS de la preposition 'DE' en francais. */ RSUPPRIMOGN: GNP( 1 ) / GNP: ( (K=GNPREP) & ( (FS=OBJT) | (FS=OBJI) ) ); 1: ( ULT='o') => GNP . -->%STOP. &GRAM: Trt_Prefix(U). /* On applique une seule fois la grammaire. */ /* Traitement du prefix RE- en lui remplacant l'adverbe 'faahou' (encore) */ RPREFRE : 0(1,*,3(2)) / 0: K=GV; 1: PREFIX=RE; 2: ULT='PREFIX' => 0(1,3(2)) / 2:2(UL='encore';ULT=ULT(DICT(*))); 1:1(PREFIX=0). -->%STOP. &FIN.