Hello, In yacc the function print_grammar() writes the file y.output if the -v option is used. fprintf() can be used directly for writing "spacing" space characters of indentation so a loop can be removed.
- Michael Index: reader.c =================================================================== RCS file: /cvs/src/usr.bin/yacc/reader.c,v retrieving revision 1.34 diff -u -p -u -r1.34 reader.c --- reader.c 25 May 2017 20:11:03 -0000 1.34 +++ reader.c 3 Jan 2018 12:40:54 -0000 @@ -1806,7 +1806,7 @@ pack_grammar(void) void print_grammar(void) { - int i, j, k; + int i, k; int spacing = 0; FILE *f = verbose_file; @@ -1822,9 +1822,8 @@ print_grammar(void) spacing = strlen(symbol_name[rlhs[i]]) + 1; } else { fprintf(f, "%4d ", i - 2); - j = spacing; - while (--j >= 0) - putc(' ', f); + if (spacing > 0) + fprintf(f, "%*s", spacing, ""); putc('|', f); }