X-Git-Url: https://ocean-lang.org/code/?p=ocean;a=blobdiff_plain;f=csrc%2Fparsergen.mdc;h=76fec3a70a779cefe4589a9d79e861a61acd726e;hp=2546d7632722a0673d4c78c83f6d924310390379;hb=ca00beb39b9d02578c1f0b556a2c2f70f28cf6e7;hpb=207232b9494973cf24d0b832c6743c01bf7da421 diff --git a/csrc/parsergen.mdc b/csrc/parsergen.mdc index 2546d76..76fec3a 100644 --- a/csrc/parsergen.mdc +++ b/csrc/parsergen.mdc @@ -499,6 +499,8 @@ Now we have all the bits we need to parse a full production. vs = sym_find(g, tk.txt); if (vs->num == TK_newline) p.line_like = 1; + else if (vs->num == TK_out) + p.line_like = 2; else if (vs->precedence == 0) { err = "symbol after $$ must have precedence"; goto abort; @@ -1348,7 +1350,8 @@ into the go to set, so the item is ineffective. } sn = save_set(g, LA); LA = set_find(g, sn); - symset_add(&LAnl, TK_newline, 0); + if (symset_find(&LA, TK_newline)) + symset_add(&LAnl, TK_newline, 0); snnl = save_set(g, LAnl); LAnl = set_find(g, snnl); } @@ -1650,8 +1653,10 @@ it up a bit. First the items, with production number and associativity. printf(" [%d%s]", s->precedence, assoc_names[s->assoc]); } - if (pr->line_like) + if (pr->line_like == 1) printf(" $$NEWLINE"); + else if (pr->line_like) + printf(" $$OUT"); printf("\n"); }