Grammalecte  Check-in [722c557610]

Overview
Comment:[fr] conversion: regex rules -> graph rules
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | fr | rg
Files: files | file ages | folders
SHA3-256: 722c557610645428ab0d49eac22ee5bc9a825c6b98ecc53c09580ea556c6deb6
User & Date: olr on 2018-08-18 20:27:35
Other Links: branch diff | manifest | tags
Context
2018-08-18
21:31
[fr] conversion: regex rules -> graph rules check-in: 3d86b1d267 user: olr tags: fr, rg
20:27
[fr] conversion: regex rules -> graph rules check-in: 722c557610 user: olr tags: fr, rg
13:29
[core] gc engine: don’t check regexes on some META tokens check-in: 209474b757 user: olr tags: core, rg
Changes

Modified gc_lang/fr/rules.grx from [9664aedc44] to [fb2cb409ee].

2194
2195
2196
2197
2198
2199
2200
2201
2202


2203
2204
2205



2206

2207
2208


2209
2210






2211
2212
2213
2214
2215
2216
2217
2218
2219
2220
2221
2222












2223
2224
2225
2226
2227
2228
2229
2194
2195
2196
2197
2198
2199
2200


2201
2202
2203
2204
2205
2206
2207
2208

2209
2210
2211
2212
2213


2214
2215
2216
2217
2218
2219
2220
2221
2222
2223
2224
2225
2226
2227
2228
2229
2230

2231
2232
2233
2234
2235
2236
2237
2238
2239
2240
2241
2242
2243
2244
2245
2246
2247
2248
2249







-
-
+
+



+
+
+
-
+


+
+
-
-
+
+
+
+
+
+











-
+
+
+
+
+
+
+
+
+
+
+
+








    vous [>avoir|>être]
        <<- not morph(\2, ":2p") =>> exclude(\1, ":Os")


__da_préverbes_verbes__
    ne  ?[le|la|l’|les|nous|vous|lui|leur]¿  (@:¬:[OX])
    ne  [nous|vous]     [le|la|l’|les|en|y]  (@:¬:[OX])
    ne  [le|la|l’|les]  [lui|leur|en|y]      (@:¬:[OX])
    ne  [nous|vous]     [le|la|l’|les|en]    (@:¬:[OX])
    ne  [le|la|l’|les]  [lui|leur|en]        (@:¬:[OX])
    ne  [lui|leur]      en                   (@:¬:[OX])
        <<- =>> select(\1, ":V")

    [me|m’|te|se|s’]  ?[le|la|l’|les]¿  (@:¬:[OX])
        <<- =>> select(\1, ":V")

    [n’|m|t|s’]  ?[en|y]¿  (@:¬:[OX])
    [n’|m’|s’]  ?[en|y]¿  (@:¬:[OX])
        <<- =>> select(\1, ":V")

    t’  [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:X|>rien/
        <<- =>> select(\3, ":(?:[123][sp]|P|Y)")
    [me|te|se]  ?[le|la|l’|les]¿  (@:¬:[OX])
        <<- =>> select(\1, ":V")

    t’  @:¬:X|>(?:rien|ils?|elles?|on)/
        <<- =>> select(\2, ":(?:[123][sp]|P|Y)")

    y  @:¬:[OX]
        <<- =>> select(\2, ":(?:[123][sp]|P|Y)")

    [je|j’|il|ils|on]  ?[le|la|l’|les|en|nous|vous|lui|leur|y]¿  (@:¬:[OX])
    [je|j’|il|ils|on]  [nous|vous]     [le|la|l’|les|en|y]       (@:¬:[OX])
    [je|j’|il|ils|on]  [le|la|l’|les]  [lui|leur|en|y]           (@:¬:[OX])
    [je|j’|il|ils|on]  [lui|leur]      en                        (@:¬:[OX])
        <<- =>> select(\1, ":[123][sp]")

    tu  ?[le|la|l’|les|en|nous|vous|lui|leur|y]¿  (@:¬:[OX])
    tu  [nous|vous]   [le|la|l’|les|en|y]         (@:¬:[OX])
    tu  [le|la|l’|les]  [lui|leur|en|y]           (@:¬:[OX])
    tu  [lui|leur]      en                        (@:¬:[OX])
        <<- morph(<1, ":Cs|<start>") =>> select(\1, ":[123][sp]")
        <<- not morph(<1, ":V0") =>> select(\1, ":[123][sp]")

    lui  [la|le|l’|les]  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":R") =>> select(\3, ":(?:[123][sp]|P|Y)")

    [nous|vous]     [le|la|l’|les|en]  @:¬:[OX]
    lui             en                 @:¬:[OX]
        <<- not morph(<1, ":R") =>> select(\3, ":(?:[123][sp]|P|Y)")

    [le|la|l’|les]  [lui|leur|en]      @:¬:[OX]
    leur            en                 @:¬:[OX]
        <<- =>> select(\2, ":(?:[123][sp]|P|Y)")

    @:M  @:[123]s¬:Q
        <<- \2.islower() and morph(<1, ":Cs|<start>") =>> select(\2, ":[123][sp]")

    <start> @:M  @:(?:[123]s|Oo)|>ne/¬:A
        <<- =>> =select(\2, ":M")

