[comp.compilers] Berkeley Yacc

corbett@ernie.Berkeley.EDU (Robert Corbett) (10/04/89)

     I have placed a new version of Berkeley Yacc in ~ftp/pub/byacc.tar.Z
on ucbarpa.  The internet address of ucbarpa is 128.130.32.11.  The new
version fixes all but one of the bugs reported to me so far (at least I hope
it does).

     When reporting bugs, please, if at all possible, include small examples
demonstrating the problem.

     An extra parser skeleton included with the new version.  It is the parser
skeleton for the new and improved version of Berkeley Yacc.  I would
appreciate comments concerning the new parser skeleton.

						Yours truly,
						Bob Corbett
-- 
Send compilers articles to compilers@esegue.segue.boston.ma.us
{spdcc | ima | lotus}!esegue.  Meta-mail to compilers-request@esegue.
Please send responses to the author of the message, not the poster.

corbett@ernie.Berkeley.EDU (Robert Corbett) (11/28/89)

     I have placed a new version of Berkeley Yacc in ~ftp/pub/byacc.tar.Z
on ucbarpa.  The new version is an extensive modification.  There are many
new features.  The major improvement is that it is far more compatible with
AT&T Yacc.  Because of the extent of the changes there are certain to be
many new bugs.  The internet address of ucbarpa is 128.32.130.11.

    For those who do not yet know it, Berkeley Yacc is a public-domain
Yacc-compatible parser generator.

						Yours truly,
						Bob Corbett
-- 
Send compilers articles to compilers@esegue.segue.boston.ma.us
{spdcc | ima | lotus}!esegue.  Meta-mail to compilers-request@esegue.
Please send responses to the author of the message, not the poster.

corbett@ernie.Berkeley.EDU (Robert Corbett) (12/07/89)

     I have fixed several bugs in the new version of Berkeley Yacc.  The
copy of the source in ucbarpa:~ftp/pub/byacc.tar.Z has been updated.  For
those who already have copies of the new version, a copy of the diffs
appears at the end of this note.  Special thanks to Dave Gentzel and
Bill Sommerfeld for pointing out numerous bugs.

						Yours truly,
						Bob Corbett

