Related articles |
---|
Constant expression evaluation? mdhe51ATdialDOTpipexDOTcom@eu.uu.net (Paul Davis) (2003-05-14) |
Re: Constant expression evaluation? christian.bau@cbau.freeserve.co.uk (Christian Bau) (2003-05-16) |
Re: Constant expression evaluation? chaos@vcc.de (Dierk Ohlerich) (2003-05-16) |
Re: Constant expression evaluation? clint@0lsen.net (Clint Olsen) (2003-05-18) |
Re: Constant expression evaluation? norlic@fly.srk.fer.hr (Niksa Orlic) (2003-05-29) |
Re: Constant expression evaluation? camille@bluegrass.net (david lindauer) (2003-05-29) |
From: | Clint Olsen <clint@0lsen.net> |
Newsgroups: | comp.compilers |
Date: | 18 May 2003 01:27:13 -0400 |
Organization: | AT&T Broadband |
References: | 03-05-089 |
Keywords: | optimize, practice |
Posted-Date: | 18 May 2003 01:27:13 EDT |
Paul Davis wrote:
> 1) Add a second expression syntax section in the Bison description for
> constant expressions, which get evaluated during compilation. This sounds
> really kludgey, and I suspect would lead to lots of conflicts.
This is the correct way to do it except you use the same "expression"
rule as before but annotate your parse tree with a constant flag in it
- you make it a semantic check. Otherwise like you said you get
parser conflicts between "constant_expression" and "expression". You
just percolate the constant flag upwards as you continue to parse
expressions.
If both children are constants, so is the parent, and so on. This
kind of inheritance from the children works for many attributes in
fact. And if you then want to evaluate this expression, you can do it
at the rule that expects a constant expression:
constant_expression : expression
{
if ($1->constant) {
evaluate($1);
}
else
error("constant expression expected\n");
}
Something that smells like that should work anyway.
-Clint
Return to the
comp.compilers page.
Search the
comp.compilers archives again.