8015
8016
8017
8018
8019
8020
8021

8022
8023
8024
8025
8026
8027
8028
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049







+







    de fil en aiguille
    de fond en comble
    de fort [loin|près]
    de [fraîche|fraiche] date
    de [gaieté|gaîté|gaité] de cœur
    de gauche à droite
    de gauche comme de droite
    de génération en génération
    de grande [taille|envergure]
    de gré ou de force
    de guerre lasse
    de haut en bas
    de haut [rang|vol]
    de haute [lutte|stature|volée]
    de jour comme de nuit
14550
14551
14552
14553
14554
14555
14556
14557

14558
14559
14560
14561
14562
14563
14564
14565
14566
14567
14568
14569
14570
14571
14572
14573
14574
14575

14576
14577
14578
14579
14580
14581
14582
14571
14572
14573
14574
14575
14576
14577

14578
14579
14580
14581
14582
14583
14584
14585
14586
14587
14588
14589
14590
14591
14592
14593
14594
14595

14596
14597
14598
14599
14600
14601
14602
14603







-
+

















-
+







TEST: {{avançait moi}} de l’argent                      ->> avancez-moi
TEST: {{filé moi}} du fric, bon sang !                  ->> filez-moi
TEST: {{Données lui}} ça.                               ->> Donnez-lui
TEST: {{Enseignait nous}}.                              ->> Enseignez-nous


# être
__imp_sois__
__imp_être__
    <start>  [ne|n’]  ?[le|l’|en|me|m’|te|t’|nous|vous|lui|leur|y]¿  soit
    <start>  [ne|n’]  [me|m’|te|t’|nous|vous]  [le|l’|en|y]          soit
    <start>  [ne|n’]  [le|l’]                  [lui|leur|en|y]       soit
    <start>  [ne|n’]  [lui|leur]               en                    soit
        <<- /imp/ --1>> sois                                                        # S’il s’agit d’un impératif, écrivez “sois”.

    <start>  soit  @:A¬:G
        <<- /imp/ not after(r"\bsoit\b") -2>> sois                                  # S’il s’agit d’un impératif, écrivez “sois”.

TEST: ne lui {{soit}} pas odieux.
TEST: {{Soit}} cohérent avec toi-même.
TEST: Ne {{soit}} pas con.
TEST: ne leur en {{soit}} pas reconnaissant, ce n’était qu’un calcul de leur part.
TEST: Ne {{soit}} pas en retard !


# avoir
__imp_aie__
__imp_avoir__
    <start>  [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|nous|vous|lui|leur|y]¿  [ai|ait|aies]
    <start>  [ne|n’]  [me|m’|te|t’|nous|vous]  [le|la|l’|les|en|y]          [ai|ait|aies]
    <start>  [ne|n’]  [le|la|l’|les]           [lui|leur|en|y]              [ai|ait|aies]
    <start>  [ne|n’]  [lui|leur]               en                           [ai|ait|aies]
    <start>  [ai|ait|aies]
        <<- /imp/ --1>> aie                                                         # S’il s’agit d’un impératif, écrivez “aie”.

