Yacc shift/reduce conflicts

Martyn Weiss <anumber@compuserve.com>
19 Dec 2004 23:53:14 -0500

          From comp.compilers

Related articles
Yacc shift/reduce conflicts anumber@compuserve.com (Martyn Weiss) (2004-12-19)
Re: Yacc shift/reduce conflicts snicol@apk.net (Scott Nicol) (2004-12-22)
Re: Yacc shift/reduce conflicts casse@irit.fr (=?ISO-8859-1?Q?Hugues_Cass=E9?=) (2004-12-22)
Re: Yacc shift/reduce conflicts dawidpawlata@wp.pl (Dawid Pawlata) (2004-12-22)
| List of all articles for this month |

From: Martyn Weiss <anumber@compuserve.com>
Newsgroups: comp.compilers
Date: 19 Dec 2004 23:53:14 -0500
Organization: CompuServe Interactive Services
Keywords: yacc, question
Posted-Date: 19 Dec 2004 23:53:14 EST

Hi.


I'm updating a language grammar I wrote a while ago using MKS Yacc,
which consists of one or more statements separated by semicolons, i.e.
S1;S2;...SN
.


One of the things I want to do is to allow for superfluous embedded
and trailing semicolons, as in S1;;S2;


I had a bit if trouble expressing this in rules without getting
shift/reduce conflicts. I found that if I simplify the grammar down
to the following:


program:
    statements
;
statements:
    statement
| statements semicolon
| statements semicolon statement
;
statement:
    someterminal
;


yacc reports no conflicts, but it looks a bit clumsy to me. However,
if I replace "someterminal" by "expression", which has a number of
alternative definitions (simpleexpression, term, factor, etc) I
immediately get a whole raft of shift/reduce conflicts, which leads me
to think the simplified version above isn't the best way to express
the "superfluous semicolons" point mentioned above.


Can anyone suggest a better formulation of "statements" or explain how
I go about getting rid of the s/r conflicts in the fuller version.


Cheers & TIA, Martyn (you can probably guess that this isn't my usual
subject, but it isn't homework, either)


Post a followup to this message

Return to the comp.compilers page.
Search the comp.compilers archives again.