Blob Blame History Raw
# morphological combination rules for words that consist of alternating blocks
# of "a"s and "b"s, each block at least as long as the previous one.

initial <>, rules build;

combi_rule build( $state, $link ):
  require $link in <A, B>;
  require $state.1L in <nil, $link>;
  result $state + <$link>, rules build, delete;
  result $state + <$link>, accept;
end;

combi_rule delete( $state, $link ):
  require $link in <A, B>;
  require not $state.1L in <nil, $link>;
  if $state.2L in <nil, $link> then
    result $state - 1L + <$link>, rules build, delete;
    result $state - 1L + <$link>, accept;
  else
    result $state - 1L + <$link>, rules delete;
  end;
end;

# end of file =================================================================