14609
14610
14611
14612
14613
14614
14615
14616
14617
14618
14619
14620
14621
14622

14623
14624
14625
14626
14627
14628
14629
14630
14631
14632
14633
14634
14635
14636




14637


14638
14639
14640
14641
14642
14643
14644
14645







-
-
-
-

-
-
+







    <start>  vas
        <<- /imp/ not value(>1, "|tu|") --1>> va                                   # S’il s’agit d’un impératif, pas de “s”.

TEST: {{Vas}} lui mettre une branlée.
TEST: {{Vas}} au diable !
TEST: N’y {{vas}} pas

# <start>  [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]¿
# <start>  [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]  [le|la|l’|les|en|y]
# <start>  [ne|n’]  [le|la|l’|les]                 [lui|leur|en|y]
# <start>  [ne|n’]  [lui|leur]                     en


# verbes du 1er et du 3ᵉ groupe en -e
# verbes du 1ᵉʳ et du 3ᵉ groupe en -e
__imp_verbe_groupe1__
    <start>  [ne|n’]  ?[le|la|l’|les|en|me|m’|te|t’|nous|vous|lui|leur|y]¿  ~\w\w+es$
    <start>  [ne|n’]  [me|m’|te|t’|nous|vous]  [le|la|l’|les|en|y]          ~\w\w+es$
    <start>  [ne|n’]  [le|la|l’|les]           [lui|leur|en|y]              ~\w\w+es$
    <start>  [ne|n’]  [lui|leur]               en                           ~\w\w+es$
        <<- /imp/ morph(\-1, ":V[13].*:Ip.*:2s", ":G") and not value(>1, "|tu|")
        --1>> =\-1[:-1]                                                             # S’il s’agit d’un impératif, pas de “s”.
14766
14767
14768
14769
14770
14771
14772
14773
14774
14775
14776
14777
14778
14779
14780
14782
14783
14784
14785
14786
14787
14788

14789
14790
14791
14792
14793
14794
14795







-







TEST: deux fois par an, souligne le Dr Assouline
TEST: Pesons le pour et le contre.
TEST: Va la demander au concierge.
TEST: Allons le questionner encore une fois.
TEST: Sois le pire des salopards.



__imp_laisser_le_la_les_infi__
    >laisser  [le|la|les]  *WORD
        <<- /imp/ space_after(\1, 1, 1) and morph(\1, ":E") and morph(\3, ":(?:Y|X|Oo)", ":[NAB]")
        -1:2>> \1-\2                                    # S’il s’agit d’un impératif, mettez un trait d’union.|http://bdl.oqlf.gouv.qc.ca/bdl/gabarit_bdl.asp?id=4206

TEST: {{Laisse les}} entrer…
TEST: {{Laissez la}} venir…
14848
14849
14850
14851
14852
14853
14854
14855
14856
14857
14858
14859
14860
14861
14862
14863
14864
14865
14866
14867
14868
14869
14870
14871
14872
14873
14874
14875
14876


14877
14878
14879
14880
14881

14882
14883
14884

14885
14886
14887
14888
14889
14890
14891
14892
14893
14894
14895
14896
14897
14898
14899
14900
14901
14902
14903
14904
14905
14906
14907
14908
14909
14910
14911
14912
14913
14914

14915
14916
14917
14918
14919
14920
14921
14922
14923
14924
14925
14926
14927
14928
14929

14930
14931
14932
14933
14934



14935
14936
14937
14938
14939
14940
14941









14942
14943
14944
14945
14946




14947
14948
14949
14950



14951
14952
14953
14954
14955
14956
14957
14958
14959
14960
14961
14962
14963
14964
14965
























14966
14967
14968
14969
14970
14971
14972
14973
14974










14975
14976
14977
14978
14979
14980
14981
14982
14983
14984
14985
14986
14987
14988
14989
14990
14991


























14992
14993
14994
14995



14996
14997
14998
14999
15000
15001
15002







15003
15004
15005
15006
15007
15008
15009
15010
15011
15012
15013
15014















15015
15016
15017
15018
15019
15020
15021
15022
15023
15024
15025
15026
15027




















15028
15029
15030
15031



15032
15033
15034
15035
15036
15037
15038
15039
15040
15041
15042
15043
















