algorithm - Some kind of grammar parsing but without brute force -
i have list of "transformations"/"grammar" whatever can call of form:
l -> l|ll|n
this means l(letter) can transformed in either 1 letter or 2 letters or in 1 n(number)
i'm given list of transformations , sequence of numbers , initial move performed , have generate minimum list of moves generate sequence of numbers given.
for example: have transformations a->bc b->d b->ed c->f c->fb d->2 d->3 e->0 e->1 f->4 sequence: 2 4 0 3 initial move performed: minimum list be: 1.(a, bc) [bc](initial move) 2.(b, d) [dc] 3.(d, 2) [2c] 4.(c, fb) [2fb] 5.(f, 4) [24b] 6.(b, ed) [24ed] 7.(e, 0) [240d] 8.(d, 3) [2403]
there no loops example a->ab or a->b , b->a etc brute force not option since input of transformation big ~1000 , sequence generate ~30.
after extensive search on internet found cyk algorithm after aplying on example results sequence 2403 not in grammar(which wrong).
i don't see how should proceed trying days solve this. welcome. thank you.
before can apply cyk, grammar must in chomsky normal form, means need eliminate unit rules.
in other words, rule b->d
must converted 2 rules: b->2
, b->3
. likewise, rule c->f
must converted c->4
.
once you've made adjustments grammar, in chomsky normal form, cyk work. of course, when displaying parser results, time invoke 1 of converted rules, you'll need generate 2 lines of output. example, invocation of b->2
should displayed b->d
followed d->2
.
Comments
Post a Comment