removed h_repeat_n to enable desugaring

This commit is contained in:
Mikael Vejdemo-Johansson 2015-04-08 14:06:58 +02:00
parent 5100dc69da
commit 1e95eac6cd

View file

@ -160,7 +160,7 @@ HParser* finkmao() {
h_bind_indirect(Lnext, L_); h_bind_indirect(Lnext, L_);
h_bind_indirect(Rnext, R_); h_bind_indirect(Rnext, R_);
h_bind_indirect(Cnext, C_); h_bind_indirect(Cnext, C_);
HParser *tie = h_choice(h_sequence(L, Lnext, NULL), NULL); HParser *tie = h_sequence(L, Lnext, NULL);
return tie; return tie;
} }
@ -168,8 +168,12 @@ HParser* finkmaoTW() {
HParser *T = h_ch('T'); HParser *T = h_ch('T');
HParser *W = h_ch('W'); HParser *W = h_ch('W');
HParser *U = h_ch('U'); HParser *U = h_ch('U');
HParser *prefix = h_choice(T, W, h_epsilon_p(), NULL); HParser *prefix = h_choice(T, W, h_epsilon_p(),
HParser *pair = h_repeat_n(h_choice(T, W, NULL), 2); 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), HParser *tuck = h_choice(h_sequence(T, T, U, NULL),
h_sequence(W, W, U, NULL), h_sequence(W, W, U, NULL),
NULL); NULL);
@ -178,7 +182,7 @@ HParser* finkmaoTW() {
h_epsilon_p(), h_epsilon_p(),
NULL); NULL);
h_bind_indirect(pairstar, pstar_); h_bind_indirect(pairstar, pstar_);
return h_choice(h_sequence(prefix, pairstar, tuck, NULL), NULL); return h_sequence(prefix, pairstar, tuck, NULL);
} }
HParser* depth1TW() { HParser* depth1TW() {
@ -186,7 +190,10 @@ HParser* depth1TW() {
HParser *W = h_ch('W'); HParser *W = h_ch('W');
HParser *U = h_ch('U'); HParser *U = h_ch('U');
HParser *prefix = h_choice(T, W, h_epsilon_p(), NULL); 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), HParser *tuck = h_choice(h_sequence(T, T, U, NULL),
h_sequence(W, W, U, NULL), h_sequence(W, W, U, NULL),
NULL); NULL);
@ -248,7 +255,10 @@ HParser* depthNTW() {
HParser *W = h_ch('W'); HParser *W = h_ch('W');
HParser *U = h_ch('U'); HParser *U = h_ch('U');
HParser *prefix = h_choice(T, W, h_epsilon_p(), NULL); 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 *tstart = h_indirect();
HParser *tw0 = h_indirect(); HParser *tw0 = h_indirect();
HParser *tw1 = h_indirect(); HParser *tw1 = h_indirect();
@ -335,8 +345,8 @@ int main(int argc, char **argv)
{ {
HAllocator *mm__ = &system_allocator; HAllocator *mm__ = &system_allocator;
HParser *p = finkmaoTW();
HCFGrammar *g = h_cfgrammar_(mm__, h_desugar_augmented(mm__, finkmaoTW())); HCFGrammar *g = h_cfgrammar_(mm__, h_desugar_augmented(mm__, p));
if (g == NULL) { if (g == NULL) {
fprintf(stderr, "h_cfgrammar failed\n"); fprintf(stderr, "h_cfgrammar failed\n");
return 1; return 1;