From 1e95eac6cdb8a8ae0f3a3a1608e7f919f6951442 Mon Sep 17 00:00:00 2001 From: Mikael Vejdemo-Johansson <michiexile@gmail.com> Date: Wed, 8 Apr 2015 14:06:58 +0200 Subject: [PATCH] removed h_repeat_n to enable desugaring --- examples/ties.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/examples/ties.c b/examples/ties.c index 45b49f77..e4ca2117 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; -- GitLab