Related articles |
---|
Source to source compiling casper@snakemail.hut.fi (Casper Gripenberg) (1994-09-11) |
Re: Source to source compiling eanders+@CMU.EDU (Eric A. Anderson) (1994-09-12) |
Re: Source to source compiling norman@flaubert.bellcore.com (1994-09-14) |
Re: Source to source compiling mabp@bga.com (1994-09-13) |
Re: Source to source compiling f1rederc@iia.org (1994-09-13) |
Re: source to source compiling ghiya@vani.cs.mcgill.ca (1994-09-18) |
Re: Source to source compiling bernecky@eecg.toronto.edu (Robert Bernecky) (1994-09-18) |
Re: Source to source compiling toconnor@vcd.hp.com (1994-09-18) |
[4 later articles] |
Newsgroups: | comp.compilers |
From: | "Eric A. Anderson" <eanders+@CMU.EDU> |
Keywords: | translator |
Organization: | Carnegie Mellon, Pittsburgh, PA |
References: | 94-09-031 |
Date: | Mon, 12 Sep 1994 19:46:24 GMT |
Casper Gripenberg <casper@snakemail.hut.fi> writes:
> Example:
>
> STATE1:
> Do something;
> if (a) goto STATE3;
> if (b) goto STATE2;
> etc...
>
> STATE2:
> ....
>
> STATE3:
> ....
One way I've seen for doing this is with a "current-state" variable;
e.g. your example becomes (in C):
#define STATE1 1
#define STATE2 2
#define STATE3 3
#define DEADSTATE 0
{
int curstate = INITIAL_STATE;
while(curstate != FINAL_STATE) {
switch(curstate) {
case STATE1: Do something;
if (a) { curstate = STATE3; }
else if (b) { curstate = STATE2; }
...
else { curstate = DEADSTATE; }
break;
...
case DEADSTATE:
printf("Bad state diagram, bad, bad!!\n");abort();
default:
printf("Bad compiler, bad, bad!!\n");abort();
}
}
--
The switch can be obviously translated into an if-then series.
-Eric
--
Return to the
comp.compilers page.
Search the
comp.compilers archives again.