Related articles |
---|
Object Oriented Compiler Construction drh@world.std.com (1994-01-04) |
Re: Object Oriented Compiler Construction litsios@iis.ee.ethz.ch (1994-01-05) |
Re: Object Oriented Compiler Construction knapp@cs.purdue.edu (1994-01-05) |
Re: Object Oriented Compiler Construction chase@Think.COM (1994-01-05) |
Re: Object Oriented Compiler Construction preston@dawn.cs.rice.edu (1994-01-06) |
Object Oriented Compiler Construction clark@zk3.dec.com (Chris Clark USG) (1994-01-06) |
Newsgroups: | comp.compilers |
From: | litsios@iis.ee.ethz.ch (James Litsios) |
Keywords: | OOP, design |
Organization: | Compilers Central |
References: | 94-01-010 |
Date: | Wed, 5 Jan 1994 09:54:55 GMT |
|> It occurs to me that inheritance should be especially useful in the
|> construction of a parse tree. ...
|> A better way to do this, it seems to me, is to define an abstract class
|> for parse tree nodes, and then subclass specific node types from the
|> abstract base class. I envision member functions like SanityCheck(),
|> Optimize(), and GenerateCode() which take very different (though
|> conceptually identical) actions for each node subclass.
I have a feeling this only works well for simple compilers. On my current
project I am writing a compiler that does so many transformation of the
original parse tree that the idea of storing each different type of node
in a different class (the work is in C++) is simply not practical.
Instead I use the OO properties of C++ to manipulate generic LISP like
data structures with smart pointers to manage the garbage collection. I
can then have pattern matching rules to do the optimization and code
generation. Granted this philosophy might make the compiler slow but this
is acceptable for our purposes.
|> It also seems to me that something other than yacc and lex should be used
|> for the parser. This venerable old tools have served us well, but their
|> design is beginning to show its age. Upgrades like yacc++ and lex++ don't
|> seem to help much since it is the basic design of the tools, not their
|> implementations, which seems to be at fault.
I don't think so, as discussed in the comp.lang.c++ group, yacc can be
used without much problem to directly build C++ parse trees that use smart
pointers or other special features.
--
James Litsios Phone: +41 1/632 60 92
Integrated Systems Laboratory Fax: +41 1/252 09 94
ETH Zurich E-Mail:litsios@iis.ee.ethz.ch
CH-8092 Zurich, Switzerland
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.