@@ -425,6 +425,163 @@ public void MultipleSegmentRules()
425425 AssertMorphsEqual ( morpher . ParseWord ( "buuubuuu" ) , "27" ) ;
426426 }
427427
428+ [ Test ]
429+ public void MultipleDeletionRules ( )
430+ {
431+ var highVowel = FeatureStruct
432+ . New ( Language . PhonologicalFeatureSystem )
433+ . Symbol ( HCFeatureSystem . Segment )
434+ . Symbol ( "cons-" )
435+ . Symbol ( "voc+" )
436+ . Symbol ( "high+" )
437+ . Value ;
438+ var backRnd = FeatureStruct
439+ . New ( Language . PhonologicalFeatureSystem )
440+ . Symbol ( HCFeatureSystem . Segment )
441+ . Symbol ( "back+" )
442+ . Symbol ( "round+" )
443+ . Value ;
444+ var backRndVowel = FeatureStruct
445+ . New ( Language . PhonologicalFeatureSystem )
446+ . Symbol ( HCFeatureSystem . Segment )
447+ . Symbol ( "cons-" )
448+ . Symbol ( "voc+" )
449+ . Symbol ( "back+" )
450+ . Symbol ( "round+" )
451+ . Value ;
452+ var t = FeatureStruct
453+ . New ( Language . PhonologicalFeatureSystem )
454+ . Symbol ( HCFeatureSystem . Segment )
455+ . Symbol ( "cons+" )
456+ . Symbol ( "alveolar" )
457+ . Symbol ( "del_rel-" )
458+ . Symbol ( "asp-" )
459+ . Symbol ( "vd-" )
460+ . Symbol ( "strident-" )
461+ . Value ;
462+
463+ var rule1 = new RewriteRule
464+ {
465+ Name = "rule1" ,
466+ Lhs = Pattern < Word , ShapeNode > . New ( ) . Annotation ( highVowel ) . Annotation ( highVowel ) . Value
467+ } ;
468+ Allophonic . PhonologicalRules . Add ( rule1 ) ;
469+ rule1 . Subrules . Add (
470+ new RewriteSubrule
471+ {
472+ LeftEnvironment = Pattern < Word , ShapeNode > . New ( ) . Annotation ( backRndVowel ) . Value
473+ }
474+ ) ;
475+
476+ var morpher = new Morpher ( TraceManager , Language ) ;
477+ AssertMorphsEqual ( morpher . ParseWord ( "bubu" ) , "27" , "19" ) ;
478+ }
479+
480+ [ Test ]
481+ public void MergeRules ( )
482+ {
483+ var highVowel = FeatureStruct
484+ . New ( Language . PhonologicalFeatureSystem )
485+ . Symbol ( HCFeatureSystem . Segment )
486+ . Symbol ( "cons-" )
487+ . Symbol ( "voc+" )
488+ . Symbol ( "high+" )
489+ . Value ;
490+ var backRnd = FeatureStruct
491+ . New ( Language . PhonologicalFeatureSystem )
492+ . Symbol ( HCFeatureSystem . Segment )
493+ . Symbol ( "back+" )
494+ . Symbol ( "round+" )
495+ . Value ;
496+ var backRndVowel = FeatureStruct
497+ . New ( Language . PhonologicalFeatureSystem )
498+ . Symbol ( HCFeatureSystem . Segment )
499+ . Symbol ( "cons-" )
500+ . Symbol ( "voc+" )
501+ . Symbol ( "back+" )
502+ . Symbol ( "round+" )
503+ . Value ;
504+ var t = FeatureStruct
505+ . New ( Language . PhonologicalFeatureSystem )
506+ . Symbol ( HCFeatureSystem . Segment )
507+ . Symbol ( "cons+" )
508+ . Symbol ( "alveolar" )
509+ . Symbol ( "del_rel-" )
510+ . Symbol ( "asp-" )
511+ . Symbol ( "vd-" )
512+ . Symbol ( "strident-" )
513+ . Value ;
514+
515+ var rule1 = new RewriteRule
516+ {
517+ Name = "rule1" ,
518+ Lhs = Pattern < Word , ShapeNode > . New ( ) . Annotation ( highVowel ) . Annotation ( highVowel ) . Value
519+ } ;
520+ Allophonic . PhonologicalRules . Add ( rule1 ) ;
521+ rule1 . Subrules . Add (
522+ new RewriteSubrule
523+ {
524+ Rhs = Pattern < Word , ShapeNode > . New ( ) . Annotation ( t ) . Value ,
525+ LeftEnvironment = Pattern < Word , ShapeNode > . New ( ) . Annotation ( backRndVowel ) . Value
526+ }
527+ ) ;
528+
529+ var morpher = new Morpher ( TraceManager , Language ) ;
530+ AssertMorphsEqual ( morpher . ParseWord ( "butbut" ) , "27" ) ;
531+ }
532+
533+ [ Test ]
534+ public void MultipleMergeRules ( )
535+ {
536+ var highVowel = FeatureStruct
537+ . New ( Language . PhonologicalFeatureSystem )
538+ . Symbol ( HCFeatureSystem . Segment )
539+ . Symbol ( "cons-" )
540+ . Symbol ( "voc+" )
541+ . Symbol ( "high+" )
542+ . Value ;
543+ var backRnd = FeatureStruct
544+ . New ( Language . PhonologicalFeatureSystem )
545+ . Symbol ( HCFeatureSystem . Segment )
546+ . Symbol ( "back+" )
547+ . Symbol ( "round+" )
548+ . Value ;
549+ var backRndVowel = FeatureStruct
550+ . New ( Language . PhonologicalFeatureSystem )
551+ . Symbol ( HCFeatureSystem . Segment )
552+ . Symbol ( "cons-" )
553+ . Symbol ( "voc+" )
554+ . Symbol ( "back+" )
555+ . Symbol ( "round+" )
556+ . Value ;
557+ var t = FeatureStruct
558+ . New ( Language . PhonologicalFeatureSystem )
559+ . Symbol ( HCFeatureSystem . Segment )
560+ . Symbol ( "cons+" )
561+ . Symbol ( "alveolar" )
562+ . Symbol ( "del_rel-" )
563+ . Symbol ( "asp-" )
564+ . Symbol ( "vd-" )
565+ . Symbol ( "strident-" )
566+ . Value ;
567+
568+ var rule1 = new RewriteRule
569+ {
570+ Name = "rule1" ,
571+ Lhs = Pattern < Word , ShapeNode > . New ( ) . Annotation ( backRndVowel ) . Annotation ( highVowel ) . Annotation ( highVowel ) . Value
572+ } ;
573+ Allophonic . PhonologicalRules . Add ( rule1 ) ;
574+ rule1 . Subrules . Add (
575+ new RewriteSubrule
576+ {
577+ Rhs = Pattern < Word , ShapeNode > . New ( ) . Annotation ( t ) . Annotation ( t ) . Value ,
578+ }
579+ ) ;
580+
581+ var morpher = new Morpher ( TraceManager , Language ) ;
582+ AssertMorphsEqual ( morpher . ParseWord ( "bttbtt" ) , "27" ) ;
583+ }
584+
428585 [ Test ]
429586 public void BoundaryRules ( )
430587 {
0 commit comments