Пример #1
0
 /// <summary>
 /// Crea sumant els valors de dos objectes MorfoGram.
 /// Per als objectes inexistents, se suposa el valor NOCAT, NOTEMPS, etc.
 /// Si els valors són incompatibles, es provoca una excepció.
 /// </summary>
 /// <param name="mf1">El primer MorfoGram</param>
 /// <param name="mf2">El segon MorfoGram</param>
 public MorfoGram(MorfoGram mf1, MorfoGram mf2)
 {
     if (mf1 == null && mf2 == null)
         return;
     if (mf1 == null || mf2 == null)
     {
         MorfoGram mfx = (mf1 != null) ? mf1 : mf2;
         cat = mfx.Cat;
         temps = mfx.Temps;
         pers = mfx.Pers;
         gen = mfx.Gen;
         nbre = mfx.Nbre;
         return;
     }
     if (Unificables(mf1, mf2))
     {
         cat = (mf1.Cat != eCat.NOCAT) ? mf1.Cat : mf2.Cat;
         temps = (mf1.Temps != eTemps.NOTEMPS) ? mf1.Temps : mf2.Temps;
         pers = (mf1.Pers != ePers.NOPERS) ? mf1.Pers : mf2.Pers;
         gen = (mf1.Gen != eGen.NOGEN) ? mf1.Gen : mf2.Gen;
         nbre = (mf1.Nbre != eNbre.NONBRE) ? mf1.Nbre : mf2.Nbre;
     }
     else
     {
         if ((mf1.Cat != eCat.NOCAT) && (mf2.Cat != eCat.NOCAT) && (mf1.Cat != mf2.Cat))
             throw new Exception(String.Format("Categories incompatibles ({0}, {1})", mf1.ToString(), mf2.ToString()));
         if ((mf1.Temps != eTemps.NOTEMPS) && (mf2.Temps != eTemps.NOTEMPS) && (mf1.Temps != mf2.Temps))
             throw new Exception(String.Format("Temps incompatibles ({0}, {1})", mf1.ToString(), mf2.ToString()));
         if ((mf1.Pers != ePers.NOPERS) && (mf2.Pers != ePers.NOPERS) && (mf1.Pers != mf2.Pers))
             throw new Exception(String.Format("Persones incompatibles ({0}, {1})", mf1.ToString(), mf2.ToString()));
         if ((mf1.Gen != eGen.NOGEN) && (mf2.Gen != eGen.NOGEN) && (mf1.Gen != mf2.Gen))
             throw new Exception(String.Format("Gèneres incompatibles ({0}, {1})", mf1.ToString(), mf2.ToString()));
         if ((mf1.Nbre != eNbre.NONBRE) && (mf2.Nbre != eNbre.NONBRE) && (mf1.Nbre != mf2.Nbre))
             throw new Exception(String.Format("Categories incompatibles ({0}, {1})", mf1.ToString(), mf2.ToString()));
     }
 }