15044
15045
15046
15047



15048
15049
15050


15051
15052
15053
15054
15055
15056
15057
15058
15059
15060










15061
15062
15063
15064
15065










15066
15067
15068

15069
15070
15071
15072
15073
15074
15075
14863
14864
14865
14866
14867
14868
14869




14870
14871

14872
14873
14874
14875











14876
14877





14878
14879

14880
14881
14882




























14883
14884
14885
14886
14887
14888
14889
14890
14891
14892
14893
14894
14895
14896
14897
14898

14899





14900
14901
14902







14903
14904
14905
14906
14907
14908
14909
14910
14911





14912
14913
14914
14915




14916
14917
14918















14919
14920
14921
14922
14923
14924
14925
14926
14927
14928
14929
14930
14931
14932
14933
14934
14935
14936
14937
14938
14939
14940
14941
14942









14943
14944
14945
14946
14947
14948
14949
14950
14951
14952

















14953
14954
14955
14956
14957
14958
14959
14960
14961
14962
14963
14964
14965
14966
14967
14968
14969
14970
14971
14972
14973
14974
14975
14976
14977
14978




14979
14980
14981







14982
14983
14984
14985
14986
14987
14988












14989
14990
14991
14992
14993
14994
14995
14996
14997
14998
14999
15000
15001
15002
15003













15004
15005
15006
15007
15008
15009
15010
15011
15012
15013
15014
15015
15016
15017
15018
15019
15020
15021
15022
15023




15024
15025
15026












15027
15028
15029
15030
15031
15032
15033
15034
15035
15036
15037
15038
15039
15040
15041
15042




15043
15044
15045



15046
15047










15048
15049
15050
15051
15052
15053
15054
15055
15056
15057





15058
15059
15060
15061
15062
15063
15064
15065
15066
15067


15068
15069
15070
15071
15072
15073
15074
15075
15076







-
-
-
-


-




-
-
-
-
-
-
-
-
-
-
-
+
+
-
-
-
-
-
+

-

+

-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-

+














-
+
-
-
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
+
+
+
-
-
-
+
+
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
-
-

+







__imp_union_aller_y!5__
    [viens|venez|venons|allons|allez] y
        <<- /imp/ space_after(\1, 1, 1) and not morph(>1, ":Y") ->> \1-\2           # Il manque un trait d’union.

    [va|vas] [y|z-y|z’y]
        <<- /imp/ space_after(\1, 1, 1) and not morph(>1, ":Y") ->> vas-y           # Il manque un trait d’union.

__imp_union_convenir_en__
    [conviens|convenez|convenons] en
        <<- /imp/ space_after(\1, 1, 1) and not value(>1, "|partie|") ->> \1-\2     # Il manque un trait d’union.

TEST: {{allons y}}
TEST: {{vas y}}
TEST: c’est une belle affaire malgré son prix élevé, {{convenez en}}…
TEST: {{Viens y}}.
TEST: Viens y faire un test.


@@@@
@@@@
@@@@
@@@@
@@@@END_GRAPH                                                                                      _
@@@@
@@@@
@@@@
@@@@


__imp_union_convenir_en__
    [conviens|convenez|convenons] en
!!!
!!!
!!! Processeur avant impératif                                                                    !!
!!!
!!!
        <<- /imp/ space_after(\1, 1, 1) and not value(>1, "|partie|") ->> \1-\2     # Il manque un trait d’union.

