Related articles |
---|
Object Oriented Compiler Design Problem mayurnaik@my-dejanews.com (1998-09-05) |
Re: Object Oriented Compiler Design Problem qjackson@wave.home.com (Quinn Tyler Jackson) (1998-09-13) |
Re: Object Oriented Compiler Design Problem qjackson@wave.home.com (Quinn Tyler Jackson) (1998-09-13) |
Re: Object Oriented Compiler Design Problem dwight@pentasoft.com (1998-09-13) |
Object Oriented Compiler Design Problem dboucher@locus.ca (Dominique Boucher) (1998-09-13) |
Re: Object Oriented Compiler Design Problem brueni@ipass.net (Dennis Brueni) (1998-09-13) |
Re: Object Oriented Compiler Design Problem mikee@cetasoft.cog (1998-09-13) |
Re: Object Oriented Compiler Design Problem jucie@uol.com.br (Juciê Dias Andrade) (1998-09-13) |
Re: Object Oriented Compiler Design Problem danwang+news@cs.princeton.edu (Daniel C. Wang) (1998-09-18) |
From: | Dennis Brueni <brueni@ipass.net> |
Newsgroups: | comp.compilers |
Date: | 13 Sep 1998 22:29:00 -0400 |
Organization: | Compilers Central |
References: | 98-09-019 |
Keywords: | OOP, design |
mayurnaik@my-dejanews.com wrote:
>
> Consider the production rules:
>
> #1 term : term '+' primary { ??? }
>
> [...]
>
> In production rule #1, I have to add two symbols. If BOTH are constants, I
> have to compute the result (which will be a pointer to an object of class
> constant) and return it. Else, I have to generate Intermediate Code and
> return a Compiler Generated temporary name (which will be a pointer to an
> object of class variable)
>
> The function symbol* add(symbol*, symbol*) cannot be made a virtual function
> of class symbol, since it is a friend function. But, the moment it is a
> friend function, it does not know whether the symbols to be added are
> Constants or Variables
There are ways to formulate this in a fully OO fashion, tho, you might
want to think through what implications such an approach might have on
your ability to do later code optimizations, etc.
First thing to fix: don't use friend relationships.
Second thing. You need to make the 'ability to be added' a property
of your 'symbol' class. For example, class 'symbol' could have a pure
virtual method for evaluating a symbol, and another for adding it to
another symbol.
// returns 0 if 'this' may be evaluated, nonzero otherwise
virtual int valueOf(int &v) const = 0;
// add 'this' to 's1' and return new symbol
virtual symbol *addTo(const symbol *s1) const = 0;
addTo is more powerful than the 'add' function you were going after,
because it knows the type of 'this' and based on the result of valueOf,
can decide whether the addition involves a constant of variable.
The disadvantage to this approach is that it can grow quite intricate
when you scale it up to the tons of operators present in the C language.
Anyway, hope this helps,
--Dennis B.
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.