Пример #2
0
 private void test_04(GrupTest arrel)
 {
     GrupTest grup = arrel.NouGrup("Entrades i mots");
     Regles regles = CarregaRegles(true);
     Identificador idDIEC = new IdentificadorDIEC("*** buit ***", regles, null);
     grup.NouTest("Entrades ignorades", delegate(RTest resultat)
     {
         Entrada entrada;
         Regex trosseja = new Regex(@"\|\|");
         string entrades = "ent=-adelf -adelfa||ent=ab-";
         foreach (string tros in trosseja.Split(entrades))
         {
             entrada = idDIEC.IdentificaEntrada(tros);
             resultat.Assert(entrada == null, "S'hauria d'ignorar \"{0}\"", tros);
         }
     });
     grup.NouTest("Neteja d'entrades", delegate(RTest resultat)
     {
         Entrada entrada;
         entrada = idDIEC.IdentificaEntrada("ent=a1^cat1=f.^com1=pl. as");
         resultat.Esperat("a", entrada.Arrel);
         entrada = idDIEC.IdentificaEntrada("ent=abaltir-se^cat1=v. pron.");
         resultat.Esperat("abaltir", entrada.Arrel);
         entrada = idDIEC.IdentificaEntrada("ent=abastador2 abastadora^cat1=m. i f.");
         resultat.Esperat("abastador abastadora", entrada.Arrel);
     });
     grup.NouTest("Informació morfològica i gramatical", delegate(RTest resultat)
     {
         MorfoGram mf1 = new MorfoGram();
         resultat.Esperat("ND", mf1.ToString());
         MorfoGram mf2 = new MorfoGram(MorfoGram.eCat.NOM);
         resultat.Esperat("NOM", mf2.ToString());
         MorfoGram mf12 = new MorfoGram(mf1, mf2);
         resultat.Esperat("NOM", mf12.ToString());
         MorfoGram mf3 = new MorfoGram(MorfoGram.eCat.VERB);
         try
         {
             MorfoGram mf23 = new MorfoGram(mf2, mf3);
             resultat.Error("Error indetectat unint {0} i {1}", mf2, mf3);
         }
         catch (Exception exc)
         {
             resultat.Nota("Error esperat intentant unir {0} i {1} ({2})", mf2, mf3, exc.Message);
         }
         MorfoGram mf4 = new MorfoGram(MorfoGram.eCat.NOCAT, MorfoGram.eTemps.IPR, MorfoGram.ePers.P3);
         resultat.Esperat("IPR.P3", mf4.ToString());
         MorfoGram mf34 = new MorfoGram(mf3, mf4);
         resultat.Esperat("VERB.IPR.P3", mf34.ToString());
     });
 }
Пример #3
0
 /// <summary>
 /// Crea amb informació morfogramatical.
 /// No admet a cap tros.
 /// </summary>
 /// <param name="mgComuna">Informació morfològica i gramatical comuna a totes les formes.</param>
 public PC_trossos(MorfoGram mgComuna)
     : base(mgComuna.ToString() + ", D-, L-")
 {
     this.mgComuna = mgComuna;
     admetD = false;
     admetL = false;
     esLlista = false;
     mgArrel = null;
 }
Пример #4
0
 /// <summary>
 /// Crea amb informació morfogramatical.
 /// </summary>
 /// <param name="mgComuna">Informació morfològica i gramatical comuna a totes les formes.</param>
 /// <param name="admetD">Admet "d'".</param>
 /// <param name="admetL">Admet "l'".</param>
 /// <param name="esLlista">Si els trossos són una llista. Si és true, admetD i admetL
 /// afecten tots els trossos. Si és false, només afecten el primer tros.</param>
 public PC_trossos(MorfoGram mgComuna, bool admetD, bool admetL, bool esLlista)
     : base(mgComuna.ToString() + (admetD ? ", D+" : ", D-"))
 {
     this.mgComuna = mgComuna;
     this.admetD = admetD;
     this.admetL = admetL;
     this.esLlista = esLlista;
     mgArrel = null;
 }
Пример #5
0
 /// <summary>
 /// Crea a partir del plural i amb informació d'apostrofació.
 /// </summary>
 /// <param name="mgComuna">Informació morfològica i gramatical comuna a totes les formes.</param>
 /// <param name="singular">Paraula en singular</param>
 /// <param name="plural">Plural precalculat.</param>
 /// <param name="admetD">Totes les formes admeten la preposició "de" apostrofada.</param>
 /// <param name="admetL">El singular admet l'article apostrofat.</param>
 public PC_plural_precalc(MorfoGram mgComuna, Paraula singular, string plural, bool admetD, bool admetL)
     : base(mgComuna.ToString() + " " /*+ singular + "/" + plural*/ + (admetD ? ", d'" : "") + (admetL ? ", l'" : ""))
 {
     this.mgComuna = mgComuna;
     mgArrel = null;
     this.singular = singular.Forma;
     this.plural = plural;
     // Interpretam la notació "abacà -às"
     if (plural.StartsWith("-"))
         this.plural = singular.PreTonica + plural.Substring(1);
     // PERFER: mirar si és aplicable la regla 'E'
     this.admetD = admetD;
     this.admetL = admetL;
 }