Related articles |
---|
RE: Help with IF-ELSEIF-ELSE-ENDIF Coding qjackson@home.com (Quinn Tyler Jackson) (2001-10-16) |
From: | "Quinn Tyler Jackson" <qjackson@home.com> |
Newsgroups: | comp.compilers |
Date: | 16 Oct 2001 00:10:31 -0400 |
Organization: | Compilers Central |
Keywords: | design |
Posted-Date: | 16 Oct 2001 00:10:31 EDT |
> I am enhancing a compiler written be a previous employee. This may
> seem like a naive question but, I figured out the grammer we wanted
> now I am trying to do the code part. All the example I have looked at
> are more complicated then I really want to do. This may be my lack of
> knowledge but I just want to know if someone can give me an C code
> example for the following:
>
> IF '(' cond ')' statements ELSE statements ENDIF { ? },
>
> how do I get to the ELSE statements if the "cond" ends up being false.
[...]
> [The short answer is "with a jump". Straight-through interpretation
> starts to get unpleasant as soon as you have flow of control. It's
> usually easier to compile to an internal form like a parse tree or
> RPN strings and then interpret that. -John]
Assuming you go the parse tree route suggested by John, that
particular reduction would generate a tree node traversal code that
would look something like this (keeping in mind that the following
code is greatly abbreviated):
struct EXPRESSION_NODE
{
//
};
struct STATEMENTS_NODE
{
//
};
struct IF_ELSE_NODE
{
EXPRESSION_NODE* expr;
STATEMENTS_NODE* true_path;
STATEMENTS_NODE* else_path;
};
void interpret_if_else_node(IF_ELSE_NODE* pnode)
{
if(interpret_expression(pnode->expr) != 0)
{
interpret_statement(pnode->true_path);
}
else
{
if(pnode->else_route) // if statements that do not contain an else path
would simply have this set to 0
interpret_statement(pnode->else_path);
}
}
The above example assumes that the translator has already constructed
an EXPRESSION_NODE and two STATEMENT_NODE tree nodes by the time the
IF_THEN_ELSE production is triggered. These nodes would then be
attached to the IF_ELSE_NODE, and this, in turn, would percolate up by
being attached to a statements_node.
--
Quinn Tyler Jackson
Return to the
comp.compilers page.
Search the
comp.compilers archives again.