Related articles |
---|
Yacc and a calculator weinlade@fugue.stanford.edu (Dan Weinlader) (1996-02-13) |
Re: Yacc and a calculator nr@cs.purdue.edu (1996-02-14) |
Re: Yacc and a calculator foggia@amalfi.dis.unina.it (1996-02-16) |
From: | nr@cs.purdue.edu (Norman Ramsey) |
Newsgroups: | comp.compilers |
Date: | 14 Feb 1996 21:21:36 -0500 |
Organization: | Department of Computer Science, Purdue University |
References: | 96-02-143 |
Keywords: | yacc, parse |
Dan Weinlader <weinlade@fugue.stanford.edu> wrote:
>Suppose I wish to allow
>the user to enter 8 5 and have it parsed as 8*5, how do I do that?
>
>I have tried:
>
>expression: ...
> | ...
> | expression expression { ... }
>
>but that produces shift/reduce conflicts. The problem is not precedence,
>but associativity, right? So how do I tell Yacc (Bison to be exact) what
>the assocativity is for this expression?
I like what the SML/NJ people did: simply treat an expression as a
sequence of identifiers and resolve ambiguity at the semantic level
using a simple operator-precedence algorithm. Something of the sort
is more or less necessary because ML supports dynamic changes in
`fixity', precedence and associativity. Anyway, in your
operator-precedence algorithm, if you see non-operator in the input
and a non-operator on the stack you simply insert a * operator and
continue.
--
Norman Ramsey
http://www.cs.purdue.edu/homes/nr
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.