1
2%{
3#include "dyna.h"
4
5
6
7#define EDITMATCH(string1c,string2c,match,mismatch) (string1c == string2c ? match : mismatch)
8
9%}
10
11
12struct EditString
13char * string
14int len
15
16
17matrix EditDistance
18query    name="q" type="EditString*"
19target   name="t" type="EditString*"
20resource name="match" type="int"
21resource name="mismatch"    type="int"
22resource name="gap"      type="int"
23state MATCH
24   source MATCH offi="1" offj="1"
25     calc="EDITMATCH(q->string[i],t->string[j],match,mismatch)"
26     query_label  SEQUENCE
27     target_label SEQUENCE
28     endsource
29   source MATCH offi="0" offj="1"
30     calc="gap"
31     query_label  INSERT
32     target_label SEQUENCE
33     endsource
34   source MATCH offi="1" offj="0"
35     calc="gap"
36     query_label  SEQUENCE
37     target_label INSERT
38     endsource
39   source START offi="1" offj="1" !top !left
40     calc="EDITMATCH(q->string[i],t->string[j],match,mismatch)"
41     query_label  SEQUENCE
42     target_label SEQUENCE
43     endsource
44   source START offi="0" offj="1" !top !left
45     calc="gap"
46     query_label  INSERT
47     target_label SEQUENCE
48     endsource
49   source START offi="1" offj="0" !top !left
50     calc="gap"
51     query_label  SEQUENCE
52     target_label INSERT
53     endsource
54endstate
55state START !special !start
56endstate
57state END !special !end
58   source MATCH offj="0" !bottom !right
59     calc="0"
60     endsource
61   query_label END
62   target_label END
63endstate
64endmatrix
65
66%{
67#include "editdistdp.h"
68
69
70
71EditString * new_EditString(char * string)
72{
73   EditString * out;
74
75   out = EditString_alloc();
76   out->string = stringalloc(string);
77   out->len = strlen(string);
78
79   return out;
80}
81