&REFER(VTRLOG,GRAMTRDEMO). &GRAMMAIRE. &ENTREE: TRADCONV(U). RAPPEL(@GRNIV1;1): 1 / 1:(%PROF(*)=2) => 1. --> %STOP. &GRAM: GRNIV1(I,,GRNIV1). RSELECTREL($GRINTER;7/$GRAMWHERE;9/$GRFROM;FROM): 0(*,1,2(3,4(5(6,7),8,9))) / 0: (KPH = PH); 1: (K = GN)&(SOUSD $>= INT); 2: (K = GV); 3: (FS = GOV)&(UL = 'être'); 4: (K = GN)&(FS = ATTR); 5: (K = GNPREP); 6: (FS = GOV)&(TYPLOC(DICT(*)) = CONST); 7: (K = PHRASE); 8: (FS = GOV)&(SOUSR $>= DEM); 9: (KPH = PHREL) => N0(TRAD1(X(SEL,FROM(FRMCH,ELEM,A(*9*),NL),WH(WHERE,FCT,9),AND(V1,7),FN)),0) / SEL:(FRM='select '||FRM(DICT(6))||'.'||FRM(DICT(6,2));LEMME='SELECT'); FRMCH:(FRM=' from ';LEMME='FROM'); ELEM: (FRM=FRM(DICT(6));LEMME=FRM(DICT(6))); NL: (FRM='\n';LEMME='Nouvelle ligne'); A: 9; WHERE:(FRM='where ';LEMME='WHERE'); FCT: (); X: (FRM(prefixe_expression) = FRM(DICT(6,3));FRM(recherche_expression)=FRM(DICT(6))); V1: (FRM = 'and ';LEMME='AND'); FN: (FRM=';\n'; LEMME=';'). RELIMINWHERAND: 0(*,1,*,2(*),*,3(*,4)) / 1: (LEMME='WHERE'); 2: (FRM=''); 4: (FRM(*,0,3) = 'and') => 0(1,3). RELIMFIN: 0(1(*,2,*)) / 1: (K = PHRASE); 2: (CAT = PONCT) => 0. --> %STOP. &GRAM: GRFROM(I). RADJDEF: 0(1(2,3(4,5(6(7))))) / 0: (K = PHRASE); 1: (K = GV); 2: (FS = GOV)&(UL = 'être'); 3: (K = GA); 4: (FS = GOV)&(VERIF(DICT(*)) = T); 5: (KPH = PHINF); 6: (K = GV); 7: (FS = GOV)&(SEMA(DICT(*)) = SITUATION) => V,X / V: (FRM = ', ';LEMME=','); X: (FRM=FRM(DICT(4));LEMME=FRM(DICT(4))). RACCEPTVB: 1(2(3)) / 1: (K = PHRASE); 2: (K = GV); 3: (FS = GOV)&(VERIF(DICT(*)) = T) => V,Y / V: (FRM = ', ';LEMME=','); Y: (FRM=FRM(DICT(3));LEMME=FRM(*)). RELIMINCJCT: 0(1) / 0: (K = PHRASE); 1: (CAT = CONJCT)&(SOUSC = COORD) => 0. --> %STOP. &GRAM: GRAMWHERE(I). RPRODCJCT$HLT(RPRODCJCT): *(0) / 0: (COORDIN = 0) => X(0) / X: (COORDIN = C). RCOMPLETEVAL: 0(1,*,2,*,3) / 0: (K = GN); 1: (CAT = ADJOINT); 2: (UL = '-'); 3: (CAT = N) => 0(3) / 3:3(FRM=FRM(1)||FRM(2)||FRM(3)). WHRADJDEF: 0(1(2,3(4,5(6(7),8(9))))) / 0: (K = PHRASE); 1: (K = GV); 2: (FS = GOV)&(UL = 'être'); 3: (K = GA); 4: (FS = GOV)&(VERIF(DICT(*)) = T); 5: (KPH = PHINF); 6: (K = GV); 7: (FS = GOV)&(SEMA(DICT(*)) = SITUATION); 8: (K = GNPREP)&(SEMA $>= LIEU); 9: (CAT = N)&(SOUSN=NPRO) => V,X,V2,Y / V: (FRM = 'and ';LEMME='AND'); X: (FRM=FRM(DICT(4))||'.'||FRM(prefixe_expression)||' = '||FRM(recherche_expression)||'.'||FRM(prefixe_expression)||'\n'; LEMME=FRM(prefixe_expression)); V2: (FRM='and ';LEMME='AND'); Y: (FRM=FRM(DICT(4))||'.lieu = \''||FRM(9)||'\'\n';LEMME='CARACTERISTIQUE'). WHRACCEPTVB: 1(2(3,4(5))) / 1: (K = PHRASE); 2: (K = GV); 3: (FS = GOV)&(VERIF(DICT(*)) = T); 4: (K = GN); 5: (FS = GOV)|(CAT = INCONNU) => V,Y,V2,Z / V: (FRM = 'and '); Y: (FRM=FRM(DICT(3))||'.'||FRM(prefixe_expression)||' = '||FRM(recherche_expression)||'.'||FRM(prefixe_expression)||'\n'; LEMME=FRM(prefixe_expression)); V2: (FRM = 'and ';LEMME='AND'); Z: (FRM=FRM(DICT(3))||'.'||FRM(DICT(3,2))||' = \''||FRM(5)||'\'\n';LEMME='CARACTERISTIQUE'). WHRACCEPTVBCIR: 1(2(3),4(5)) / 1: (K = PHRASE); 2: (K = GV); 3: (FS = GOV)&(VERIF(DICT(*)) = T); 4: (K = GNPREP); 5: (FS = GOV)|(CAT = INCONNU) => V,Y,V2,Z / V: (FRM = 'and '); Y: (FRM=FRM(DICT(3))||'.'||FRM(prefixe_expression)||' = '||FRM(recherche_expression)||'.'||FRM(prefixe_expression)||'\n'; LEMME=FRM(prefixe_expression)); V2: (FRM = 'and ';LEMME='AND'); Z: (FRM=FRM(DICT(3))||'.'||FRM(DICT(3,2))||' = \''||FRM(5)||'\'\n';LEMME='CARACTERISTIQUE'). WHRELIMINCJCT: 0(1) / 0: (K = PHRASE); 1: (CAT = CONJCT)&(SOUSC = COORD) => 0. RELIMINAND: 0(*,1,*,2) / 1: (FRM = ''); 2: (FRM='and ') => 0. --> %STOP. &GRAM: GRINTER(I). RSELECTMOINS: 1(*,2(3,4(5),6(*,7,8,9))) / 1: (K = PHRASE); 2: (K = GV); 3: (FS = GOV); 4: (K = GADV); 5: (SOUSA$>= SUPERLATIF); 6: (K = GN); 7: (CAT = DETERM)&(SOUSD = CARD); 8: (CAT = N)&(FS = GOV); 9: (KPH = PHREL) => X(P,IN,PO1,SELECTI(PO2,NSELECT(Y(3,6(4(5),7,8))),PF2),INTER,DSELECT(PO3,Z(N3,N6(N8,9)),PF3),PF1) / P: (FRM = FRM(recherche_expression)||'.'||FRM(prefixe_expression);LEMME=FRM(prefixe_expression)); IN: (FRM = ' in\n';LEMME='IN'); INTER: (FRM='\nintersect\n'; LEMME='INTERSECT'); N3:3; N6:6; N8:8; PO1: (FRM='(';LEMME='('); PO2: (FRM='(';LEMME='('); PO3: (FRM='(';LEMME='('); PF1: (FRM=')';LEMME=')'); PF2: (FRM=')';LEMME=')'); PF3: (FRM=')';LEMME=')'). RCOMPTE: 0(1,2(3(4),5(6),7)) / 1: (FS = GOV)&(VERIF(DICT(*))=T); 2: (K = GN); 3: (K = GADV); 4: (SOUSA=SUPERLATIF); 5: (K = GCARD); 6:(SOUSD = CARD); 7: (FS = GOV)&(CAT = N) => X(SEL,NPR,FRM,GRP,COUNT) / SEL: (FRM='select '; LEMME='SELECT'); NPR: (FRM=FRM(prefixe_expression);LEMME=FRM(prefixe_expression)); FRM: (FRM=' from '||FRM(DICT(1)); LEMME='FROM'); GRP: (FRM='\ngroup by '||FRM(prefixe_expression)||' having ';LEMME='GROUP'); COUNT: (FRM='count(*)';= '||FRM(DICT(6))>; LEMME='COUNT'). RDEFLG: 0(1,2(3,4?(5))) / 1: (FS = GOV)&(VERIF(DICT(*))=T); 2: (K = GN); 3: (CAT = N); 4: (KPH = PHREL); 5 : ((CAT = N)|(CAT = INCONNU))&(FS = GOV) => X(SEL,NPR,FRM,WHERE) / SEL: (FRM='select ';LEMME='select'); NPR : (FRM=FRM(prefixe_expression);LEMME=FRM(prefixe_expression)); FRM: (FRM = ' from '||FRM(DICT(1));LEMME='FROM'); WHERE: (FRM='\nwhere '||FRM(DICT(1))|| '.'||FRM(3)||' = \''||FRM(5)||'\'';LEMME='WHERE'). RSELECTMOINSUNIQ: 1(*,2(3,4(5),6(*,7,8))) / 1: (K = PHRASE); 2: (K = GV); 3: (FS = GOV); 4: (K = GADV); 5: (SOUSA$>= SUPERLATIF); 6: (K = GN); 7: (CAT = DETERM)&(SOUSD = CARD); 8: (CAT = N)&(FS = GOV) => X(P,IN,PO1,SELECTI(NSELECT(Y(3,6(4(5),7,8)))),PF1) / P: (FRM = FRM(recherche_expression)||'.'||FRM(prefixe_expression);LEMME=FRM(prefixe_expression)); IN: (FRM = ' in\n';LEMME='IN'); PO1: (FRM='(';LEMME='('); PF1: (FRM=')';LEMME=')'). --> %STOP. &FIN.