-- | Full-blown affine-scoring tree alignment grammar with all cases. -- -- We currently do not produce the outside algorithm, since the -- @AffineSmall2@ variant seems more useful in practice. However, if you -- want just send a mail. module DP.Tree.Align.Global.Affine2 where import ADP.Fusion.Core import FormalLanguage.CFG [formalLanguage| Verbose Grammar: Global N: T -- tree N: F -- forest N: Z -- tree for gaps N: Y -- tree for affine gaps N: P -- parent gap mode N: G -- sibling gap together with P T: n S: [F,F] [F,F] -> iter <<< [T,T] [F,F] [F,F] -> iter <<< [T,Z] [F,G] [F,F] -> iter <<< [Z,T] [G,F] [F,F] -> done <<< [e,e] [P,F] -> pfalign <<< [T,T] [P,F] [P,F] -> pfdelin <<< [T,Z] [P,G] [P,F] -> pfindel <<< [Y,T] [P,F] [P,F] -> done <<< [e,e] [F,P] -> done <<< [e,e] [F,P] -> fpalign <<< [T,T] [F,P] [F,P] -> fpdelin <<< [T,Y] [F,P] [F,P] -> fpindel <<< [Z,T] [G,P] [G,F] -> gfalign <<< [T,T] [G,F] [G,F] -> gfdelin <<< [T,Z] [P,G] [G,F] -> gfindel <<< [Y,T] [G,F] [G,F] -> done <<< [e,e] [F,G] -> done <<< [e,e] [F,G] -> fgalign <<< [T,T] [F,F] [F,G] -> fgdelin <<< [T,Y] [F,G] [F,G] -> fgindel <<< [Z,T] [G,P] [G,P] -> gpalign <<< [T,T] [F,P] [G,P] -> gpdelin <<< [T,Y] [F,P] [G,P] -> gpindel <<< [Y,T] [G,P] [P,G] -> pgalign <<< [T,T] [P,F] [P,G] -> pgdelin <<< [T,Y] [P,G] [P,G] -> pgindel <<< [Y,T] [P,F] [T,T] -> align <<< [n,n] [F,F] [Z,T] -> indel <<< [-,n] [P,F] [T,Z] -> delin <<< [n,-] [F,P] [Y,T] -> afindel <<< [-,n] [P,F] [T,Y] -> afdelin <<< [n,-] [F,P] // Emit: Global |] makeAlgebraProduct ''SigGlobal