diff ./closure.c ../zoo1/closure.c
104,105c104,105
< closure(nucleus, n)
< short *nucleus;
---
> closure(core, n)
> short *core;
127,128c127,128
<     csend = nucleus + n;
<     for (csp = nucleus; csp < csend; ++csp)
---
>     csend = core + n;
>     for (csp = core; csp < csend; ++csp)
142c142
<     csp = nucleus;
---
>     csp = core;
diff ./defs.h ../zoo1/defs.h
241d240
< extern bucket *last_symbol;
diff ./error.c ../zoo1/error.c
73c73
<     done(1);
---
>     exit(1);
diff ./main.c ../zoo1/main.c
63,65c63,65
<     if (action_file) { fclose(action_file); unlink(action_file_name); }
<     if (text_file) { fclose(text_file); unlink(text_file_name); }
<     if (union_file) { fclose(union_file); unlink(union_file_name); }
---
>     if (action_file) unlink(action_file_name);
>     if (text_file) unlink(text_file_name);
>     if (union_file) unlink(union_file_name);
196,199c196,205
<     len = strlen(tmpdir);
<     i = len + 13;
<     if (len && tmpdir[len-1] != '/')
< 	++i;
---
>     if (*tmpdir)
>     {
> 	len = 0;
> 	while (tmpdir[len]) ++len;
> 	i = len + 14 + (tmpdir[len - 1] == '/');
>     }
>     else
>     {
> 	i = 14;
>     }
212c218
<     if (len && tmpdir[len - 1] != '/')
---
>     if (*tmpdir && tmpdir[len - 1] != '/')
297a304,305
>     register int c;
> 
diff ./mkpar.c ../zoo1/mkpar.c
286c286
< 	for (p = first; p != last; p = p->next, p->suppressed = 1)
---
> 	for (p = first; p != last; p = p->next, p->suppressed)
diff ./output.c ../zoo1/output.c
25,27d24
<     output_defines();
<     output_stored_text();
<     output_yyconst();
31a29,30
>     output_defines();
>     output_stored_text();
42,49d40
< output_yyconst()
< {
<     outline += 3;
<     fprintf(output_file, "#ifndef YYCONST\n#define YYCONST /* const */\n\
< #endif\n");
< }
< 
< 
56c47
<     fprintf(output_file, "YYCONST short yylhs[] = {%42d,",
---
>     fprintf(output_file, "short yylhs[] = {%42d,",
76c67
<     fprintf(output_file, "YYCONST short yylen[] = {%42d,", 2);
---
>     fprintf(output_file, "short yylen[] = {%42d,", 2);
101c92
<     fprintf(output_file, "YYCONST short yydefred[] = {%39d,",
---
>     fprintf(output_file, "short yydefred[] = {%39d,",
243c234
<     fprintf(output_file, "YYCONST short yydgoto[] = {%40d,", k);
---
>     fprintf(output_file, "short yydgoto[] = {%40d,", k);
519,524c510,512
< 		newmax = maxtable;
< 		do { newmax += 200; } while (newmax <= loc);
< 		table = (short *) realloc(table, newmax*sizeof(short));
< 		if (table == 0) no_space();
< 		check = (short *) realloc(check, newmax*sizeof(short));
< 		if (check == 0) no_space();
---
> 		do { newmax = maxtable + 200; } while (newmax <= loc);
> 		table = (short *) realloc(table, newmax);
> 		check = (short *) realloc(check, newmax);
565c553
<     fprintf(output_file, "YYCONST short yysindex[] = {%39d,", base[0]);
---
>     fprintf(output_file, "short yysindex[] = {%39d,", base[0]);
583,584c571
<     fprintf(output_file, "\n};\nYYCONST short yyrindex[] = {%39d,",
< 	    base[nstates]);
---
>     fprintf(output_file, "\n};\nshort yyrindex[] = {%39d,", base[nstates]);
602,603c589
<     fprintf(output_file, "\n};\nYYCONST short yygindex[] = {%39d,",
< 	    base[2*nstates]);
---
>     fprintf(output_file, "\n};\nshort yygindex[] = {%39d,", base[2*nstates]);
634c620
<     fprintf(output_file, "YYCONST short yytable[] = {%40d,", table[0]);
---
>     fprintf(output_file, "short yytable[] = {%40d,", table[0]);
663c649
<     fprintf(output_file, "YYCONST short yycheck[] = {%40d,", check[0]);
---
>     fprintf(output_file, "short yycheck[] = {%40d,", check[0]);
772c758
<     register int c;
---
>     register int c, last;
782,786d767
<     if (!lflag)
<     {
< 	++outline;
< 	fprintf(output_file, line_format, outline, output_file_name);
<     }
794a776,780
>     if (!lflag)
>     {
> 	++outline;
> 	fprintf(output_file, line_format, outline, output_file_name);
>     }
817c803
<     fprintf(output_file, "#if YYDEBUG\nYYCONST char *yyname[] = {");
---
>     fprintf(output_file, "#if YYDEBUG\nchar *yyname[] = {");
950c936
<     fprintf(output_file, "YYCONST char *yyrule[] = {\n");
---
>     fprintf(output_file, "char *yyrule[] = {\n");
diff ./reader.c ../zoo1/reader.c
1114,1115d1113
<     last_symbol->next = bp;
<     last_symbol = bp;
1403d1400
<     {
1405,1406d1401
< 	/*NOTREACHED*/
<     }
diff ./verbose.c ../zoo1/verbose.c
112c112
< (accept, reduce %d) on $end\n", state, r->number - 2);
---
> (accept, reduce %d) on $end\n", state, r->number);
126c126
< (shift %d, reduce %d) on %s\n", state, p->number, r->number - 2,
---
> (shift %d, reduce %d) on %s\n", state, p->number, r->number,
138c138
< (reduce %d, reduce %d) on %s\n", state, p->number - 2, r->number - 2,
---
> (reduce %d, reduce %d) on %s\n", state, p->number, r->number,
194,195c194
< 	if (p->action_code == REDUCE &&
< 		(p->suppressed == 0 || p->suppressed == 1))
---
> 	if (p->action_code == REDUCE && p->suppressed == 0)
200c199
< 		for (j = 0; j < nnulls && i > null_rules[j]; ++j)
---
> 		for (j = 0; j < nnulls && i < null_rules[j]; ++j)
202d200
< 
330c328
<     for (i = 0; i < sp->nshifts; ++i)
---
>     for (i = sp->nshifts - 1; i >= 0; i--)
335a334,335
> 	else
> 	    break;
-- 
Send compilers articles to compilers@esegue.segue.boston.ma.us
{spdcc | ima | lotus}!esegue.  Meta-mail to compilers-request@esegue.
Please send responses to the author of the message, not the poster.

corbett@ernie.Berkeley.EDU (Robert Corbett) (07/16/90)

I have placed a new version of Berkeley Yacc in ~ftp/pub/byacc.tar.Z on
ucbarpa (IP address 128.32.130.11).  I added a new option, -r, that
causes Berkeley Yacc to put the read-only tables and the rest of the
generated code in separate files.  The option is intended to eliminate
the need for :yyfix.

					Yours truly,
					Bob Corbett
-- 
Send compilers articles to compilers@esegue.segue.boston.ma.us
{spdcc | ima | lotus| world}!esegue.  Meta-mail to compilers-request@esegue.