diff --git a/src/portuguese/LexiconPor.gf b/src/portuguese/LexiconPor.gf index e73032af..b04c36bc 100644 --- a/src/portuguese/LexiconPor.gf +++ b/src/portuguese/LexiconPor.gf @@ -1,363 +1,360 @@ --# -path=.:../romance:../common:../abstract:../../prelude -concrete LexiconPor of Lexicon = CatPor ** open - (M=MorphoPor), ParadigmsPor, BeschPor in { +concrete LexiconPor of Lexicon = CatPor ** open + (M=MorphoPor), ParadigmsPor, BeschPor, Prelude in { -flags - coding=utf8 ; +flags optimize=values ; lin - airplane_N = regN "aeroplano" ; -- avión is masculine - answer_V2S = mkV2S (regV "responder") dative ; - apartment_N = regN "apartamento" ; - apple_N = regN "manzana" ; - art_N = regN "arte" ; - ask_V2Q = mkV2Q (regV "preguntar") dative ; - baby_N = regN "bebé" ; -- can be used for both fem. & masc. - bad_A = prefA (mkADeg (regA "malo") (regA "peor")) ; - bank_N = regN "banco" ; - beautiful_A = prefA (regADeg "bello") ; -- bella - become_VA = reflV (mkV "convertir" "convierto") ; --- convertirse en, volverse, ponerse - beer_N = regN "cerveza" ; - beg_V2V = mkV2V (mkV "rogar" "ruego") accusative dative ; -- pedir - big_A = prefA (regADeg "grande") ; - bike_N = regN "bicicleta" ; - bird_N = regN "pájaro" ; - black_A = regADeg "negro" ; -- negra - blue_A = regADeg "azul" ; - boat_N = regN "bote" ; - book_N = regN "libro" ; - boot_N = regN "bota" ; - boss_N = regN "jefe" ; - boy_N = regN "niño" ; - bread_N = regN "pan" ; - break_V2 = dirV2 (special_ppV (regV "romper") "roto") ; - broad_A = regADeg "ancho" ; - brother_N2 = deN2 (regN "hermano") ; - brown_A = regADeg "marrón" ; --- * - butter_N = regN "manteca" ; - buy_V2 = dirV2 (regV "comprar") ; - camera_N = regN "cámara" ; -- ["máquina fotográfica"] - cap_N = regN "gorra" ; - car_N = regN "auto" ; - carpet_N = regN "alfombra" ; - cat_N = regN "gato" ; -- gata - ceiling_N = regN "techo" ; - chair_N = regN "silla" ; - cheese_N = regN "queso" ; - child_N = regN "niño" ; -- niña - church_N = regN "iglesia" ; - city_N = femN (regN "ciudad") ; -- fem - clean_A = regADeg "limpio" ; - clever_A = regADeg "inteligente" ; - close_V2 = dirV2 (mkV "cerrar" "cierro") ; - coat_N = regN "abrigo" ; - cold_A = regADeg "frío" ; -- fría - come_V = verboV (venir_82 "venir") ; - computer_N = regN "ordenador" ; -- also computador, ordenador in Porin - country_N = regN "país" ; -- masc - cousin_N = regN "primo" ; - cow_N = regN "vaca" ; - die_V = verboV (morir_35b "morir") ; - dirty_A = regADeg "sucio" ; - distance_N3 = mkN3 (regN "distancia") genitive dative ; - doctor_N = regN "médico" ; -- médica - dog_N = regN "perro" ; -- perra - door_N = regN "puerta" ; - drink_V2 = dirV2 (regV "tomar") ; -- beber easy_A2V = mkA2V (regA "fácil") dative genitive ; - eat_V2 = dirV2 (regV "comer") ; - empty_A = regADeg "vacío" ; - enemy_N = regN "enemigo" ; -- enemiga - factory_N = regN "fábrica" ; - father_N2 = deN2 (regN "padre") ; - fear_VS = mkVS (regV "temer") ; - find_V2 = dirV2 (verboV (encontrar_38 "encontrar")) ; - fish_N = mascN (regN "pez") ; - floor_N = regN "suelo" ; -- piso - forget_V2 = dirV2 (regV "olvidar") ; - fridge_N = regN "heladera" ; - friend_N = regN "amigo" ; -- amiga - fruit_N = regN "fruta" ; - fun_AV = mkAV (regA "divertido") genitive ; -- entretenido - garden_N = regN "jardín" ; - girl_N = regN "niña" ; - glove_N = regN "guante" ; - gold_N = regN "oro" ; - good_A = prefA (mkADeg (regA "bueno") (regA "mejor")) ; ---- adv? - go_V = (verboV (ir_46 "ir")) ; - green_A = regADeg "verde" ; - harbour_N = regN "puerto" ; - hate_V2 = dirV2 (mkV "odiar" "odio") ; - hat_N = regN "sombrero" ; - hear_V2 = dirV2 (mkV (oir_51 "oír")) ; - hill_N = regN "colina" ; - hope_VS = mkVS (regV "esperar") ; - horse_N = regN "caballo" ; - hot_A = regADeg "caliente" ; - house_N = regN "casa" ; - important_A = regADeg "importante" ; - industry_N = regN "industria" ; - iron_N = regN "hierro" ; - king_N = regN "rey" ; - know_V2 = mkV2 (verboV (conocer_25 "conocer")) ; - know_VQ = mkVQ (verboV (saber_71 "saber")) ; - know_VS = mkVS (verboV (saber_71 "saber")) ; - lake_N = regN "lago" ; - lamp_N = regN "lámpara" ; - learn_V2 = dirV2 (regV "aprender") ; - leather_N = regN "cuero" ; - leave_V2 = dirV2 (regV "partir") ; -- irse, dejar - like_V2 = dirV2 (regV "gustar") ; - listen_V2 = dirV2 (regV "escuchar") ; - live_V = verboV (vivir_7 "vivir") ; - long_A = regADeg "largo" ; - lose_V2 = dirV2 (verboV (defender_29 "perder")) ; - love_N = regN "amor" ; - love_V2 = dirV2 (regV "amar") ; - man_N = regN "hombre" ; -- masc married_A2 = mkA2 (regA "casado") dative ; - meat_N = femN (regN "carne") ; - milk_N = femN (regN "leche") ; - moon_N = regN "luna" ; - mother_N2 = deN2 (mkN "madre" feminine) ; - mountain_N = mkN "montaña" ; - music_N = mkN "música" ; - narrow_A = regADeg "estrecho" ; - new_A = prefA (regADeg "nuevo") ; - newspaper_N = mkN "periódico" ; -- diario - oil_N = mkN "aceite" ; - old_A = prefA (regADeg "viejo") ; - open_V2 = dirV2 (special_ppV (regV "abrir") "abierto") ; - paint_V2A = mkV2A (regV "pintar") accusative (mkPrep "en") ; - paper_N = mkN "papel" ; - paris_PN = mkPN "París" masculine ; - peace_N = mkN "paz" feminine ; - pen_N = mkN "lapicera" ; - planet_N = mkN "planeta" masculine ; - plastic_N = mkN "plástico" ; - play_V2 = dirV2 (verboV (jugar_47 "jugar")) ; - policeman_N = mkN "policía" masculine ; -- fem refers to the institution - priest_N = mkN "cura" masculine ; -- masc - probable_AS = mkAS (regA "probable") ; - queen_N = mkN "reina" ; - question_N = mkN "pregunta" ; - radio_N = mkN "radio" feminine ; - rain_V0 = mkV0 (verboV (llover_89 "llover")) ; - read_V2 = dirV2 (verboV (creer_26 "leer")) ; - reason_N = mkN "razón" feminine ; - red_A = regADeg "rojo" ; - religion_N = mkN "religión" "religiones" feminine ; - restaurant_N = mkN "restaurante" ; -- restorán, restaurán, masc - river_N = mkN "río" ; - rock_N = mkN "roca" ; - roof_N = mkN "techo" ; - rubber_N = regN "goma" ; - run_V = regV "correr" ; - say_VS = mkVS (verboV (decir_28 "decir")) ; - school_N = regN "escuela" ; - science_N = regN "ciencia" ; - sea_N = regN "mar" ; -- masc & fem - seek_V2 = dirV2 (regV "buscar") ; - see_V2 = dirV2 (verboV (ver_83 "ver")) ; - sell_V3 = dirV3 (regV "vender") dative ; - send_V3 = dirV3 (regV "mandar") dative ; - sheep_N = regN "oveja" ; - ship_N = femN (regN "nave") ; - shirt_N = regN "camisa" ; - shoe_N = regN "zapato" ; - shop_N = regN "negocio" ; - short_A = regADeg "corto" ; --- breve - silver_N = regN "plata" ; - sister_N = regN "hermana" ; - sleep_V = verboV (dormir_35 "dormir") ; - small_A = prefA (regADeg "pequeño") ; - snake_N = femN (regN "serpiente") ; -- fem - sock_N = regN "media" ; - speak_V2 = dirV2 (regV "hablar") ; - star_N = regN "estrella" ; - steel_N = regN "acero" ; - stone_N = regN "piedra" ; - stove_N = regN "horno" ; -- estufa - student_N = regN "estudiante" ; -- used both for fem & masc - stupid_A = regADeg "estúpido" ; - sun_N = regN "sol" ; - switch8off_V2 = dirV2 (regV "apagar") ; - switch8on_V2 = dirV2 (regV "prender") ; - table_N = regN "mesa" ; - talk_V3 = mkV3 (regV "hablar") dative genitive ; - teacher_N = regN "maestro" ; -- maestra - teach_V2 = dirV2 (regV "enseñar") ; - television_N = mkN "televisión" feminine ; -- televisor masc - thick_A = regADeg "grueso" ; - thin_A = regADeg "fino" ; -- delgado - train_N = regN "tren" ; - travel_V = regV "viajar" ; - tree_N = regN "árbol" ; - --- trousers_N = regN "pantalón" ; -- masc - ugly_A = regADeg "feo" ; - understand_V2 = dirV2 (mkV "entender" "entiendo") ; - university_N = femN (regN "universidad") ; - village_N = regN "pueblo" ; - wait_V2 = mkV2 (regV "esperar") dative ; - walk_V = mkV "caminar" ; - warm_A = regADeg "caliente" ; - war_N = mkN "guerra" ; - watch_V2 = dirV2 (regV "mirar") ; -- ver - water_N = mkN "agua" ; - white_A = compADeg (regA "blanco") ; - window_N = regN "ventana" ; - wine_N = regN "vino" ; - win_V2 = dirV2 (regV "ganar") ; - woman_N = mkN "mujer" feminine ; - wonder_VQ = mkVQ (reflV (regV "preguntar")) ; - wood_N = regN "madera" ; - write_V2 = dirV2 (special_ppV (regV "escribir") "escrito") ; - yellow_A = regADeg "amarillo" ; - young_A = prefA (mkA "joven" "joven" "jóvenes" "jóvenes" "jovenamente") ; - - do_V2 = dirV2 (verboV (hacer_44 "hacer")) ; - now_Adv = mkAdv "ahora" ; + probable_AS = mkAS (regA "provável") ; + fun_AV = mkAV (regA "divertido") genitive ; + -- A + bad_A = prefA (mkADeg (regA "mau") (regA "pior")) ; + beautiful_A = prefA (regADeg "belo") ; -- bela + big_A = prefA (regADeg "grande") ; + black_A = regADeg "preto" ; -- preta + blue_A = regADeg "azul" ; + broad_A = regADeg "largo" ; + brown_A = regADeg "marrom" ; --- * + clean_A = regADeg "limpo" ; + clever_A = regADeg "inteligente" ; + cold_A = regADeg "frio" ; -- fria + correct_A = regA "correcto" ; + dirty_A = regADeg "sujo" ; + dry_A = regA "seco" ; + dull_A = regA "desafilado" ; + empty_A = regADeg "vazio" ; + full_A = regA "lleno" ; + good_A = prefA (mkADeg (regA "bom") (regA "melhor")) ; ---- adv? + green_A = regADeg "verde" ; + heavy_A = regA "pesado" ; + hot_A = regADeg "quente" ; + important_A = regADeg "importante" ; + long_A = regADeg "longo" ; + narrow_A = regADeg "estreito" ; + near_A = regA "cercano" ; + new_A = prefA (regADeg "novo") ; + old_A = prefA (regADeg "velho") ; + red_A = regADeg "vermelho" ; + rotten_A = regA "podrido" ; + round_A = regA "redondo" ; + sharp_A = regA "filoso" ; -- afilado, puntiagudo + short_A = regADeg "curto" ; --- breve, pequeno, baixo + small_A = prefA (regADeg "pequeno") ; + smooth_A = regA "liso" ; -- suave + straight_A = regA "directo" ; + stupid_A = regADeg "estúpido" ; + thick_A = regADeg "grosso" ; + thin_A = regADeg "fino" ; -- delgado + ugly_A = regADeg "feio" ; + warm_A = regADeg "quente" ; + wet_A = regA "mojado" ; + white_A = compADeg (regA "blanco") ; + wide_A = regA "ancho" ; -- extenso + yellow_A = regADeg "amarillo" ; + young_A = prefA (mkA "joven" "joven" "jóvenes" "jóvenes" "jovenamente") ; already_Adv = mkAdv "ya" ; - song_N = mkN "canción" "canciones" feminine ; + far_Adv = mkAdv "lejos" ; ----? + now_Adv = mkAdv "ahora" ; + today_Adv = mkAdv "hoje" ; + brother_N2 = deN2 (mkN "irmão") ; + father_N2 = deN2 (mkN "pai") ; + mother_N2 = deN2 (mkN "mãe" feminine) ; + distance_N3 = mkN3 (mkN "distância") genitive dative ; + -- N + airplane_N = mkN "avião" masculine ; -- is masculine + animal_N = mkN "animal" ; -- masc (sometimes fem when adj) + apartment_N = mkN "apartamento" ; + apple_N = mkN "maçã" "maçãs" ; + art_N = mkN "arte" feminine ; + ashes_N = mkN "cinza" ; + baby_N = mkN "bebê" ; -- can be used for both fem. & masc. + back_N = mkN "costas" "costas" feminine ; + bank_N = mkN "banco" ; + bark_N = mkN "casca" ; + beer_N = mkN "cerveja" ; + belly_N = mkN "barriga" ; + bike_N = mkN "bicicleta" ; + bird_N = mkN "pássaro" ; + blood_N = mkN "sangue" nonExist ; + boat_N = mkN "bote" ; + bone_N = mkN "osso" ; + book_N = mkN "livro" ; + boot_N = mkN "bota" ; + boss_N = mkN "chefe"; -- Fem can be both "chefa" or "chefe" ; + boy_N = mkN "menino" ; + bread_N = mkN "pão" "pães" masculine ; + breast_N = mkN "seio" ; -- pecho + butter_N = mkN "manteiga" ; + camera_N = mkN "câmera" ; -- ["máquina fotográfica"] + cap_N = mkN "gorro" ; + car_N = mkN "carro" ; + carpet_N = mkN "tapete" ; + cat_N = mkN "gato" ; -- gata + ceiling_N = mkN "teto" ; + chair_N = mkN "cadeira" ; + cheese_N = mkN "queijo" ; + child_N = mkN "criança" ; + church_N = mkN "igreja" ; + city_N = mkN "cidade" feminine ; + cloud_N = mkN "nuvem" feminine ; + coat_N = mkN "abrigo" ; + computer_N = mkN "computador" ; + country_N = mkN "país" ; -- masc + cousin_N = mkN "primo" ; + cow_N = mkN "vaca" ; + day_N = mkN "dia" masculine ; + doctor_N = mkN "médico" ; -- médica + dog_N = mkN "cachorro" ; -- cadela + door_N = mkN "porta" ; + dust_N = mkN "poeira" nonExist ; + ear_N = mkN "orelha" ; + earth_N = mkN "terra" ; + egg_N = mkN "ovo" ; + enemy_N = mkN "inimigo" ; -- inimiga + eye_N = mkN "olho" ; + factory_N = mkN "fábrica" ; + fat_N = mkN "gordura" ; + feather_N = mkN "pena" ; + fingernail_N = mkN "unha" ; + fire_N = mkN "fogo" ; + fish_N = mkN "peixe" ; + floor_N = mkN "chão" nonExist ; -- piso + flower_N = mkN "flor" feminine ; + fog_N = mkN "névoa" ; + foot_N = mkN "pé" ; + forest_N = mkN "floresta" ; + fridge_N = mkN "geladeira" ; + friend_N = mkN "amigo" ; -- amiga + fruit_N = mkN "fruta" ; + garden_N = mkN "jardim" ; + girl_N = mkN "menina" ; + glove_N = mkN "luva" ; + gold_N = mkN "ouro" nonExist ; + grammar_N = mkN "gramática" ; + grass_N = mkN "grama" nonExist ; + guts_N = mkN "tripa" ; + hair_N = mkN "cabelo" nonExist ; + hand_N = mkN "mão" "mãos" feminine ; + harbour_N = mkN "porto" ; + hat_N = mkN "chapéu" ; + head_N = mkN "cabeça" ; + heart_N = mkN "coração" masculine ; + hill_N = mkN "morro" ; -- colina + horn_N = mkN "chifre" ; + horse_N = mkN "cavalo" ; + house_N = mkN "casa" ; + husband_N = mkN "marido" ; -- esposo + ice_N = mkN "gelo" ; + industry_N = mkN "indústria" ; + iron_N = mkN "ferro" ; + king_N = mkN "rei" ; + knee_N = mkN "joelho" ; + lake_N = mkN "lago" ; + lamp_N = mkN "lâmpada" ; + language_N = mkN "linguagem" ; + leaf_N = mkN "folha" ; + leather_N = mkN "couro" nonExist ; + leg_N = mkN "perna" ; + liver_N = mkN "fígado" ; + louse_N = mkN "piolho" ; + love_N = mkN "amor" ; + man_N = mkN "homem" ; -- masc + meat_N = mkN "carne" feminine ; + milk_N = mkN "leite" ; + moon_N = mkN "lua" ; + mountain_N = mkN "montanha" ; + mouth_N = mkN "boca" ; + music_N = mkN "música" ; + name_N = mkN "nome" ; + neck_N = mkN "pescoço" ; + newspaper_N = mkN "jornal" ; + night_N = mkN "noite" feminine ; + nose_N = mkN "nariz" ; + number_N = mkN "número" ; + oil_N = mkN "óleo" ; + paper_N = mkN "papel" ; + peace_N = mkN "paz" feminine ; + pen_N = mkN "caneta" ; + person_N = mkN "pessoa" ; + planet_N = mkN "planeta" masculine ; + plastic_N = mkN "plástico" ; + policeman_N = mkN "policial" ; + priest_N = mkN "padre" ; -- masc + queen_N = mkN "rainha" ; + question_N = mkN "pergunta" ; + radio_N = mkN "rádio" ; + rain_N = mkN "chuva" ; + reason_N = mkN "razão" ; + religion_N = mkN "religião" ; + restaurant_N = mkN "restaurante" ; + river_N = mkN "rio" ; + road_N = mkN "estrada" ; + rock_N = mkN "rocha" ; + roof_N = mkN "telhado" ; + root_N = mkN "raiz" feminine ; + rope_N = mkN "corda" ; + rubber_N = mkN "borracha" ; + rule_N = mkN "regra" ; + salt_N = mkN "sal" ; + sand_N = mkN "areia" nonExist ; + school_N = mkN "escola" ; + science_N = mkN "ciência" ; + sea_N = mkN "mar" ; + seed_N = mkN "semente" ; + sheep_N = mkN "ovelha" ; + ship_N = mkN "navio" ; + shirt_N = mkN "camisa" ; + shoe_N = mkN "sapato" ; + shop_N = mkN "loja" ; + silver_N = mkN "prata" nonExist ; + sister_N = mkN "irmã" ; + skin_N = mkN "pele" feminine ; + sky_N = mkN "céu" ; + smoke_N = mkN "fumaça" nonExist ; + snake_N = mkN "cobra" ; + snow_N = mkN "neve" nonExist feminine ; + sock_N = mkN "meia" ; + song_N = mkN "canção" "canções" feminine ; + star_N = mkN "estrela" ; + steel_N = mkN "aço" nonExist ; + stick_N = mkN "bastão" "bastões" ; + stone_N = mkN "pedra" ; + stove_N = mkN "forno" ; + student_N = mkN "estudante" ; -- used both for fem & masc + sun_N = mkN "sol" ; + table_N = mkN "mesa" ; + tail_N = mkN "rabo" ; + teacher_N = mkN "professor" ; + television_N = mkN "televisão" ; + tongue_N = mkN "língua" ; + tooth_N = mkN "dente" ; + train_N = mkN "trem" ; + tree_N = mkN "árvore" feminine ; + university_N = mkN "universidade" ; + village_N = mkN "vila" ; + war_N = mkN "guerra" ; + water_N = mkN "água" ; + wife_N = mkN "esposa" ; + wind_N = mkN "vento" ; + window_N = mkN "janela" ; + wine_N = mkN "vinho" ; + wing_N = mkN "asa" ; + woman_N = mkN "mulher" feminine ; + wood_N = mkN "madeira" ; + worm_N = mkN "verme" ; -- lombriga (Fem) + year_N = mkN "ano" ; + left_Ord = M.mkOrd (regA "esquerda") ; + right_Ord = M.mkOrd (regA "direita") ; + john_PN = mkPN "João" masculine ; + paris_PN = mkPN "Paris" feminine ; + rain_V0 = mkV0 (verboV (llover_89 "chover")) ; + paint_V2A = mkV2A (regV "pintar") accusative (mkPrep "em") ; + ask_V2Q = mkV2Q (regV "perguntar") dative ; + answer_V2S = mkV2S (regV "responder") dative ; + beg_V2V = mkV2V (mkV "rogar" "rogo") accusative dative ; -- pedir + -- V2 + bite_V2 = dirV2 (verboV (morder_50b "morder")) ; + break_V2 = dirV2 (special_ppV (regV "romper") "rompido") ; + buy_V2 = dirV2 (regV "comprar") ; + close_V2 = dirV2 (mkV "fechar" "fechado") ; + count_V2 = dirV2 (verboV (contar_38b "contar")) ; + cut_V2 = dirV2 (regV "cortar") ; + do_V2 = dirV2 (verboV (hacer_44 "fazer")) ; + drink_V2 = dirV2 (regV "beber") ; + eat_V2 = dirV2 (regV "comer") ; + fear_V2 = dirV2 (regV "temer") ; + fight_V2 = dirV2 (regV "lutar") ; + find_V2 = dirV2 (verboV (encontrar_38 "encontrar")) ; + forget_V2 = dirV2 (regV "esquecer") ; + hate_V2 = dirV2 (mkV "odiar" "ódio") ; + hear_V2 = dirV2 (mkV (oir_51 "ouvir")) ; + hit_V2 = dirV2 (regV "bater") ; + hold_V2 = dirV2 (verboV (tener_4 "ter")) ; + hunt_V2 = dirV2 (regV "caçar") ; + kill_V2 = dirV2 (regV "matar") ; + know_V2 = mkV2 (verboV (conocer_25 "conhecer")) ; + learn_V2 = dirV2 (regV "aprender") ; + leave_V2 = dirV2 (regV "partir") ; -- irse, dejar + like_V2 = dirV2 (regV "gostar") ; + listen_V2 = dirV2 (regV "escutar") ; + lose_V2 = dirV2 (verboV (defender_29 "perder")) ; + love_V2 = dirV2 (regV "amar") ; + open_V2 = dirV2 (special_ppV (regV "abrir") "aberto") ; + play_V2 = dirV2 (verboV (jugar_47 "jogar")) ; + pull_V2 = dirV2 (regV "tirar") ; + push_V2 = dirV2 (regV "empurrar") ; + put_V2 = dirV2 (verboV (poner_60 "por")) ; + read_V2 = dirV2 (verboV (creer_26 "ler")) ; + rub_V2 = dirV2 (regV "resfregar") ; + scratch_V2 = dirV2 (regV "rascar") ; + see_V2 = dirV2 (verboV (ver_83 "ver")) ; + seek_V2 = dirV2 (regV "buscar") ; + speak_V2 = dirV2 (regV "falar") ; + split_V2 = dirV2 (regV "separar") ; -- dividir,) ; + squeeze_V2 = dirV2 (regV "exprimir") ; + stab_V2 = dirV2 (regV "apuñalar") ; + suck_V2 = dirV2 (regV "chupar") ; + switch8off_V2 = dirV2 (regV "apagar") ; + switch8on_V2 = dirV2 (regV "ligar") ; -- acender + teach_V2 = dirV2 (regV "enseñar") ; + throw_V2 = dirV2 (regV "tirar") ; + tie_V2 = dirV2 (regV "atar") ; + understand_V2 = dirV2 (mkV "entender" "entiendo") ; + wait_V2 = mkV2 (regV "esperar") dative ; + wash_V2 = dirV2 (regV "lavar") ; + watch_V2 = dirV2 (regV "mirar") ; -- ver + win_V2 = dirV2 (regV "ganar") ; + wipe_V2 = dirV2 (regV "secar") ; + write_V2 = dirV2 (special_ppV (regV "escribir") "escrito") ; add_V3 = dirV3 (regV "sumar") dative ; - number_N = regN "número" ; - put_V2 = dirV2 (verboV (poner_60 "poner")) ; - stop_V = regV "parar" ; - jump_V = regV "saltar" ; - - left_Ord = M.mkOrd (regA "izquierda") ; - right_Ord = M.mkOrd (regA "derecha") ; - far_Adv = mkAdv "lejos" ; ----? - correct_A = regA "correcto" ; - dry_A = regA "seco" ; - dull_A = regA "desafilado" ; - full_A = regA "lleno" ; - heavy_A = regA "pesado" ; - near_A = regA "cercano" ; - rotten_A = regA "podrido" ; - round_A = regA "redondo" ; - sharp_A = regA "filoso" ; -- afilado, puntiagudo - smooth_A = regA "liso" ; -- suave - straight_A = regA "directo" ; - wet_A = regA "mojado" ; - wide_A = regA "ancho" ; -- extenso - animal_N = regN "animal" ; -- masc (sometimes fem when adj) - ashes_N = regN "ceniza" ; - back_N = regN "espalda" ; - bark_N = regN "corteza" ; - belly_N = regN "panza" ; -- barriga - blood_N = femN (regN "sangre") ; - bone_N = regN "hueso" ; - breast_N = regN "seno" ; -- pecho - cloud_N = femN (regN "nube") ; - day_N = mascN (regN "día") ; - dust_N = regN "polvo" ; - ear_N = regN "oreja" ; - earth_N = regN "tierra" ; - egg_N = regN "huevo" ; - eye_N = regN "ojo" ; - fat_N = regN "grasa" ; - feather_N = regN "pluma" ; - fingernail_N = regN "uña" ; - fire_N = regN "fuego" ; - flower_N = femN (regN "flor") ; - fog_N = regN "niebla" ; - foot_N = regN "pie" ; - forest_N = regN "bosque" ; - grass_N = regN "pasto" ; -- hierba, césped (masc) - guts_N = regN "tripa" ; -- gut=intestino ---- pl.t. tripas - hair_N = regN "cabello" ; -- pelo - hand_N = femN (regN "mano") ; - head_N = regN "cabeza" ; - heart_N = mkN "corazón" "corazones" masculine ; - horn_N = regN "cuerno" ; - husband_N = regN "marido" ; -- esposo - ice_N = regN "hielo" ; - knee_N = regN "rodilla" ; - leaf_N = regN "hoja" ; - leg_N = regN "pierna" ; - liver_N = regN "hígado" ; - louse_N = regN "piojo" ; - mouth_N = regN "boca" ; - name_N = regN "nombre" ; - neck_N = regN "cuello" ; - night_N = femN (regN "noche") ; - nose_N = femN (regN "nariz") ; - person_N = regN "persona" ; - rain_N = regN "lluvia" ; - road_N = femN (regN "calle") ; -- camino - root_N = femN (regN "raíz") ; - rope_N = regN "cuerda" ; - salt_N = femN (regN "sal") ; - sand_N = regN "arena" ; - seed_N = regN "semilla" ; - skin_N = femN (regN "piel") ; -- fem - sky_N = regN "cielo" ; - smoke_N = regN "humo" ; - snow_N = femN (regN "nieve") ; -- fem - stick_N = mkN "bastón" "bastones" masculine ; -- palo - tail_N = regN "cola" ; - tongue_N = regN "lengua" ; - tooth_N = regN "diente" ; - wife_N = regN "esposa" ; - wind_N = regN "viento" ; - wing_N = regN "ala" ; - worm_N = regN "gusano" ; -- lombriz (fem) - year_N = regN "año" ; - bite_V2 = dirV2 (verboV (morder_50b "morder")) ; - blow_V = regV "soplar" ; - burn_V = regV "quemar" ; - count_V2 = dirV2 (verboV (contar_38b "contar")) ; - cut_V2 = dirV2 (regV "cortar") ; - dig_V = regV "escarbar" ; - fall_V = verboV (caer_20 "caer") ; - fear_V2 = dirV2 (regV "temer") ; - fight_V2 = dirV2 (regV "pelear") ; - float_V = regV "flotar" ; - flow_V = verboV (influir_45 "fluir") ; -- circular - fly_V = regV "volar" ; - freeze_V = regV "congelar" ; give_V3 = dirdirV3 (verboV (dar_27 "dar")) ; - hit_V2 = dirV2 (regV "golpear") ; - hold_V2 = dirV2 (verboV (tener_4 "tener")) ; - hunt_V2 = dirV2 (regV "cazar") ; - kill_V2 = dirV2 (regV "matar") ; - laugh_V = regV "reir" ; ----V reír_67 - lie_V = reflV (regV "acostar") ; -- "acostarse" - play_V = regV "jugar" ; - pull_V2 = dirV2 (regV "tirar") ; - push_V2 = dirV2 (regV "empujar") ; - rub_V2 = dirV2 (regV "resfregar") ; - scratch_V2 = dirV2 (regV "rascar") ; - sew_V = regV "coser" ; - sing_V = regV "cantar" ; - sit_V = reflV (mkV "sentar" "siento") ; - smell_V = verboV (oler_52 "oler") ; - spit_V = regV "escupir" ; - split_V2 = dirV2 (regV "separar") ; -- dividir,) ; - squeeze_V2 = dirV2 (regV "exprimir") ; - stab_V2 = dirV2 (regV "apuñalar") ; - stand_V = verboV (estar_2 "estar") ; ---- "estar de pie" ; - suck_V2 = dirV2 (regV "chupar") ; - swell_V = regV "tragar" ; - swim_V = regV "nadar" ; - think_V = regV "pensar" ; - throw_V2 = dirV2 (regV "tirar") ; - tie_V2 = dirV2 (regV "atar") ; - turn_V = regV "doblar" ; - vomit_V = regV "vomitar" ; - wash_V2 = dirV2 (regV "lavar") ; - wipe_V2 = dirV2 (regV "secar") ; - breathe_V = (regV "respirar") ; - - john_PN = mkPN "Juan" masculine ; - today_Adv = mkAdv "hoy" ; - - grammar_N = regN "gramática" ; - language_N = regN "lengua" ; - rule_N = regN "regla" ; - + sell_V3 = dirV3 (regV "vender") dative ; + send_V3 = dirV3 (regV "mandar") dative ; -- enviar + talk_V3 = mkV3 (regV "hablar") dative genitive ; + become_VA = reflV (mkV "converter" "convertido") ; --- convertirse en, volverse, ponerse + know_VQ = mkVQ (verboV (saber_71 "saber")) ; + wonder_VQ = mkVQ (reflV (regV "preguntar")) ; + fear_VS = mkVS (regV "temer") ; + hope_VS = mkVS (regV "esperar") ; + know_VS = mkVS (verboV (saber_71 "saber")) ; + say_VS = mkVS (verboV (decir_28 "dizer")) ; + -- V + blow_V = regV "soplar" ; + breathe_V = (regV "respirar") ; + burn_V = regV "quemar" ; + come_V = verboV (venir_82 "vir") ; + die_V = verboV (morir_35b "morrer") ; + dig_V = regV "escarbar" ; + fall_V = verboV (caer_20 "caer") ; + float_V = regV "flotar" ; + flow_V = verboV (influir_45 "fluir") ; -- circular + fly_V = regV "volar" ; + freeze_V = regV "congelar" ; + go_V = (verboV (ir_46 "ir")) ; + jump_V = regV "saltar" ; + laugh_V = regV "reir" ; ----V reír_67 + lie_V = reflV (regV "acostar") ; -- "acostarse" + live_V = verboV (vivir_7 "viver") ; + play_V = regV "jugar" ; + run_V = regV "correr" ; + sew_V = regV "coser" ; + sing_V = regV "cantar" ; + sit_V = reflV (mkV "sentar" "siento") ; + sleep_V = verboV (dormir_35 "dormir") ; + smell_V = verboV (oler_52 "oler") ; + spit_V = regV "escupir" ; + stand_V = verboV (estar_2 "estar") ; ---- "estar de pie" ; + stop_V = regV "parar" ; + swell_V = regV "tragar" ; + swim_V = regV "nadar" ; + think_V = regV "pensar" ; + travel_V = regV "viajar" ; + turn_V = regV "doblar" ; + vomit_V = regV "vomitar" ; + walk_V = mkV "caminhar" ; } ; diff --git a/src/portuguese/MorphoPor.gf b/src/portuguese/MorphoPor.gf index 1ebc38b0..53faa728 100644 --- a/src/portuguese/MorphoPor.gf +++ b/src/portuguese/MorphoPor.gf @@ -1,130 +1,186 @@ --# -path=.:../romance:../common:../../prelude ---1 A Simple Pornish Resource Morphology +--1 A Simple Portuguese Resource Morphology -- --- Aarne Ranta 2002 -- 2005 -- --- This resource morphology contains definitions needed in the resource --- syntax. To build a lexicon, it is better to use $ParadigmsPor$, which --- gives a higher-level access to this module. +-- This resource morphology contains definitions needed in the +-- resource syntax. To build a lexicon, it is better to use +-- $ParadigmsPor$, which gives a higher-level access to this module. -resource MorphoPor = CommonRomance, ResPor ** +resource MorphoPor = CommonRomance, ResPor ** open PhonoPor, Prelude, Predef, CatPor in { flags optimize=all ; - coding=utf8 ; - --2 Nouns -- --- The following macro is useful for creating the forms of number-dependent --- tables, such as common nouns. +-- The following macro is useful for creating the forms of +-- number-dependent tables, such as common nouns. oper - numForms : (_,_ : Str) -> Number => Str = \vino, vini -> - table {Sg => vino ; Pl => vini} ; + numForms : (_,_ : Str) -> Number => Str = \campus, campi -> + table {Sg => campus ; Pl => campi} ; -- For example: + nomVinho : Str -> Number => Str = \vinho -> + numForms vinho (vinho + "s") ; - nomVino : Str -> Number => Str = \vino -> - numForms vino (vino + "s") ; + nomAreia : Str -> Number => Str = \areia -> + numForms areia areia ; - nomPilar : Str -> Number => Str = \pilar -> - numForms pilar (pilar + "es") ; + nomAlemao : Str -> Number => Str = \alemao -> + numForms alemao (init alemao + "es") ; - nomTram : Str -> Number => Str = \tram -> - numForms tram tram ; + nomFalcao : Str -> Number => Str = \falcao -> + numForms falcao (tk 2 falcao + "ões") ; + + nomCidadao : Str -> Number => Str = -- for completeness + nomVinho ; + + nomNuvem : Str -> Number => Str = \nuvem -> + numForms nuvem (init nuvem + "ns") ; + + nomRapaz : Str -> Number => Str = \rapaz -> + numForms rapaz (rapaz + "es") ; + + nomCanal : Str -> Number => Str = \canal -> + numForms canal (init canal + "is") ; + + acuteVowel : Str -> Str = \v -> + case v of { + "a" => "á" ; + "e" => "é" ; + "i" => "í" ; + "o" => "ó" ; + "u" => "ú" ; + _ => error "input must be vowel character." + } ; + + nomFenol : Str -> Number => Str = \fenol -> + case fenol of { + fen + v@("a"|"e"|"i"|"o"|"u") + "l" => numForms fenol (fen + acuteVowel v + "is") + }; + + nomVowelL : Str -> Number => Str = \nom -> + -- papel -> papéis, móvel -> móveis + case occurs "áéíúó" nom of { + PTrue => nomCanal nom ; + PFalse => nomFenol nom + } ; -- Common nouns are inflected in number and have an inherent gender. - mkNoun : (Number => Str) -> Gender -> Noun = \mecmecs,gen -> + mkNoun : (Number => Str) -> Gender -> Noun = \mecmecs,gen -> {s = mecmecs ; g = gen} ; - mkNounIrreg : Str -> Str -> Gender -> Noun = \mec,mecs -> + mkNounIrreg : Str -> Str -> Gender -> Noun = \mec,mecs -> mkNoun (numForms mec mecs) ; - mkNomReg : Str -> Noun = \mec -> - case mec of { - _ + ("o" | "e" | "é" | "á") => mkNoun (nomVino mec) Masc ; --bebé, papá; how about other accented vocal endings? champú champúes - _ + "a" => mkNoun (nomVino mec) Fem ; - _ + "z" => mkNounIrreg mec (init mec + "ces") Fem ; - _ + "ión" => mkNounIrreg mec (tk 2 mec + "ones") Fem ; - _ + "tud" => mkNounIrreg mec (mec + "es") Fem ; - _ + "án" => mkNounIrreg mec (tk 2 mec + "anes") Masc ; - _ + "én" => mkNounIrreg mec (tk 2 mec + "enes") Masc ; - _ + "ín" => mkNounIrreg mec (tk 2 mec + "ines") Masc ; - _ + "ón" => mkNounIrreg mec (tk 2 mec + "ones") Masc ; - _ + "ún" => mkNounIrreg mec (tk 2 mec + "unes") Masc ; - _ => mkNoun (nomPilar mec) Masc - } ; + smartGenNoun : Str -> Gender -> Noun = \vinho,g -> case vinho of { + rapa + ("z"|"s") => -- capataz/Masc, flor/Fem, obus/Masc + mkNoun (nomRapaz vinho) g ; + can + "al" => -- canal/Masc, vogal/Fem + mkNoun (nomCanal vinho) g ; + pap + "el" => -- cascavel/Fem, infiel/Masc + mkNoun (nomVowelL vinho) g ; + home + "m" => -- homem/Masc, nuvem/nuvens + mkNoun (nomNuvem vinho) g ; + tóra + "x" => -- tórax/Masc, xerox/Fem + mkNoun (nomAreia vinho) g ; + _ => + mkNoun (nomVinho vinho) g + } ; + mkNomReg : Str -> Noun = \vinho -> case vinho of { + cas + ("a" | "ã" | "dade" | "tude" | "ise" | "ite") => + -- casa, artesã, saudade, juventude, marquise, artrite + mkNoun (nomVinho vinho) Fem ; + va + "gem" => + mkNoun (nomNuvem vinho) Fem ; + certid + "ão" => -- other rules depend on stress, can this be built with gf? + mkNoun (nomFalcao vinho) Fem ; + proble + ("ma" | "n" | "o" | "á") => -- problema, líquen, carro, maracujá + mkNoun (nomVinho vinho) Masc ; + can + "r" => -- feminine words ending with 'r' usually are also masculine + mkNoun (nomRapaz vinho) Masc ; + can + ("i" | "u") + "l" => -- canil, azul | what about fóssil? + mkNoun (nomCanal vinho) Masc ; + fen + "ol" => mkNoun (nomVowelL vinho) Masc ; + urub + "u" => mkNoun (nomVinho vinho) Masc ; + _ => smartGenNoun vinho Masc + } ; --2 Adjectives -- --- Adjectives are conveniently seen as gender-dependent nouns. --- Here are some patterns. First one that describes the worst case. +-- Adjectives are conveniently seen as gender-dependent nouns. Here +-- are some patterns. First one that describes the worst case. - mkAdj : (_,_,_,_,_ : Str) -> Adj = \solo,sola,soli,sole,solamente -> + mkAdj : (_,_,_,_,_ : Str) -> Adj = + \burro,burra,burros,burras,burramente -> {s = table { - AF Masc n => numForms solo soli ! n ; - AF Fem n => numForms sola sole ! n ; - AA => solamente + AF Masc n => numForms burro burros ! n ; + AF Fem n => numForms burra burras ! n ; + AA => burramente } } ; -- Then the regular and invariant patterns. - adjSolo : Str -> Adj = \solo -> - let - sol = Predef.tk 1 solo + adjPreto : Str -> Adj = \preto -> + let + pret = Predef.tk 1 preto in - mkAdj solo (sol + "a") (sol + "os") (sol + "as") (sol + "amente") ; + mkAdj preto (pret + "a") (pret + "os") (pret + "as") (pret + "amente") ; - -- masculine and feminine are identical: - -- adjectives ending with -e, -a and many but not all that end in a consonant - adjUtil : Str -> Str -> Adj = \util,utiles -> - mkAdj util util utiles utiles (util + "mente") ; + -- masculine and feminine are identical: + -- adjectives ending with -e, -a and many but not all that end in a + -- consonant + adjUtil : Str -> Str -> Adj = \útil,úteis -> + mkAdj útil útil úteis úteis (útil + "mente") ; - -- adjectives that end in consonant but have different masc and fem forms - -- español, hablador ... - adjEspanol : Str -> Str -> Adj = \espanol,espanola -> - mkAdj espanol espanola (espanol + "es") (espanol + "as") (espanola + "mente") ; + -- adjectives that end in consonant but have different masc and fem + -- forms español, hablador ... + adjOuvidor : Str -> Str -> Adj = \ouvidor,ouvidora -> + mkAdj ouvidor ouvidora (ouvidor + "es") (ouvidor + "as") (ouvidora + "mente") ; - adjBlu : Str -> Adj = \blu -> - mkAdj blu blu blu blu blu ; --- + adjBlu : Str -> Adj = \blu -> + mkAdj blu blu blu blu blu ; --- blasé - -- francés francesa franceses francesas - adjEs : Str -> Adj = \francEs -> - let franc : Str = Predef.tk 2 francEs ; + -- francês francesa franceses francesas + adjEs : Str -> Adj = \francês -> + let franc : Str = Predef.tk 2 francês ; frances : Str = franc + "es" ; - in mkAdj francEs (frances + "a") (frances + "es") (frances + "as") (frances + "amente") ; - + in mkAdj francês (frances + "a") (frances + "es") (frances + "as") (frances + "amente") ; - -- alemán alemana alemanes alemanas - adjVn : Str -> Adj = \alemAn -> - let alemA : Str = init alemAn ; - alem : Str = init alemA ; - A : Str = last alemA ; - V : Str = case A of { - "á" => "a" ; - "é" => "e" ; - "í" => "i" ; - "ó" => "o" ; - "ú" => "u" + + -- alemão alemã alemães alemãs + -- is there really a need for this? is it as useful as the spanish + -- one? + adjVo : Str -> Adj = \alemão -> + let alemã : Str = init alemão ; + alem : Str = init alemã ; + ã : Str = last alemã ; + v : Str = case ã of { + "ã" => "a" } ; - alemVn : Str = alem + V + "n" ; - in mkAdj alemAn (alemVn + "a") (alemVn + "es") - (alemVn + "as") (alemVn + "amente") ; + alemvo : Str = alem + v + "o" ; + in mkAdj alemão alemã (alemã + "s") (alemã + "es") (alemã + "amente") ; - mkAdjReg : Str -> Adj = \solo -> - case solo of { - _ + "o" => adjSolo solo ; - _ + ("e" | "a") => adjUtil solo (solo + "s") ; - _ + "és" => adjEs solo ; - _ + ("á" | "é" | "í" | "ó" | "ú") + "n" => adjVn solo ; - _ => adjUtil solo (solo + "es") - } ; + adjEuropeu : Str -> Adj = \europeu -> let europe = init europeu in + mkAdj europeu (europe + "ia") (europeu + "s") (europe + "ias") + (europe + "iamente") ; + + mkAdjReg : Str -> Adj = \a -> + case a of { + pret + "o" => adjPreto a ; + anarquist + v@("e" | "a") => adjUtil (anarquist + v) (anarquist + v + "s") ; + ouvido + "r" => adjOuvidor a (ouvido + "ra") ; + chin + "ês" => adjEs a ; + europ + "eu" => adjEuropeu a ; + alem + "ão" => adjVo a ; + _ => adjUtil a (a + "s") + } ; --2 Personal pronouns -- @@ -132,73 +188,76 @@ oper -- The use of "ne" as atonic genitive is debatable. -- We follow the rule that the atonic nominative is empty. - mkPronoun : (_,_,_,_,_,_,_,_ : Str) -> - Gender -> Number -> Person -> Pronoun = - \il,le,lui,Lui,son,sa,ses,see,g,n,p -> - let - alui : Case -> Str = \x -> prepCase x ++ Lui ; - in { - s = table { - Nom => {c1 = [] ; c2 = [] ; comp = il ; ton = Lui} ; - Acc => {c1 = le ; c2 = [] ; comp = [] ; ton = Lui} ; - CPrep P_a => {c1 = [] ; c2 = lui ; comp = [] ; ton = alui (CPrep P_a)} ; - c => {c1 = [] ; c2 = [] ; comp, ton = alui c} - } ; - poss = \\n,g => case of { - => son ; - => sa ; - => ses ; - => see + mkPronoun : (_,_,_,_,_,_,_,_ : Str) -> Gender -> Number -> Person + -> Pronoun = \ele,o,lhe,Ele,seu,sua,seus,suas,g,n,p -> + {poss = \\n,g => case of { + => seu ; + => sua ; + => seus ; + => suas } ; + a = Ag g n p ; + hasClit = True ; isPol = False + } ** pronLin ele o lhe Ele ; - a = Ag g n p ; - hasClit = True ; isPol = False + pronLin : (_,_,_,_ : Str) -> {s : Case => {c1,c2,comp,ton : Str}} + = \você, o, lhe, Você -> + let + aVocê : Case -> Str = \x -> prepCase x ++ Você ; + in + {s = table { + Nom => {c1 = [] ; c2 = [] ; comp = você ; ton = Você} ; + Acc => {c1 = o ; c2 = [] ; comp = [] ; ton = Você} ; + CPrep P_a => {c1 = [] ; c2 = lhe ; comp = [] ; ton = aVocê (CPrep P_a)} ; + c => {c1 = [] ; c2 = [] ; comp, ton = aVocê c} + } } ; + pronAgr : Pronoun -> Gender -> Number -> Person -> Pronoun + = \pron, g, n, p -> pron ** {a = Ag g n p} ; + + mkPronFrom : Pronoun -> (_,_,_,_ : Str) -> Gender -> Number -> Person + -> Pronoun = \pron, você, o, lhe, Você, g, n, p -> + (pronAgr pron g n p) ** pronLin você o lhe Você ; + --2 Determiners -- --- Determiners, traditionally called indefinite pronouns, are inflected --- in gender and number, like adjectives. +-- Determiners, traditionally called indefinite pronouns, are +-- inflected in gender and number, like adjectives. - pronForms : Adj -> Gender -> Number -> Str = \tale,g,n -> tale.s ! AF g n ; + pronForms : Adj -> Gender -> Number -> Str = + \tale,g,n -> tale.s ! AF g n ; - mkOrdinal : A -> Ord = \adj-> + mkOrdinal : A -> Ord = \adj -> lin Ord { s = \\ag => adj.s ! Posit ! AF ag.g ag.n ; } ; - mkQuantifier : (ese,esa,esos,esas : Str) -> Quant = \ese,esa,esos,esas-> - let - se : Str = Predef.drop 1 ese ; - sa : Str = Predef.drop 1 esa ; - sos : Str = Predef.drop 1 esos ; - sas : Str = Predef.drop 1 esas ; - E : Str = "é" ; + mkQuantifier : (esse,essa,esses,essas : Str) -> Quant = \esse,essa,esses,essas-> + let attrforms : Number => Gender => Case => Str = table { - Sg => \\g,c => prepCase c ++ genForms ese esa ! g ; - Pl => \\g,c => prepCase c ++ genForms esos esas ! g ---- + Sg => \\g,c => prepCase c ++ genForms esse essa ! g ; + Pl => \\g,c => prepCase c ++ genForms esses essas ! g } ; - npforms : Number => Gender => Case => Str = table { - Sg => \\g,c => prepCase c ++ genForms (E + se) (E + sa) ! g ; - Pl => \\g,c => prepCase c ++ genForms (E + sos) (E + sas) ! g } in lin Quant { s = \\_ => attrforms ; s2 = [] ; - sp = npforms ; isNeg = False + sp = attrforms ; -- in spanish it was different + isNeg = False } ; - mkDeterminer : (mucho,mucha : Str) -> Number -> Bool -> Det = \mucho,mucha,number,neg -> + mkDeterminer : (muito,muita : Str) -> Number -> Bool -> Det = \muito,muita,number,neg -> lin Det { - s,sp = \\g,c => prepCase c ++ genForms mucho mucha ! g ; + s,sp = \\g,c => prepCase c ++ genForms muito muita ! g ; n = number; s2 = [] ; isNeg = neg } ; - - mkIDet : (cuantos, cuantas : Str) -> Number -> IDet = \cuantos,cuantas,number -> + + mkIDet : (quantos, quantas : Str) -> Number -> IDet = \quantos,quantas,number -> lin IDet { - s = \\g,c => prepCase c ++ genForms cuantos cuantas ! g ; + s = \\g,c => prepCase c ++ genForms quantos quantas ! g ; n = number } ; } diff --git a/src/portuguese/NumeralPor.gf b/src/portuguese/NumeralPor.gf index e6f6ac55..f592bb01 100644 --- a/src/portuguese/NumeralPor.gf +++ b/src/portuguese/NumeralPor.gf @@ -1,111 +1,123 @@ -concrete NumeralPor of Numeral = CatPor [Numeral,Digits] ** +concrete NumeralPor of Numeral = CatPor [Numeral,Digits] ** open CommonRomance, ResRomance, MorphoPor, Prelude in { - flags coding=utf8 ; -lincat +lincat Digit = {s : DForm => CardOrd => Str} ; Sub10 = {s : DForm => CardOrd => Str ; n : Number} ; Sub100 = {s : CardOrd => Str ; n : Number} ; Sub1000 = {s : CardOrd => Str ; n : Number} ; Sub1000000 = {s : CardOrd => Str ; n : Number} ; -lin num x = x ; + lin + num x = x ; -lin n2 = - mkTal "dos" "doce" "veinte" "doscientos" - "segundo" "duodécimo" "vigésimo" "ducentésimo" ; -lin n3 = - mkTal "tres" "trece" "treinta" "trescientos" - "tercero" "decimotercero" "trigésimo" "tricentesimo" ; -lin n4 = - mkTal "cuatro" "catorce" "cuarenta" "cuatrocientos" - "cuarto" "decimocuarto" "cuadragésimo" "cuadringentesimo" ; -lin n5 = - mkTal "cinco" "quince" "cincuenta" "quinientos" - "quinto" "decimoquinto" "quincuagésimo" "guingentésimo" ; -lin n6 = - mkTal "seis" "dieciséis" "sesenta" "seiscientos" - "sexto" "decimosexto" "sexagésimo" "sexcentesimo" ; -lin n7 = - mkTal "siete" "diecisiéte" "setenta" "setecientos" - "séptimo" "decimoséptimo" "septuagésimo" "septingentesimo" ; -lin n8 = - mkTal "ocho" "dieciocho" "ochenta" "ochocientos" - "octavo" "decimoctavo" "octogésimo" "octingentésimo" ; -lin n9 = - mkTal "nueve" "diecinueve" "noventa" "novecientos" - "noveno" "decimonoveno" "nonagésimo" "noningentésimo" ; + -- digits + n2 = let dois = mkTal "dois" "doze" "vinte" "duzentos" + "segundo" "vigésimo" "duocentésimo" + in {s =\\f,g => case of { + => "duas" ; + _ => dois.s ! f ! g + } + } ; + n3 = + mkTal "três" "treze" "trinta" "trezentos" + "terceiro" "trigésimo" "tricentésimo" ; + n4 = + mkTal "quatro" (variants {"catorze" ; "quatorze"}) "quarenta" + "quatrocentos" "quarto" "quadragésimo" "quadringentésimo" ; + n5 = + mkTal "cinco" "quinze" "cinquenta" "quinhentos" + "quinto" "quinquagésimo" "guingentésimo" ; + n6 = + mkTal "seis" (variants {"dezesseis"; "dezasseis"}) + "sessenta" "seiscentos" "sexto" "sexagésimo" "sexcentésimo" ; + n7 = + mkTal "sete" (variants {"dezessete" ; "dezassete"}) "setenta" + "setecentos" "sétimo" "septuagésimo" "septingentésimo" ; + n8 = + mkTal "oito" "dezoito" "oitenta" "oitocentos" + "oitavo" "octogésimo" "octingentésimo" ; + n9 = + mkTal "nove" (variants {"dezenove" ; "dezanove"}) "noventa" + "novecentos" "nono" "nonagésimo" "noningentésimo"; -lin pot01 = - let uno = (mkTal "uno" "once" "diez" "ciento" "primero" "undécimo" - "décimo" "centésimo").s in - {s =\\f,g => case of { - => [] ; - => "un" ; - => "una" ; - => "cien" ; - => "ciento" ; - _ => uno ! f ! g - } ; - n = Sg - } ; + pot01 = + let um = (mkTal "um" "onze" "dez" "cento" "primeiro" + "décimo" "centésimo").s in + {s =\\f,g => case of { + => "um" ; + => "uma" ; + _ => um ! f ! g + } ; + n = Sg + } ; -lin pot0 d = {s = d.s ; n = Pl} ; -lin pot110 = spl ((mkTal "diez" [] [] [] "decimo" [] [] []).s ! ental indip) ; -lin pot111 = spl ((mkTal "once" [] [] [] "undécimo" [] [] []).s ! ental indip) ; -lin pot1to19 d = spl (d.s ! ton) ; -lin pot0as1 n = {s = n.s ! ental indip ; n = n.n} ; -lin pot1 d = spl (d.s ! tiotal) ; -lin pot1plus d e = - {s = \\g => d.s ! tiotal ! g ++ y_CardOrd g ++ e.s ! ental indip ! g ; n = Pl} ; -lin pot1as2 n = n ; -lin pot2 d = spl (d.s ! hundra False) ; -lin pot2plus d e = - {s = \\g => d.s ! hundra True ! g ++ e.s ! g ; n = Pl} ; -lin pot2as3 n = n ; -lin pot3 n = spl (\\g => n.s ! NCard Masc ++ mil g) ; -lin pot3plus n m = {s = \\g => n.s ! NCard Masc ++ mil g ++ m.s ! g ; n = Pl} ; + pot0 d = {s = d.s ; n = Pl} ; + pot110 = spl (pot01.s ! ten) ; + pot111 = spl (pot01.s ! teen) ; + pot1to19 d = spl (d.s ! teen) ; + pot0as1 n = {s = n.s ! unit ; n = n.n} ; + pot1 d = spl (d.s ! ten) ; + pot1plus d e = + {s = \\g => d.s ! ten ! g + ++ e_CardOrd g ++ e.s ! unit ! g ; + n = Pl} ; + pot1as2 n = n ; + pot2 d = + let n = case d.n of { + Sg => mkTal [] [] [] "cem" [] [] "centésimo" ; + _ => d + } + in spl (n.s ! hundred) ; + pot2plus d e = + {s = \\g => d.s ! hundred ! g + ++ e_CardOrd g ++ e.s ! g ; + n = Pl} ; + pot2as3 n = n ; + pot3 n = spl (\\g => n.s ! NCard Masc ++ mil g) ; + pot3plus n m = {s = \\g => n.s ! NCard Masc + ++ mil g ++ e_CardOrd g + ++ m.s ! g ; + n = Pl} ; -oper - mkTal : (x1,_,_,_,_,_,_,x8 : Str) -> {s : DForm => CardOrd => Str} = - \due,dodici,venti,ducento,secondo,dodicesimo,ventesimo,ducentesimo -> - {s = \\d,co => case of { - => due ; - => pronForms (adjSolo secondo) g n ; - => venti ; - => regCard ventesimo g n ; - => dodici ; - => regCard dodicesimo g n ; - => ducento ; - => Predef.tk 2 ducento + "as" ; - => regCard ducentesimo g n - } - } ; + oper + mkTal : (_,_,_,_,_,_,_ : Str) -> {s : DForm => CardOrd => Str} = + \dois,doze,vinte,duzentos,segundo,vigesimo,duocentesimo -> + {s = \\d,co => case of { + => dois ; + => doze ; + => vinte ; + => duzentos ; + => (regCard segundo) g n ; + => (regCard "décimo") g n ++ (regCard segundo) g n ; + => regCard vigesimo g n ; + => regCard duocentesimo g n + } + } ; - regCard : Str -> Gender -> Number -> Str = \ventesimo -> - pronForms (adjSolo ventesimo) ; + regCard : Str -> Gender -> Number -> Str = \vigesimo -> + pronForms (adjPreto vigesimo) ; - spl : (CardOrd => Str) -> {s : CardOrd => Str ; n : Number} = \s -> { - s = s ; - n = Pl - } ; + spl : (CardOrd => Str) -> {s : CardOrd => Str ; n : Number} = \s -> { + s = s ; + n = Pl + } ; - mil : CardOrd -> Str = \g -> - (mkTal "mil" [] [] [] "milésimo" [] [] []).s ! ental indip ! g ; + mil : CardOrd -> Str = \g -> + (mkTal "mil" [] [] [] "milésimo" [] []).s ! unit ! g ; - y_CardOrd : CardOrd -> Str = \co -> case co of { - NCard _ => "y" ; - _ => [] - } ; - -param - DForm = ental Pred | ton | tiotal | hundra Bool ; - Pred = pred | indip ; + e_CardOrd : CardOrd -> Str = \co -> case co of { + NCard _ => "e" ; + _ => [] + } ; + param + DForm = unit | teen | ten | hundred ; +--- -- numerals as sequences of digits - lincat + lincat Dig = TDigit ; lin @@ -114,12 +126,12 @@ param IIDig d i = { s = \\o => d.s ! NCard Masc ++ BIND ++ i.s ! o ; n = Pl - } ; + } ; - D_0 = mkDig "0" ; - D_1 = mk3Dig "1" "1:o" Sg ; ---- gender - D_2 = mk2Dig "2" "2:o" ; - D_3 = mk2Dig "3" "3:o" ; + D_0 = mkDig "0" Sg ; + D_1 = mkDig "1" Sg ; + D_2 = mkDig "2" ; + D_3 = mkDig "3" ; D_4 = mkDig "4" ; D_5 = mkDig "5" ; D_6 = mkDig "6" ; @@ -128,14 +140,27 @@ param D_9 = mkDig "9" ; oper - mk2Dig : Str -> Str -> TDigit = \c,o -> mk3Dig c o Pl ; - mkDig : Str -> TDigit = \c -> mk2Dig c (c + ":o") ; - - mk3Dig : Str -> Str -> Number -> TDigit = \c,o,n -> { - s = table {NCard _ => c ; NOrd _ _ => o} ; ---- gender + mk4Dig : Str -> Str -> Str -> Number -> TDigit = \c,o,a,n -> { + s = table { + NCard _ => c ; + NOrd Masc _ => o ; + NOrd Fem _ => a + } ; n = n } ; + mk3Dig : Str -> Str -> Str -> TDigit = + \c,mo,fo -> mk4Dig c mo fo Pl ; + + mk2Dig : Str -> Number -> TDigit = \c,n -> mk1Dig c ** {n = n} ; + + mk1Dig : Str -> TDigit = \c -> mk3Dig c (c + "º") (c + "ª") ; + + mkDig = overload { + mkDig : Str -> TDigit = mk1Dig ; + mkDig : Str -> Number -> TDigit = mk2Dig ; + } ; + TDigit = { n : Number ; s : CardOrd => Str diff --git a/src/portuguese/ParadigmsPor.gf b/src/portuguese/ParadigmsPor.gf index 7824e078..c25a9da9 100644 --- a/src/portuguese/ParadigmsPor.gf +++ b/src/portuguese/ParadigmsPor.gf @@ -1,55 +1,61 @@ --# -path=.:../romance:../common:../abstract:../../prelude ---1 Pornish Lexical Paradigms +--1 Portuguese Lexical Paradigms -- --- Aarne Ranta 2004 - 2006 -- --- This is an API for the user of the resource grammar --- for adding lexical items. It gives functions for forming --- expressions of open categories: nouns, adjectives, verbs. --- +-- This is an API for the user of the resource grammar for adding +-- lexical items. It gives functions for forming expressions of open +-- categories: nouns, adjectives, verbs. +-- -- Closed categories (determiners, pronouns, conjunctions) are --- accessed through the resource syntax API, $Structural.gf$. +-- accessed through the resource syntax API, $Structural.gf$. -- --- The main difference with $MorphoPor.gf$ is that the types --- referred to are compiled resource grammar types. We have moreover --- had the design principle of always having existing forms, rather --- than stems, as string arguments of the paradigms. +-- The main difference with $MorphoPor.gf$ is that the types referred +-- to are compiled resource grammar types. We have moreover had the +-- design principle of always having existing forms, rather than +-- stems, as string arguments of the paradigms. -- --- The structure of functions for each word class $C$ is the following: --- first we give a handful of patterns that aim to cover all --- regular cases. Then we give a worst-case function $mkC$, which serves as an --- escape to construct the most irregular words of type $C$. For --- verbs, there is a fairly complete list of irregular verbs in --- [``IrregPor`` ../../spanish/IrregPor.gf]. +-- The structure of functions for each word class $C$ is the +-- following: first we give a handful of patterns that aim to cover +-- all regular cases. Then we give a worst-case function $mkC$, which +-- serves as an escape to construct the most irregular words of type +-- $C$. For verbs, there is a fairly complete list of irregular verbs +-- in [``IrregPor`` ../../portuguese/IrregPor.gf]. -resource ParadigmsPor = - open - (Predef=Predef), - Prelude, - MorphoPor, +resource ParadigmsPor = + open + (Predef=Predef), + Prelude, + MorphoPor, BeschPor, CatPor in { flags optimize=all ; - coding=utf8 ; ---2 Parameters +--2 Parameters -- -- To abstract over gender names, we define the following identifiers. oper - Gender : Type ; + Gender : Type ; + Gender = MorphoPor.Gender ; masculine : Gender ; + masculine = Masc ; + feminine : Gender ; + feminine = Fem ; -- To abstract over number names, we define the following. - Number : Type ; + Number : Type ; + Number = MorphoPor.Number ; singular : Number ; + singular = Sg ; + plural : Number ; + plural = Pl ; -- Prepositions used in many-argument functions are either strings -- (including the 'accusative' empty string) or strings that @@ -57,289 +63,105 @@ oper -- 'dative' "a"). accusative : Prep ; -- direct object - genitive : Prep ; -- preposition "de" and its contractions - dative : Prep ; -- preposition "a" and its contractions + accusative = complAcc ** {lock_Prep = <>} ; - mkPrep : overload { - mkPrep : Str -> Prep ; -- other preposition - mkPrep : Str -> Prep -> Prep ; -- compound prepositions, e.g. "antes de", made as mkPrep "antes" genitive + genitive : Prep ; -- preposition "de" and its contractions + genitive = complGen ** {lock_Prep = <>} ; + + dative : Prep ; -- preposition "a" and its contractions + dative = complDat ** {lock_Prep = <>} ; + + mkPrep = overload { + mkPrep : Str -> Prep = -- other preposition + \p -> {s = p ; c = Acc ; isDir = False ; lock_Prep = <>} ; + mkPrep : Str -> Prep -> Prep = + -- compound prepositions, e.g. "antes de", made as mkPrep + -- "antes" genitive + \p,c -> {s = p ; c = c.c ; isDir = False ; lock_Prep = <>} } ; --2 Nouns - mkN : overload { + regN : Str -> N ; + regN x = mkNomReg x ** {lock_N = <>} ; --- The regular function takes the singular form and the gender, --- and computes the plural and the gender by a heuristic. --- The heuristic says that the gender is feminine for nouns --- ending with "a" or "z", and masculine for all other words. --- Nouns ending with "a", "o", "e" have the plural with "s", --- those ending with "z" have "ces" in plural; all other nouns --- have "es" as plural ending. The accent is not dealt with. + femN : N -> N ; + femN x = {s = x.s ; g = feminine ; lock_N = <>} ; - mkN : (luz : Str) -> N ; -- predictable; feminine for "-a"/"-z", otherwise masculine + mascN : N -> N ; + mascN x = {s = x.s ; g = masculine ; lock_N = <>} ; --- A different gender can be forced. + mk2N : (baston,bastones : Str) -> Gender -> N ; + mk2N x y g = mkNounIrreg x y g ** {lock_N = <>} ; - mkN : Str -> Gender -> N ; -- force gender - --- The worst case has two forms (singular + plural) and the gender. - - mkN : (baston,bastones : Str) -> Gender -> N -- worst case + --- [] update this docstring + -- The regular function takes the singular form and the gender, and + -- computes the plural and the gender by a heuristic. The heuristic + -- says that the gender is feminine for nouns ending with "a" or + -- "z", and masculine for all other words. Nouns ending with "a", + -- "o", "e" have the plural with "s", those ending with "z" have + -- "ces" in plural; all other nouns have "es" as plural ending. The + -- accent is not dealt with. + mkN = overload { + -- predictable; "-a" for feminine, otherwise Masculine + mkN : (luz : Str) -> N = regN ; + -- force plural + mkN : (alemão, alemães : Str) -> N = + \s,p -> regN s ** {s = numForms s p} ; + -- force gender + mkN : Str -> Gender -> N = + \s,g -> regN s ** {g = g}; + -- The worst case has two forms (singular + plural) and the + -- gender. + mkN : (bastão,bastões : Str) -> Gender -> N = mk2N } ; - ---3 Compound nouns +--3 Compound nouns -- -- Some nouns are ones where the first part is inflected as a noun but --- the second part is not inflected. e.g. "número de teléfono". --- They could be formed in syntax, but we give a shortcut here since --- they are frequent in lexica. +-- the second part is not inflected. e.g. "número de telefone". They +-- could be formed in syntax, but we give a shortcut here since they +-- are frequent in lexica. - compN : N -> Str -> N ; -- compound, e.g. "número" + "de teléfono" + compN : N -> Str -> N ; -- compound, e.g. "número" + "de telefone" + compN x y = {s = \\n => x.s ! n ++ y ; g = x.g ; lock_N = <>} ; +--3 Relational nouns +-- +-- Relational nouns ("filha de x") need a case and a preposition. ---3 Relational nouns --- --- Relational nouns ("fille de x") need a case and a preposition. + mkN2 : N -> Prep -> N2 ; -- relational noun with prepositio + mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ; - mkN2 : N -> Prep -> N2 ; -- relational noun with preposition - --- The most common cases are the genitive "de" and the dative "a", +-- The most common cases are the genitive "de" and the dative "a", -- with the empty preposition. deN2 : N -> N2 ; -- relational noun with preposition "de" + deN2 n = mkN2 n genitive ; + aN2 : N -> N2 ; -- relational noun with preposition "a" + aN2 n = mkN2 n dative ; --- Three-place relational nouns ("la connessione di x a y") need two prepositions. - +-- Three-place relational nouns ("a conexão de x a y") need two +-- prepositions. mkN3 : N -> Prep -> Prep -> N3 ; -- prepositions for two complements - + mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; --3 Relational common noun phrases -- -- In some cases, you may want to make a complex $CN$ into a -- relational noun (e.g. "the old town hall of"). However, $N2$ and --- $N3$ are purely lexical categories. But you can use the $AdvCN$ --- and $PrepNP$ constructions to build phrases like this. +-- $N3$ are purely lexical categories. But you can use the $AdvCN$ and +-- $PrepNP$ constructions to build phrases like this. --- +-- --3 Proper names and noun phrases -- --- Proper names need a string and a gender. --- The default gender is feminine for names ending with "a", otherwise masculine. +-- Proper names need a string and a gender. The default gender is +-- feminine for names ending with "a", otherwise masculine. - mkPN : overload { - mkPN : (Anna : Str) -> PN ; -- feminine for "-a" - mkPN : (Pilar : Str) -> Gender -> PN ; -- force gender - mkPN : N -> PN ; -- gender from noun - } ; - - ---2 Adjectives - - mkA : overload { - --- For regular adjectives, all forms are derived from the --- masculine singular. The types of adjectives that are recognized are --- "alto", "fuerte", "util". Comparison is formed by "mas". - - mkA : (util : Str) -> A ; -- predictable adjective - --- Some adjectives need the feminine form separately. - - mkA : (espanol,espanola : Str) -> A ; - --- One-place adjectives compared with "mas" need five forms in the worst --- case (masc and fem singular, masc plural, adverbial). - - mkA : (solo,sola,solos,solas,solamente : Str) -> A ; -- worst-case - --- In the worst case, two separate adjectives are given: --- the positive ("bueno"), and the comparative ("mejor"). - - mkA : (bueno : A) -> (mejor : A) -> A -- special comparison (default with "mas") - } ; - --- The functions above create postfix adjectives. To switch --- them to prefix ones (i.e. ones placed before the noun in --- modification, as in "buen vino"), the following function is --- provided. - - prefixA : A -> A ; -- adjective before noun (default after noun) - - ---3 Two-place adjectives --- --- Two-place adjectives need a preposition for their second argument. - - mkA2 : A -> Prep -> A2 ; -- e.g. "casado" + dative - - ---2 Adverbs - --- Adverbs are not inflected. Most lexical ones have position --- after the verb. - - mkAdv : Str -> Adv ; - --- Some appear next to the verb (e.g. "siempre"). - - mkAdV : Str -> AdV ; - --- Adverbs modifying adjectives and sentences can also be formed. - - mkAdA : Str -> AdA ; - - mkAdN : Str -> AdN ; - - ---2 Verbs - - mkV : overload { - --- Regular verbs are ones inflected like "cortar", "deber", or "vivir". --- The regular verb function is the first conjugation ("ar") recognizes --- the variations corresponding to the patterns --- "actuar, cazar, guiar, pagar, sacar". The module $BeschPor$ gives --- the complete set of "Bescherelle" conjugations. - - mkV : (pagar : Str) -> V ; -- regular in "-ar", "-er", ".ir" - --- Verbs with vowel alternatition in the stem - easiest to give with --- two forms, e.g. "mostrar"/"muestro". - - mkV : (mostrar,muestro : Str) -> V ; -- regular with vowel alternation - --- Most irreguler verbs are found in $IrregPor$. If this is not enough, --- the module $BeschPor$ gives all the patterns of the "Bescherelle" --- book. To use them in the category $V$, wrap them with the function - - mkV : Verbum -> V ; -- import verb constructed with BeschPor - - mkV : V -> Str -> V ; -- particle verb - } ; - --- To form reflexive verbs: - - reflV : V -> V ; -- reflexive verb - --- Verbs with a deviant passive participle: just give the participle --- in masculine singular form as second argument. - - special_ppV : V -> Str -> V ; -- deviant past participle, e.g. abrir - abierto - - - ---3 Two-place verbs --- --- Two-place verbs need a preposition, except the special case with direct object. --- (transitive verbs). - - mkV2 : overload { - mkV2 : Str -> V2 ; -- regular, direct object - mkV2 : V -> V2 ; -- direct object - mkV2 : V -> Prep -> V2 -- other object - } ; - - --- You can reuse a $V2$ verb in $V$. - - v2V : V2 -> V ; --% - ---3 Three-place verbs --- --- Three-place (ditransitive) verbs need two prepositions, of which --- the first one or both can be absent. - - mkV3 : overload { - mkV3 : V -> V3 ; -- donner (+ accusative + dative) - mkV3 : V -> Prep -> V3 ; -- placer (+ accusative) + dans - mkV3 : V -> Prep -> Prep -> V3 -- parler + dative + genitive - } ; - dirV3 : V -> Prep -> V3 ; -- e.g. dar,(accusative),a - dirdirV3 : V -> V3 ; -- e.g. dar,(dative),(accusative) - ---3 Other complement patterns --- --- Verbs and adjectives can take complements such as sentences, --- questions, verb phrases, and adjectives. - - mkV0 : V -> V0 ; --% - mkVS : V -> VS ; - - mkVV : V -> VV ; -- plain infinitive: "quiero hablar" - deVV : V -> VV ; -- "terminar de hablar" - aVV : V -> VV ; -- "aprender a hablar" - - mkVA : V -> VA ; - - mkVQ : V -> VQ ; - mkV2Q : V -> Prep -> V2Q ; - mkV2S : overload { - mkV2S : V -> V2S ; - mkV2S : V -> Prep -> V2S ; - } ; - mkV2V : overload { - mkV2V : V -> V2V ; - mkV2V : V -> Prep -> Prep -> V2V ; - } ; - mkV2A : overload { - mkV2A : V -> V2A ; - mkV2A : V -> Prep -> Prep -> V2A ; - } ; - - - mkAS : A -> AS ; --% - mkA2S : A -> Prep -> A2S ; --% - mkAV : A -> Prep -> AV ; --% - mkA2V : A -> Prep -> Prep -> A2V ; --% - --- Notice: categories $AS, A2S, AV, A2V$ are just $A$, --- and the second argument is given --- as an adverb. Likewise --- $V0$ is just $V$. - - V0 : Type ; --% - AS, A2S, AV, A2V : Type ; --% - - ---. ---2 The definitions of the paradigms --- --- The definitions should not bother the user of the API. So they are --- hidden from the document. - - Gender = MorphoPor.Gender ; - Number = MorphoPor.Number ; - masculine = Masc ; - feminine = Fem ; - singular = Sg ; - plural = Pl ; - - accusative = complAcc ** {lock_Prep = <>} ; - genitive = complGen ** {lock_Prep = <>} ; - dative = complDat ** {lock_Prep = <>} ; - - mkPrep = overload { - mkPrep : Str -> Prep = \p -> {s = p ; c = Acc ; isDir = False ; lock_Prep = <>} ; - mkPrep : Str -> Prep -> Prep = \p,c -> {s = p ; c = c.c ; isDir = False ; lock_Prep = <>} - } ; - - - mk2N x y g = mkNounIrreg x y g ** {lock_N = <>} ; - regN x = mkNomReg x ** {lock_N = <>} ; - compN x y = {s = \\n => x.s ! n ++ y ; g = x.g ; lock_N = <>} ; - femN x = {s = x.s ; g = feminine ; lock_N = <>} ; - mascN x = {s = x.s ; g = masculine ; lock_N = <>} ; - - mkN2 = \n,p -> n ** {lock_N2 = <> ; c2 = p} ; - deN2 n = mkN2 n genitive ; - aN2 n = mkN2 n dative ; - mkN3 = \n,p,q -> n ** {lock_N3 = <> ; c2 = p ; c3 = q} ; - - mk2PN x g = {s = x ; g = g} ** {lock_PN = <>} ; + regPN : Str -> PN ; -- feminine for "-a", otherwise masculine regPN x = mk2PN x g where { g = case last x of { "a" => feminine ; @@ -347,62 +169,177 @@ oper } } ; - makeNP x g n = {s = (pn2np (mk2PN x g)).s; a = agrP3 g n ; hasClit = False ; isPol = False ; isNeg = False} ** {lock_NP = <>} ; + mk2PN : Str -> Gender -> PN ; -- Pilar + mk2PN x g = {s = x ; g = g} ** {lock_PN = <>} ; - mk5A a b c d e = - compADeg {s = \\_ => (mkAdj a b c d e).s ; isPre = False ; lock_A = <>} ; + mkPN = overload { + -- feminine for "-a" + mkPN : (Anna : Str) -> PN = regPN ; + -- force gender + mkPN : (Pilar : Str) -> Gender -> PN = mk2PN ; + -- gender from Noun + mkPN : N -> PN = \n -> lin PN {s = n.s ! Sg ; g = n.g} ; + } ; - mk2A a b = - compADeg {s = \\_ => (adjEspanol a b).s ; isPre = False ; lock_A = <>} ; +--2 Adjectives + compADeg : A -> A ; + compADeg a = {s = table {Posit => a.s ! Posit ; + _ => \\f => "mais" ++ + a.s ! Posit ! f} ; + isPre = a.isPre ; lock_A = <>} ; - regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; lock_A = <>} ; - prefA a = {s = a.s ; isPre = True ; lock_A = <>} ; + regA : Str -> A ; + regA a = compADeg {s = \\_ => (mkAdjReg a).s ; isPre = False ; + lock_A = <>} ; + mk2A : (espanhol,espanhola : Str) -> A ; + mk2A a b = compADeg {s = \\_ => (adjOuvidor a b).s ; isPre = False ; + lock_A = <>} ; + + mk5A : (solo,sola,solos,solas,solamente : Str) -> A ; + mk5A a b c d e = compADeg {s = \\_ => (mkAdj a b c d e).s ; + isPre = False ; lock_A = <>} ; + + mkADeg : A -> A -> A ; + mkADeg a b = {s = table {Posit => a.s ! Posit ; + _ => b.s ! Posit} ; + isPre = a.isPre ; lock_A = <>} ; + + + mkA = overload { + +-- For regular adjectives, all forms are derived from the masculine +-- singular. The types of adjectives that are recognized are "alto", +-- "fuerte", "util". Comparison is formed by "mas". + mkA : (util : Str) -> A = regA ; -- predictable adjective + +-- Some adjectives need the feminine form separately. + mkA : (espanol,espanola : Str) -> A = mk2A ; + +-- One-place adjectives compared with "mais" need five forms in the +-- worst case (masc and fem singular, masc plural, adverbial). + mkA : (solo,sola,solos,solas,solamente : Str) -> A = mk5A ; + +-- In the worst case, two separate adjectives are given: the positive +-- ("bueno"), and the comparative ("mejor"). + -- special comparison with "mais" as default + mkA : (bueno : A) -> (mejor : A) -> A = mkADeg ; + } ; + +-- The functions above create postfix adjectives. To switch them to +-- prefix ones (i.e. ones placed before the noun in modification, as +-- in "bom vinho"), the following function is provided. + + prefixA : A -> A ; -- adjective before noun (default after noun) + prefixA = prefA ; + + prefA : A -> A ; + prefA a = {s = a.s ; isPre = True ; lock_A = <>} ; + +--3 Two-place adjectives +-- +-- Two-place adjectives need a preposition for their second argument. + + mkA2 : A -> Prep -> A2 ; -- e.g. "casado" + dative mkA2 a p = a ** {c2 = p ; lock_A2 = <>} ; - mkADeg a b = - {s = table {Posit => a.s ! Posit ; _ => b.s ! Posit} ; - isPre = a.isPre ; lock_A = <>} ; - compADeg a = - {s = table {Posit => a.s ! Posit ; _ => \\f => "más" ++ a.s ! Posit ! f} ; - isPre = a.isPre ; - lock_A = <>} ; - regADeg a = compADeg (regA a) ; +--2 Adverbs +-- Adverbs are not inflected. Most lexical ones have position after +-- the verb. + + mkAdv : Str -> Adv ; mkAdv x = ss x ** {lock_Adv = <>} ; + +-- Some appear next to the verb (e.g. "sempre"). + + mkAdV : Str -> AdV ; mkAdV x = ss x ** {lock_AdV = <>} ; + +-- Adverbs modifying adjectives and sentences can also be formed. + + mkAdA : Str -> AdA ; mkAdA x = ss x ** {lock_AdA = <>} ; + + mkAdN : Str -> AdN ; mkAdN x = ss x ** {lock_AdN = <>} ; +--2 Verbs + regV : Str -> V ; regV x = -- cortar actuar cazar guiar pagar sacar - let + let ar = Predef.dp 2 x ; z = Predef.dp 1 (Predef.tk 2 x) ; verb = case ar of { "ir" => vivir_7 x ; "er" => deber_6 x ; "ar" => case z of { - "u" => actuar_9 x ; - "z" => cazar_21 x ; - "i" => guiar_43 x ; - "g" => pagar_53 x ; - "c" => sacar_72 x ; - _ => cortar_5 x - } ; - _ => Predef.error ("regular verb infinitive must end ar/ir/er, not satisfied by" ++ x) - } - in verbBesch verb ** {vtyp = VHabere ; p = [] ; lock_V = <>} ; + "u" => actuar_9 x ; + "z" => cazar_21 x ; + "i" => guiar_43 x ; + "g" => pagar_53 x ; + "c" => sacar_72 x ; + _ => cortar_5 x + } ; + _ => Predef.error ("regular verb infinitive must end ar/ir/er, not satisfied by" ++ x) -- rm this? + } + in verboV verb ; + regAltV : (mostrar,muestro : Str) -> V ; + regAltV x y = case x of { + _ + "ar" => verboV (regAlternV x y) ; + _ => verboV (regAlternVEr x y) + } ; + + verboV : Verbum -> V ; + verboV ve = verbBesch ve ** {vtyp = VHabere ; p = [] ; + lock_V = <>} ; + + mkV = overload { +--- [ ] update +-- Regular verbs are ones inflected like "cortar", "dever", or +-- "partir". The regular verb function is the first conjugation +-- ("ar") recognizes the variations corresponding to the patterns +-- "actuar, cazar, guiar, pagar, sacar". The module $BeschPor$ gives +-- the complete set of "Bescherelle" conjugations. + + mkV : (pagar : Str) -> V = \s -> case s of { + far + "-se" => reflV (regV far) ; + _ => regV s + } ; -- regular in "-ar", "-er", "-ir" + +-- Verbs with vowel alternation in the stem - easiest to give with two +-- forms, e.g. "mostrar"/"muestro". + mkV : (mostrar,muestro : Str) -> V = regAltV ; + +-- Most irregular verbs are found in $IrregPor$. If this is not +-- enough, the module $BeschPor$ gives all the patterns of the +-- "Bescherelle" book. To use them in the category $V$, wrap them with +-- the function + + mkV : Verbum -> V = -- import verb constructed with BeschPor + verboV ; + + -- particle verb + mkV : V -> Str -> V = + \v,p -> v ** {p = p} ; -- to recognize particles in dict, not + -- yet in lincat V + } ; + +-- To form reflexive verbs: + + reflV : V -> V ; -- reflexive verb reflV v = v ** {vtyp = VRefl} ; - verboV ve = verbBesch ve ** {vtyp = VHabere ; p = [] ; lock_V = <>} ; - - reflVerboV : Verbum -> V = \ve -> reflV (verboV ve) ; +-- Verbs with a deviant passive participle: just give the participle +-- in masculine singular form as second argument. + special_ppV : V -> Str -> V ; + -- deviant past participle, e.g. abrir - aberto special_ppV ve pa = { s = table { - VPart g n => (adjSolo pa).s ! AF g n ; + VPart g n => (adjPreto pa).s ! AF g n ; p => ve.s ! p } ; lock_V = <> ; @@ -410,131 +347,147 @@ oper vtyp = VHabere } ; - regAltV x y = case x of { - _ + "ar" => verboV (regAlternV x y) ; - _ => verboV (regAlternVEr x y) + +--3 Two-place verbs +-- +-- Two-place verbs need a preposition, except the special case with +-- direct object. (transitive verbs). + dirV2 : V -> V2 ; + dirV2 v = mk2V2 v accusative ; + + mk2V2 : V -> Prep -> V2 ; + mk2V2 v p = lin V2 (v ** {c2 = p}) ; + + mkV2 = overload { + mkV2 : Str -> V2 = -- regular, direct object + \s -> dirV2 (regV s) ; + mkV2 : V -> V2 = dirV2 ; -- direct object + mkV2 : V -> Prep -> V2 = mk2V2 -- other object } ; - +-- You can reuse a $V2$ verb in $V$. - mk2V2 v p = lin V2 (v ** {c2 = p}) ; - dirV2 v = mk2V2 v accusative ; + v2V : V2 -> V ; v2V v = lin V v ; - mmkV3 : V -> Prep -> Prep -> V3 ; -- parler, à, de - mmkV3 v p q = v ** {c2 = p ; c3 = q ; lock_V3 = <>} ; +--3 Three-place verbs +-- +-- Three-place (ditransitive) verbs need two prepositions, of which +-- the first one or both can be absent. + + mkV3 = overload { + mkV3 : V -> V3 = dirdirV3 ; -- donner (+ accusative + dative) + mkV3 : V -> Prep -> V3 = dirV3 ; -- placer (+ accusative) + dans + mkV3 : V -> Prep -> Prep -> V3 = mmkV3 -- parler + dative + genitive + } ; + + dirV3 : V -> Prep -> V3 ; + -- e.g. dar,(accusative),a dirV3 v p = mmkV3 v accusative p ; + + dirdirV3 : V -> V3 ; + -- e.g. dar,(dative),(accusative) dirdirV3 v = mmkV3 v dative accusative ; + mmkV3 : V -> Prep -> Prep -> V3 ; + -- falar a (fulano) de (cicrano) + mmkV3 v p q = v ** {c2 = p ; c3 = q ; lock_V3 = <>} ; + +--3 Other complement patterns +-- +-- Verbs and adjectives can take complements such as sentences, +-- questions, verb phrases, and adjectives. + + mkV0 : V -> V0 ; --% + mkV0 v = v ** {lock_V0 = <>} ; + + mkVS : V -> VS ; + mkVS v = v ** {m = \\_ => Indic ; lock_VS = <>} ; ---- more moods + + mkVV : V -> VV ; + -- plain infinitive: "quero falar" + mkVV v = v ** {c2 = complAcc ; lock_VV = <>} ; + + deVV : V -> VV ; + -- "terminar de falar" + deVV v = v ** {c2 = complGen ; lock_VV = <>} ; + + aVV : V -> VV ; + -- "aprender a falar" + aVV v = v ** {c2 = complDat ; lock_VV = <>} ; + + mkVA : V -> VA ; + mkVA v = v ** {lock_VA = <>} ; + + mkVQ : V -> VQ ; + mkVQ v = v ** {lock_VQ = <>} ; + + mkV2Q : V -> Prep -> V2Q ; + mkV2Q v p = mk2V2 v p ** {lock_V2Q = <>} ; + mmkV2 : V -> Prep -> V2 ; mmkV2 v p = v ** {c2 = p ; lock_V2 = <>} ; - mkV3 = overload { - mkV3 : V -> V3 = dirdirV3 ; -- donner,_,_ - mkV3 : V -> Prep -> V3 = dirV3 ; -- placer,_,sur - mkV3 : V -> Prep -> Prep -> V3 = mmkV3 -- parler, à, de + mkV2S = overload { + mkV2S : V -> V2S = + \v -> mmkV2 v dative ** {mn,mp = Indic ; lock_V2S = <>} ; + mkV2S : V -> Prep -> V2S = + \v,p -> mmkV2 v p ** {mn,mp = Indic ; lock_V2S = <>} ; } ; - mkV2S = overload { - mkV2S : V -> V2S = \v -> mmkV2 v dative ** {mn,mp = Indic ; lock_V2S = <>} ; - mkV2S : V -> Prep -> V2S = \v,p -> mmkV2 v p ** {mn,mp = Indic ; lock_V2S = <>} ; - } ; mkV2V = overload { - mkV2V : V -> V2V = \v -> mmkV3 v accusative dative ** {lock_V2V = <>} ; - mkV2V : V -> Prep -> Prep -> V2V = \v,p,q -> mmkV3 v p q ** {lock_V2V = <>} ; + mkV2V : V -> V2V = + \v -> mmkV3 v accusative dative ** {lock_V2V = <>} ; + mkV2V : V -> Prep -> Prep -> V2V = + \v,p,q -> mmkV3 v p q ** {lock_V2V = <>} ; } ; mkV2A = overload { - mkV2A : V -> V2A = \v -> mmkV3 v accusative dative ** {lock_V2A = <>} ; - mkV2A : V -> Prep -> Prep -> V2A = \v,p,q -> mmkV3 v p q ** {lock_V2A = <>} ; + mkV2A : V -> V2A = + \v -> mmkV3 v accusative dative ** {lock_V2A = <>} ; + mkV2A : V -> Prep -> Prep -> V2A = + \v,p,q -> mmkV3 v p q ** {lock_V2A = <>} ; } ; + mkAS : A -> AS ; --% + mkAS v = v ** {lock_AS = <>} ; ---- more moods + mkA2S : A -> Prep -> A2S ; --% + mkA2S v p = mkA2 v p ** {lock_A2S = <>} ; + + mkAV : A -> Prep -> AV ; --% + mkAV v p = v ** {c = p.p1 ; s2 = p.p2 ; lock_AV = <>} ; + + mkA2V : A -> Prep -> Prep -> A2V ; --% + mkA2V v p q = mkA2 v p ** {s3 = q.p2 ; c3 = q.p1 ; lock_A2V = <>} ; + +-- Notice: $V0$ is just $V$. + + V0 : Type ; --% V0 : Type = V ; + +-- Notice: categories $AS, A2S, AV, A2V$ are just $A$, and the second +-- argument is given as an adverb. + AS, A2S, AV, A2V : Type ; --% AS, AV : Type = A ; A2S, A2V : Type = A2 ; - mkV0 v = v ** {lock_V0 = <>} ; - mkVS v = v ** {m = \\_ => Indic ; lock_VS = <>} ; ---- more moods - mkVV v = v ** {c2 = complAcc ; lock_VV = <>} ; - deVV v = v ** {c2 = complGen ; lock_VV = <>} ; - aVV v = v ** {c2 = complDat ; lock_VV = <>} ; - - mkVA v = v ** {lock_VA = <>} ; - - mkVQ v = v ** {lock_VQ = <>} ; - mkV2Q v p = mk2V2 v p ** {lock_V2Q = <>} ; - - mkAS v = v ** {lock_AS = <>} ; ---- more moods - mkA2S v p = mkA2 v p ** {lock_A2S = <>} ; - mkAV v p = v ** {c = p.p1 ; s2 = p.p2 ; lock_AV = <>} ; - mkA2V v p q = mkA2 v p ** {s3 = q.p2 ; c3 = q.p1 ; lock_A2V = <>} ; - ---- - - mkN = overload { - mkN : (luz : Str) -> N = regN ; - mkN : Str -> Gender -> N = \s,g -> {s = (regN s).s ; g = g ; lock_N = <>}; - mkN : (baston,bastones : Str) -> Gender -> N = mk2N - } ; - regN : Str -> N ; - mk2N : (baston,bastones : Str) -> Gender -> N ; - mascN : N -> N ; - femN : N -> N ; - - - mkPN = overload { - mkPN : (Anna : Str) -> PN = regPN ; - mkPN : (Pilar : Str) -> Gender -> PN = mk2PN ; - mkPN : N -> PN = \n -> lin PN {s = n.s ! Sg ; g = n.g} ; - } ; - mk2PN : Str -> Gender -> PN ; -- Juan - regPN : Str -> PN ; -- feminine for "-a", otherwise masculine + --- + -- orphan definitions -- To form a noun phrase that can also be plural, -- you can use the worst-case function. + makeNP : Str -> Gender -> Number -> NP ; + makeNP x g n = {s = (pn2np (mk2PN x g)).s; + a = agrP3 g n ; + hasClit = False ; + isPol = False ; + isNeg = False} ** {lock_NP = <>} ; - makeNP : Str -> Gender -> Number -> NP ; - - mkA = overload { - mkA : (util : Str) -> A = regA ; - mkA : (espanol,espanola : Str) -> A = mk2A ; - mkA : (solo,sola,solos,solas,solamente : Str) -> A = mk5A ; - mkA : (bueno : A) -> (mejor : A) -> A = mkADeg ; - } ; - - mk5A : (solo,sola,solos,solas,solamente : Str) -> A ; - mk2A : (espanol,espanola : Str) -> A ; - regA : Str -> A ; - mkADeg : A -> A -> A ; - compADeg : A -> A ; regADeg : Str -> A ; - prefA : A -> A ; - prefixA = prefA ; - - mkV = overload { - mkV : (pagar : Str) -> V = \s -> case s of { - far + "se" => reflV (regV far) ; - _ => regV s - } ; - mkV : (mostrar,muestro : Str) -> V = regAltV ; - mkV : Verbum -> V = verboV ; - - mkV : V -> Str -> V = \v,p -> v ** {p = p} ; ---- to recognize particles in dict, not yet in lincat V - } ; - regV : Str -> V ; - regAltV : (mostrar,muestro : Str) -> V ; - verboV : Verbum -> V ; - - mkV2 = overload { - mkV2 : Str -> V2 = \s -> dirV2 (regV s) ; - mkV2 : V -> V2 = dirV2 ; - mkV2 : V -> Prep -> V2 = mk2V2 - } ; - mk2V2 : V -> Prep -> V2 ; - dirV2 : V -> V2 ; - + regADeg a = compADeg (regA a) ; + reflVerboV : Verbum -> V = \ve -> reflV (verboV ve) ; } ; diff --git a/src/portuguese/ResPor.gf b/src/portuguese/ResPor.gf index cfa9add4..f75f9df3 100644 --- a/src/portuguese/ResPor.gf +++ b/src/portuguese/ResPor.gf @@ -1,4 +1,4 @@ ---1 Pornish auxiliary operations. +--1 Portuguese auxiliary operations. -- ---- This module contains operations that are needed to make the ---- resource syntax work. To define everything that is needed to @@ -7,7 +7,6 @@ -- instance ResPor of ResRomance = DiffPor ** open CommonRomance, Prelude in { - ---- flags optimize=noexpand ; - + oper + vowel : pattern Str = #("a" | "e" | "i" | "o" | "u") ; } ; diff --git a/src/portuguese/StructuralPor.gf b/src/portuguese/StructuralPor.gf index 2c8a61b8..51282f6f 100644 --- a/src/portuguese/StructuralPor.gf +++ b/src/portuguese/StructuralPor.gf @@ -1,181 +1,173 @@ -concrete StructuralPor of Structural = CatPor ** - open PhonoPor, MorphoPor, ParadigmsPor, BeschPor, +concrete StructuralPor of Structural = CatPor ** + open PhonoPor, MorphoPor, ParadigmsPor, BeschPor, MakeStructuralPor, (X = ConstructX), Prelude in { flags optimize=all ; - coding=utf8 ; -lin - -- have_V3 - -- have_not_V3 + lin + -- have_V3 + -- have_not_V3 - above_Prep = mkPrep "sobre" ; - after_Prep = {s = ["despues"] ; c = MorphoPor.genitive ; isDir = False} ; - all_Predet = { - s = \\a,c => prepCase c ++ aagrForms "todo" "toda" "todos" "todas" ! a ; - c = Nom ; - a = PNoAg - } ; - almost_AdA, almost_AdN = ss "casi" ; - always_AdV = ss "siempre" ; - although_Subj = ss "aunque" ** {m = Conjunct} ; - and_Conj = {s1 = [] ; s2 = etConj.s ; n = Pl} ; - at_least_AdN = ss "al menos" ; - at_most_AdN = ss "a lo más" ; - because_Subj = ss "porque" ** {m = Indic} ; - before_Prep = {s = "antes" ; c = MorphoPor.genitive ; isDir = False} ; - behind_Prep = {s = "detrás" ; c = MorphoPor.genitive ; isDir = False} ; - between_Prep = mkPrep "entre" ; - both7and_DConj = {s1,s2 = etConj.s ; n = Pl} ; - but_PConj = ss "pero" ; - by8agent_Prep = mkPrep "por" ; - by8means_Prep = mkPrep "por" ; - can8know_VV = mkVV (verboV (saber_71 "saber")) ; - can_VV = mkVV (verboV (poder_58 "poder")) ; - during_Prep = mkPrep "durante" ; - either7or_DConj = {s1,s2 = "o" ; n = Sg} ; - everybody_NP = makeNP ["todos"] Masc Pl ; - every_Det = mkDeterminer "cada" "cada" Sg False ; - everything_NP = pn2np (mkPN ["todo"] Masc) ; - everywhere_Adv = ss ["en todas partes"] ; - except_Prep = mkPrep "excepto" ; - few_Det = mkDeterminer "pocos" "pocas" Pl False ; ---- first_Ord = {s = \\ag => (regA "primero").s ! Posit ! AF ag.g ag.n} ; - for_Prep = mkPrep "para" ; - from_Prep = complGen ; --- - he_Pron = - mkPronoun - "él" "lo" "le" "él" - "su" "su" "sus" "sus" - Masc Sg P3 ; - here_Adv = mkAdv "aquí" ; - here7to_Adv = mkAdv ["para aquí"] ; - here7from_Adv = mkAdv ["de aquí"] ; - how_IAdv = ss "como" ; - how8many_IDet = mkIDet "cuántos" "cuántas" Pl ; - how8much_IAdv = ss "cuánto" ; - if_Subj = ss "si" ** {m = Indic} ; - if_then_Conj = {s1 = "si" ; s2 = "entonces" ; n = Sg ; lock_Conj = <>} ; - in8front_Prep = {s = "delante" ; c = MorphoPor.genitive ; isDir = False} ; - i_Pron = - mkPronoun - "yo" "me" "me" "mí" - "mi" "mi" "mis" "mis" + --- Prons + i_Pron = + mkPronoun + "eu" "me" "me" "mim" "meu" "minha" "meus" "minhas" Masc Sg P1 ; - in_Prep = mkPrep "en" ; - it_Pron = - mkPronoun - "él" "lo" "le" "él" - "su" "su" "sus" "sus" + he_Pron = + mkPronoun + "ele" "o" "lhe" "ele" "seu" "sua" "seus" "suas" Masc Sg P3 ; - less_CAdv = X.mkCAdv "menos" conjThan ; ---- - many_Det = mkDeterminer "muchos" "muchas" Pl False ; - more_CAdv = X.mkCAdv "más" conjThan ; - most_Predet = {s = \\_,c => prepCase c ++ ["la mayor parte"] ; c = CPrep P_de ; - a = PNoAg} ; - much_Det = mkDeterminer "mucho" "mucha" Sg False ; - must_VV = mkVV (verboV (deber_6 "deber")) ; - no_Quant = - let - ningun : ParadigmsPor.Number => ParadigmsPor.Gender => Case => Str = table { - Sg => \\g,c => prepCase c ++ genForms "ningún" "ninguna" ! g ; - Pl => \\g,c => prepCase c ++ genForms "ningunos" "ningunas" ! g - } - in { - s = \\_ => ningun ; - sp = ningun ; - s2 = [] ; isNeg = True - } ; - no_Utt = ss "no" ; - not_Predet = {s = \\a,c => prepCase c ++ "no" ; c = Nom ; a = PNoAg} ; - nobody_NP = pn2npNeg (mkPN "nadie") ; - nothing_NP = pn2npNeg (mkPN "nada") ; - - on_Prep = mkPrep "sobre" ; ---- one_Quant = {s = \\g,c => prepCase c ++ genForms "uno" "una" ! g} ; - only_Predet = {s = \\_,c => prepCase c ++ "solamente" ; c = Nom ; - a = PNoAg} ; - or_Conj = {s1 = [] ; s2 = "o" ; n = Sg} ; - otherwise_PConj = ss "otramente" ; - part_Prep = complGen ; - please_Voc = ss ["por favor"] ; - possess_Prep = complGen ; - quite_Adv = ss "bastante" ; - she_Pron = - mkPronoun - "ella" "la" "le" "ella" - "su" "su" "sus" "sus" + it_Pron = he_Pron ; + she_Pron = + mkPronFrom he_Pron + "ela" "a" "lhe" "ela" Fem Sg P3 ; - so_AdA = ss "tanto" ; - somebody_NP = pn2np (mkPN "alguien" Masc) ; - somePl_Det = mkDeterminer "algunos" "algunas" Pl False ; - someSg_Det = mkDeterminer "algún" "alguna" Sg False ; - something_NP = pn2np (mkPN ["algo"] Masc) ; - somewhere_Adv = ss ["en alguna parte"] ; - that_Quant = mkQuantifier "ese" "esa" "esos" "esas" ; - there_Adv = mkAdv "allí" ; -- allá - there7to_Adv = mkAdv ["para allí"] ; - there7from_Adv = mkAdv ["de allí"] ; - therefore_PConj = ss ["por eso"] ; - they_Pron = mkPronoun - "ellos" "los" "les" "ellos" - "su" "su" "sus" "sus" - Masc Pl P3 ; - this_Quant = mkQuantifier "este" "esta" "estos" "estas" ; - through_Prep = mkPrep "por" ; - too_AdA = ss "demasiado" ; - to_Prep = complDat ; - under_Prep = mkPrep "bajo" ; - very_AdA = ss "muy" ; - want_VV = mkVV (verboV (querer_64 "querer")) ; - we_Pron = - mkPronoun - "nosotros" "nos" "nos" "nosotros" - "nuestro" "nuestra" "nuestros" "nuestras" + youSg_Pron = he_Pron ** pronLin "você" "te" "lhe" "você" ; + youPol_Pron = youPlPol_Pron | youSgPol_Pron ; + we_Pron = + mkPronoun + "nós" "nos" "nos" "nós" "nosso" "nossa" "nossos" "nossas" Masc Pl P1 ; - whatSg_IP = {s = \\c => prepCase c ++ ["qué"] ; a = aagr Masc Sg} ; - whatPl_IP = {s = \\c => prepCase c ++ ["qué"] ; a = aagr Masc Pl} ; --- - when_IAdv = ss "cuándo" ; - when_Subj = ss "cuando" ** {m = Indic} ; - where_IAdv = ss "dónde" ; - which_IQuant = {s = table { - Sg => \\g,c => prepCase c ++ "qué" ; --- cual - Pl => \\g,c => prepCase c ++ "qué" - } - } ; - whoPl_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Pl} ; - whoSg_IP = {s = \\c => prepCase c ++ "quién" ; a = aagr Masc Sg} ; - why_IAdv = ss ["por qué"] ; - without_Prep = mkPrep "sin" ; - with_Prep = mkPrep "con" ; - yes_Utt = ss "sí" ; - youSg_Pron = mkPronoun - "tú" "te" "te" "ti" - "tu" "tu" "tus" "tus" - Masc Sg P2 ; - youPl_Pron = - mkPronoun - "vosotros" "os" "os" "vosotros" - "vuestro" "vuestra" "vuestros" "vuestras" + they_Pron = mkPronFrom he_Pron + "eles" "os" "lhes" "eles" + Masc Pl P3 ; + youPl_Pron = + mkPronFrom they_Pron + "vocês" "os" "lhes" "vocês" + Masc Pl P3 ; + + above_Prep = mkPrep "sobre" ; + after_Prep = {s = ["depois"] ; c = MorphoPor.genitive ; + isDir = False} ; + all_Predet = { + s = \\a,c => prepCase c ++ aagrForms "todo" "toda" "todos" "todas" ! a ; + c = Nom ; + a = PNoAg + } ; + almost_AdA, almost_AdN = ss "quase" ; + always_AdV = ss "sempre" ; + although_Subj = ss "embora" ** {m = Conjunct} ; + and_Conj = {s1 = [] ; s2 = etConj.s ; n = Pl} ; + at_least_AdN = ss "pelo menos" ; + at_most_AdN = ss "no máximo" ; + because_Subj = ss "porque" ** {m = Indic} ; + before_Prep = {s = "antes" ; c = MorphoPor.genitive ; + isDir = False} ; + behind_Prep = {s = "atrás" ; c = MorphoPor.genitive ; + isDir = False} ; + between_Prep = mkPrep "entre" ; + both7and_DConj = {s1,s2 = etConj.s ; n = Pl} ; + but_PConj = ss "mas" ; + by8agent_Prep = mkPrep "por" ; + by8means_Prep = mkPrep "por" ; + can8know_VV = mkVV (verboV (saber_71 "saber")) ; + can_VV = mkVV (verboV (poder_58 "poder")) ; + during_Prep = mkPrep "durante" ; + either7or_DConj = {s1,s2 = "o" ; n = Sg} ; + everybody_NP = makeNP ["todos"] Masc Pl ; + every_Det = mkDeterminer "cada" "cada" Sg False ; + everything_NP = pn2np (mkPN ["todo"] Masc) ; + everywhere_Adv = ss ["em toda parte"] ; + except_Prep = mkPrep "exceto" ; + few_Det = mkDeterminer "poucos" "poucas" Pl False ; + --- first_Ord = {s = \\ag => (regA "primeiro").s ! Posit ! AF ag.g ag.n} ; + for_Prep = mkPrep "para" ; + from_Prep = complGen ; --- + here_Adv = mkAdv "aqui" ; + here7to_Adv = mkAdv ["para cá"] ; + here7from_Adv = mkAdv ["daqui"] ; + how_IAdv = ss "como" ; + how8many_IDet = mkIDet "quantos" "quantas" Pl ; + how8much_IAdv = ss "quanto" ; + if_Subj = ss "se" ** {m = Indic} ; + if_then_Conj = {s1 = "se" ; s2 = "então" ; + n = Sg ; lock_Conj = <>} ; + in8front_Prep = {s = "à frente" ; c = MorphoPor.genitive ; isDir = False} ; + in_Prep = mkPrep "em" ; + + less_CAdv = X.mkCAdv "menos" conjThan ; ---- + many_Det = mkDeterminer "muitos" "muitas" Pl False ; + more_CAdv = X.mkCAdv "mais" conjThan ; + most_Predet = {s = \\_,c => prepCase c ++ ["a maior parte"] ; c = CPrep P_de ; + a = PNoAg} ; + much_Det = mkDeterminer "muito" "muita" Sg False ; + must_VV = mkVV (verboV (deber_6 "dever")) ; + no_Quant = + let + ningun : ParadigmsPor.Number => ParadigmsPor.Gender => Case => Str = table { + _ => \\g,c => prepCase c ++ genForms "nenhum" "nenhuma" ! g + } + in { + s = \\_ => ningun ; + sp = ningun ; + s2 = [] ; isNeg = True + } ; + no_Utt = ss "não" ; + not_Predet = {s = \\a,c => prepCase c ++ "não" ; c = Nom ; a = PNoAg} ; + nobody_NP = pn2npNeg (mkPN "ninguém") ; + nothing_NP = pn2npNeg (mkPN "nada") ; + + on_Prep = mkPrep "sobre" ; + --- one_Quant = {s = \\g,c => prepCase c ++ genForms "uno" "una" ! g} ; + only_Predet = {s = \\_,c => prepCase c ++ "só" ; c = Nom ; + a = PNoAg} ; + or_Conj = {s1 = [] ; s2 = "ou" ; n = Sg} ; + otherwise_PConj = ss "caso contrário" ; + part_Prep = complGen ; + please_Voc = ss ["por favor"] ; + possess_Prep = complGen ; + quite_Adv = ss "bastante" ; + so_AdA = ss "tanto" ; + somebody_NP = pn2np (mkPN "alguém" Masc) ; + somePl_Det = mkDeterminer "alguns" "algumas" Pl False ; + someSg_Det = mkDeterminer "algum" "alguma" Sg False ; + something_NP = pn2np (mkPN ["algo"] Masc) ; + somewhere_Adv = ss ["em algum lugar"] ; + that_Quant = mkQuantifier "esse" "essa" "esses" "essas" ; + there_Adv = mkAdv "ali" ; -- lá + there7to_Adv = mkAdv ["para lá"] ; + there7from_Adv = mkAdv ["dali"] ; + therefore_PConj = ss ["por isso"] ; + + this_Quant = mkQuantifier "este" "esta" "estes" "estas" ; + through_Prep = mkPrep "por" ; + too_AdA = ss "demasiado" ; -- o certo seria demais como postfix + to_Prep = complDat ; + under_Prep = mkPrep "embaixo" ; + very_AdA = ss "muito" ; + want_VV = mkVV (verboV (querer_64 "querer")) ; + whatSg_IP = {s = \\c => prepCase c ++ ["que"] ; a = aagr Masc Sg} ; + whatPl_IP = {s = \\c => prepCase c ++ ["que"] ; a = aagr Masc Pl} ; --- + when_IAdv = ss "quando" ; + when_Subj = ss "quando" ** {m = Indic} ; + where_IAdv = ss "onde" ; + which_IQuant = {s = table { + Sg => \\g,c => prepCase c ++ "que" ; --- qual + Pl => \\g,c => prepCase c ++ "que" + } + } ; + whoPl_IP = {s = \\c => prepCase c ++ "quem" ; a = aagr Masc Pl} ; + whoSg_IP = {s = \\c => prepCase c ++ "quem" ; a = aagr Masc Sg} ; + why_IAdv = ss ["por quê"] ; + without_Prep = mkPrep "sem" ; + with_Prep = mkPrep "com" ; + yes_Utt = ss "sim" ; + + oper + -- is it still necessary after deleting the Spa confusion? y/e + etConj : {s : Str ; n : MorphoPor.Number} = {s = "e"} ** {n = Pl} ; + + youSgPol_Pron : Pronoun = + mkPronoun "tu" "te" "te" "ti" "teu" "tua" "teus" "tuas" + Masc Sg P2 ; + youPlPol_Pron : Pronoun = + mkPronoun "vós" "vos" "vos" "vós" + "vosso" "vossa" "vossos" "vossas" Masc Pl P2 ; - youPol_Pron = - mkPronoun - "usted" "lo" "le" "usted" - "su" "su" "sus" "sus" - Masc Sg P3 ; + lin + as_CAdv = X.mkCAdv "tão" conjThan ; ---- + have_V2 = dirV2 (verboV (tener_4 "ter")) ; + that_Subj = {s = "que" ; m = Conjunct} ; -oper - etConj : {s : Str ; n : MorphoPor.Number} = {s = pre { - "y" ; - "y" / strs {"ya" ; "ye" ; "yo" ; "yu"} ; - "e" / strs {"i" ; "hi" ; "y"} - }} ** {n = Pl} ; -lin - as_CAdv = X.mkCAdv "si" conjThan ; ---- - have_V2 = dirV2 (verboV (tener_4 "tener")) ; - - that_Subj = {s = "que" ; m = Conjunct} ; - - lin language_title_Utt = ss "español" ; + lin language_title_Utt = ss "português" ; } -