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