__<i>(p_n_importe_qui_quoi)__       n(’)importe quo?i @@1 <<- ~1>> `

TEST: c’est une belle affaire malgré son prix élevé, {{convenez en}}…

__<i](p_premier_ne_pro_per_obj1)__
    ^( *ne l(?:es?|a) l(?:ui|eur)) ({w_2})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
    <<- ~1>> *
__<i](p_premier_ne_pro_per_obj2)__
    ^( *ne (?:[mt]’|l(?:ui|eur) )en) ({w_2})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
    <<- not morph(\1, ":X|>rien/", False) ~1>> *
__<i](p_premier_ne_pro_per_obj3)__
    ^( *ne (?:[mt]e|[nv]ous) (?:les?|la|en)) ({w_2})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
    <<- ~1>> *
__<i](p_premier_ne_pro_per_obj4)__
    ^( *ne +(?:l(?:es?|a|’(?:en|y))|[mt](?:e|’(?:en|y))|[nv]ous)) ({w_2})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
    <<- ~1>> *
__<i>(p_premier_ne_pro_per_obj5)__
    ^( *n’(?:en |y |))({w_2})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
    <<- not morph(\1, ":X|>rien/", False) ~1>> *
__<i>(p_premier_ne_pro_per_obj6)__
    ^( *ne l’)({w_2})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
    <<- ~1>> *
__<i>(p_premier_ne_pro_per_obj7)__
    ^( *ne) ({w_2})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P)", False) =>> select(\2,":(?:[123][sp]|P)")
    <<- not morph(\2, ":X|>rien/", False) ~1>> *

# Autres tests
TEST: Ne rien céder.
TEST: Ne pas manger.
TEST: Ne manquer de rien.
TEST: Ne jamais miser sur ces tocards.
TEST: Ne m’en rien laisser.



!!!
!!!
!!! Processeur: destruction des pronoms qui précèdent un verbe et de l’adverbe de négation “ne”.  !!
!!!
!!!

# Brainfuck (ici, prudence !)
__purge_préverbes1__
__[i](p_pro_per_obj01)__
    (ne +(?:l(?:ui|eur|a|es?)|[mts]e|[nv]ous) +(?:l(?:a|es?|ui|eur)|en|y)) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj02)__
    [ne|n’|me|m’|te|se|s’|y]  @:(?:[123][sp]|P|Y)¬:X|>rien/
        <<- ~1>> *

    (ne +(?:[mts](?:e|’(?:en|y))|[nv]ous|l(?:es?|a|ui|eur|’(?:en|y)))) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj03)__
    ([mts]e +l(?:a|es?)) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
    t’  @:(?:[123][sp]|P|Y)¬:(?:X|2s)|>(?:rien|ils?|elles?|on)/
        <<- ~1>> *

    le    @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[me]:[si]|G|M)
    la    @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[fe]:[si]|G|M)
    l’    @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[si]|G|M)
    les   @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[pi]|G|M)
    en    @:(?:[123][sp]|P|Y)¬:[NA]
    nous  @:(?:[123][sp]|P|Y)¬:1p
__[i](p_pro_per_obj04)__
    ([nmsl]’(?:en|y)) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj05)__
    vous  @:(?:[123][sp]|P|Y)¬:2p
    leur  @:(?:[123][sp]|P|Y)¬:(?:[NA].*:[si]|G|M)
        <<- \2.islower() ~1>> *

    (l(?:a|es?) +(?:lui|en)) +({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj06)__
    lui   @:(?:[123][sp]|P|Y)¬:3s
        <<- not morph(<1, ":R") ~2>> *

    (lui +(?:la|les?|en|y)) +({w_1})  @@0,$
    <<- not morph(word(-1), ":R", False, True) ~1>> *
    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj07)__
    (leur +(?:en|y)) +({w_1})  @@0,$
    <<- not morph(word(-1), ":R", False, False) ~1>> *
    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj08)__
    (?:je|tu|ils?|on) ([nv]ous(?: la| les?|)|lui) +({w_1})  @@*,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj09)__
    (?:je|tu|ils?|on) (l(?:es?|a)) ({w_1}) @@w,$
    <<- (\1 == "le" and not morph(\2, ":N.*:[me]:[si]"))
        or (\1 == "la" and not morph(\2, ":N.*:[fe]:[si]"))
    [je|j’|tu|il|on]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[me]:[si]") ~2>> *

    [je|j’|tu|il|on]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *

    [je|j’|tu|il|on]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[si]") ~2>> *

    [je|j’|tu|il|on]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":N.*:[pi]") ~2>> *

    [je|j’|tu|il|on]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":[123]s") or not morph(\3, ":[NA]") ~2>> *

    ils  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[me]:[si]") ~2>> *

    ils  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *

    ils  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[si]") ~2>> *

        or (\1 == "les" and not morph(\2, ":N.*:.:[pi]")) ~1>> *
    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj10)__
    (?:elles?|[nv]ous) ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) +({w_1})  @@*,$
    <<- not morph(word(-1), ":R", False, False) ~1>> *
    <<- __also__ and morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj11)__
    ce(?:ux|lles?|lui|la|) qui ([nv]ous(?: la| les?|)|l(?:es?|ui|a)) +({w_1})  @@*,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    ils  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":N.*:[pi]") ~2>> *

    ils  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":3p") or not morph(\3, ":[NA]") ~2>> *

    [lui|celui-là|celui-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *

    [lui|celui-là|celui-ci]  la   @:(?:[123][sp]|P|Y)
    <<- __also__ ~1>> *
__[i](p_pro_per_obj12)__
    (?<!’)(en) ({w_2}) @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)") ~1>> *
__[i](p_pro_per_obj13)__
    (?:tu|il|on) (en) +({w_1})  @@w,$
    <<- not morph(word(-1), ":[123]s", False, False) ~1>> *
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj14)__
    (?<!’)elle (en) +({w_1})  @@w,$
    <<- not morph(word(-1), ":(?:[123]s|R)", False, False) ~1>> *
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj15)__
    (?<!’)elles (en) +({w_1})  @@w,$
    <<- not morph(word(-1), ":(?:[123]p|R)", False, False) ~1>> *
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj16)__
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *

    [lui|celui-là|celui-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[si]") ~2>> *

    [lui|celui-là|celui-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[pi]") ~2>> *

    [lui|celui-là|celui-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":[NA]") ~2>> *

    [elle|celle-là|celle-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *

    [elle|celle-là|celle-ci]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *

    [elle|celle-là|celle-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[si]") ~2>> *

    [elle|celle-là|celle-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":N.*:[pi]") ~2>> *

    [elle|celle-là|celle-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3s|R)") or not morph(\3, ":[NA]") ~2>> *

    ils (en) +({w_1})  @@4,$
    <<- not morph(word(-1), ":3p", False, False) ~1>> *
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj17)__
    nous  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *

    (?<!’)(y) ({w_2}) @@0,2
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) ~1>> *
    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj18)__
    (le) ({w_2}) @@0,3
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[me]:[si]|G|M)") ~1>> *
    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
    nous  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *

    nous  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[si]") ~2>> *

    nous  les  @:(?:[123][sp]|P|Y)
__[i](p_pro_per_obj19)__
    (la) ({w_2}) @@0,3
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[fe]:[si]|G|M)") ~1>> *
    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj20)__
    (l’)({w_2}) @@0,2
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> *
    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
__[i](p_pro_per_obj21)__
    (leur) {1,3}({w_2}) @@0,5
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:[NAQ].*:[si]|G|M)") ~1>> *
    <<- __also__ =>> select(\2, ":(?:[123][sp]|P|Y)")
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":N.*:[pi]") ~2>> *

    nous  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:1p|R)") or not morph(\3, ":[NA]") ~2>> *

    vous  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *

    vous  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *

    vous  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[si]") ~2>> *

    vous  les  @:(?:[123][sp]|P|Y)
__[s](p_pro_per_obj22)__
    [lL]’(a) @@$
    <<- =>> select(\1, ":V")
    <<- ~>> "  a"
__[i](p_pro_per_obj23)__
    (nous) {1,3}({w_2}) @@0,5
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:A|G|M|1p)") =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj24)__
    (vous) {1,3}({w_2}) @@0,5
    <<- morphex(\2, ":(?:[123][sp]|P|Y)", ":(?:A|G|M|2p)") =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj25)__
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":N.*:[pi]") ~2>> *

    vous  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:2p|R)") or not morph(\3, ":[NA]") ~2>> *

    [elles|celles-là|celles-ci]  le   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[me]:[si]") ~2>> *

    [elles|celles-là|celles-ci]  la   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[fe]:[si]") ~2>> *

    [elles|celles-là|celles-ci]  [l’|leur]   @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[si]") ~2>> *

    [elles|celles-là|celles-ci]  les  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":N.*:[pi]") ~2>> *

    [elles|celles-là|celles-ci]  en  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":(?:3p|R)") or not morph(\3, ":[NA]") ~2>> *

    (?:à|de) ([nv]ous|lui|les?|en) (?!qui)({w_2}) @@w,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i](p_pro_per_obj26)__
    [je|j’|tu|il|on|ils]  [nous|vous|lui]  @:(?:[123][sp]|P|Y)
        <<- ~2>> *

    (s’)({w4}) @@0,2
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj27)__
    (?:je|tu|ils?|elles?|on) (l’|l(?:es?|a|ui|eur) +|[nv]ous +)({w_2}) @@*,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- isStart() ~1>> *
__[i](p_pro_per_obj28)__
    (?:je|tu|ils?|elles?|on|[nv]ous|ce(?:ux|elles?|lui|la|) qui) (l’)({w4}) @@*,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- __also__ ~1>> *
__[i](p_pro_per_obj29)__
    [lui|celui-là|celui-ci]     [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [elle|celle-là|celle-ci]    [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [nous|vous]                 [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [eux|ceux-là|ceux-ci]       [nous|vous|lui]  @:(?:[123][sp]|P|Y)
    [elles|celles-là|celles-ci] [nous|vous|lui]  @:(?:[123][sp]|P|Y)
        <<- not morph(<1, ":R") ~2>> *


__purge_préverbes2__
    [me|m’|te|se|s’]  [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:X|>rien/
    nous              [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:(?:X|1p)|>rien/
    vous              [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:(?:X|2p)|>rien/
    [le|la|l’|les]    [lui|leur|en|y]      @:(?:[123][sp]|P|Y)¬:X|>rien/
    leur              en                   @:(?:[123][sp]|P|Y)¬:X|>rien/
        <<- ~1:2>> *

    (t’(?:en|y)) {1,3}({w_2}) @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- not morph(\2, ":2s", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> *
__[i](p_pro_per_obj30)__
    lui                         en                   @:(?:[123][sp]|P|Y)¬:X|>rien/
        <<- not morph(<1, ":(?:R|3s)") ~1:2>> *

    (t’)({w_2}) @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- not morph(\2, ":2s|>(ils?|elles?|on)/", False) or before(r"(?i)\b(?:je|tu|on|ils?|elles?|nous) +$") ~1>> *
    t’  [le|la|l’|les|en|y]  @:(?:[123][sp]|P|Y)¬:X|>rien/
        <<- not morph(\3, ":2s") or value(<1, "|je|j’|tu|il|elle|on|nous|vous|ils|elles|") ~1:2>> *
__[i>(p_pro_per_obj31)__
    (ne +[mtsl]’)({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i>(p_pro_per_obj32)__
    ([mts]e +l’)({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
    <<- ~1>> *
__[i>(p_pro_per_obj33)__
    [nm]’({w_1})  @@2
        <<- ~2>> *

__purge_préverbes_négation__
    [ne|n’]  [le|la|l’|les|en|me|m’|te|t’|se|s’|nous|vous|lui|leur|y]  @:(?:[123][sp]|P|Y)¬:X|>rien/
    [ne|n’]  [me|m’|te|t’|se|s’|nous|vous]  [le|la|l’|les|en|y]        @:(?:[123][sp]|P|Y)¬:X|>rien/
    [ne|n’]  [le|la|l’|les]                 [lui|leur|en|y]            @:(?:[123][sp]|P|Y)¬:X|>rien/
    [ne|n’]  [lui|leur]                     en                         @:(?:[123][sp]|P|Y)¬:X|>rien/
        <<- ~1:-2>> *


    <<- morph(\1, ":(?:[123][sp]|P|Y)", False) =>> select(\1, ":(?:[123][sp]|P|Y)")
    <<- ~>> "  \1"
__[i](p_pro_per_obj34)__
    ([nmts]e +)({w_1})  @@0,$
    <<- morph(\2, ":(?:[123][sp]|P|Y)", False) =>> select(\2, ":(?:[123][sp]|P|Y)")
@@@@
@@@@
@@@@
@@@@
@@@@END_GRAPH                                                                                      _
@@@@
@@@@
@@@@
@@@@

    <<- __also__ ~1>> *
# Fin du Brainfuck

__<i>(p_n_importe_qui_quoi)__       n(’)importe quo?i @@1 <<- ~1>> `


!!
!!
!!!! Confusions                                                                                   !!
!!
!!