diff --git a/examples/ties.c b/examples/ties.c index 45b49f773e93421fa346d6383096babfbbd99644..e4ca2117da1bf0ae4597257dac7b64daceeae8f0 100644 --- a/examples/ties.c +++ b/examples/ties.c @@ -160,7 +160,7 @@ HParser* finkmao() { h_bind_indirect(Lnext, L_); h_bind_indirect(Rnext, R_); h_bind_indirect(Cnext, C_); - HParser *tie = h_choice(h_sequence(L, Lnext, NULL), NULL); + HParser *tie = h_sequence(L, Lnext, NULL); return tie; } @@ -168,17 +168,21 @@ HParser* finkmaoTW() { HParser *T = h_ch('T'); HParser *W = h_ch('W'); HParser *U = h_ch('U'); - HParser *prefix = h_choice(T, W, h_epsilon_p(), NULL); - HParser *pair = h_repeat_n(h_choice(T, W, NULL), 2); + HParser *prefix = h_choice(T, W, h_epsilon_p(), + NULL); + HParser *pair = h_choice(h_sequence(T, T, NULL), + h_sequence(W, T, NULL), + h_sequence(T, W, NULL), + h_sequence(W, W, NULL), NULL); HParser *tuck = h_choice(h_sequence(T, T, U, NULL), h_sequence(W, W, U, NULL), NULL); HParser *pairstar = h_indirect(); HParser *pstar_ = h_choice(h_sequence(pair, pairstar, NULL), - h_epsilon_p(), + h_epsilon_p(), NULL); h_bind_indirect(pairstar, pstar_); - return h_choice(h_sequence(prefix, pairstar, tuck, NULL), NULL); + return h_sequence(prefix, pairstar, tuck, NULL); } HParser* depth1TW() { @@ -186,7 +190,10 @@ HParser* depth1TW() { HParser *W = h_ch('W'); HParser *U = h_ch('U'); HParser *prefix = h_choice(T, W, h_epsilon_p(), NULL); - HParser *pair = h_repeat_n(h_choice(T, W, NULL), 2); + HParser *pair = h_choice(h_sequence(T, T, NULL), + h_sequence(W, T, NULL), + h_sequence(T, W, NULL), + h_sequence(W, W, NULL), NULL); HParser *tuck = h_choice(h_sequence(T, T, U, NULL), h_sequence(W, W, U, NULL), NULL); @@ -248,7 +255,10 @@ HParser* depthNTW() { HParser *W = h_ch('W'); HParser *U = h_ch('U'); HParser *prefix = h_choice(T, W, h_epsilon_p(), NULL); - HParser *pair = h_repeat_n(h_choice(T, W, NULL), 2); + HParser *pair = h_choice(h_sequence(T, T, NULL), + h_sequence(W, T, NULL), + h_sequence(T, W, NULL), + h_sequence(W, W, NULL), NULL); HParser *tstart = h_indirect(); HParser *tw0 = h_indirect(); HParser *tw1 = h_indirect(); @@ -335,8 +345,8 @@ int main(int argc, char **argv) { HAllocator *mm__ = &system_allocator; - - HCFGrammar *g = h_cfgrammar_(mm__, h_desugar_augmented(mm__, finkmaoTW())); + HParser *p = finkmaoTW(); + HCFGrammar *g = h_cfgrammar_(mm__, h_desugar_augmented(mm__, p)); if (g == NULL) { fprintf(stderr, "h_cfgrammar failed\n"); return 1;