Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.compilers > #927

Re: interpreter: how is it possible to interpret nested IF ELSE ENDIF ????

Path csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!border3.nntp.dca.giganews.com!border1.nntp.dca.giganews.com!border4.nntp.dca.giganews.com!border2.nntp.dca.giganews.com!nntp.giganews.com!news.iecc.com!.POSTED!nerds-end
From mertesthomas@gmail.com
Newsgroups comp.compilers
Subject Re: interpreter: how is it possible to interpret nested IF ELSE ENDIF ????
Date Wed, 19 Jun 2013 03:43:58 -0700 (PDT)
Organization Compilers Central
Lines 71
Sender johnl@iecc.com
Approved comp.compilers@iecc.com
Message-ID <13-06-017@comp.compilers> (permalink)
References <13-05-009@comp.compilers>
NNTP-Posting-Host news.iecc.com
Mime-Version 1.0
Content-Type text/plain; charset=ISO-8859-1
X-Trace leila.iecc.com 1371777328 39459 64.57.183.58 (21 Jun 2013 01:15:28 GMT)
X-Complaints-To abuse@iecc.com
NNTP-Posting-Date Fri, 21 Jun 2013 01:15:28 +0000 (UTC)
Keywords interpreter, design, comment
Posted-Date 20 Jun 2013 21:15:28 EDT
X-submission-address compilers@iecc.com
X-moderator-address compilers-request@iecc.com
X-FAQ-and-archives http://compilers.iecc.com
Xref csiph.com comp.compilers:927

Show key headers only | View raw


Am Mittwoch, 15. Mai 2013 07:42:19 UTC+2 schrieb Jens Kallup:
> Hello,
> like the topic says:
> a give construct should be interpret through a single pass???:
>
> IF 2 == 3
>    print "not print"
>    IF 2 == 3
>      print "not"
>    ELSE
>      print "wrong1"
>    ENDIF
>    print "3"
> ELSE
>    print "this"
> ENDIF

In my BASIC interpreter and in my make utility I use source code
interpretation (when I started to write the BASIC interpreter I
expected to encounter BASIC programs with self modifying code. :-)
Therefore I used source code interpretation).

For source code interpretation you need functions to skip some code.
E.g.:
- Skip to next ELSE or ENDIF
- Skip to next ENDIF
Be careful:
  This functions must check if an IF statement is encountered.
  In this case they must call "Skip to next ENDIF"
  recursively and continue skipping after the ENDIF.

Then you can essentially work as follows:
- When an IF is taken you can continue executing statements.
- When an IF is not taken you use "Skip to next ELSE or ENDIF"
  and continue executing after the ELSE or ENDIF.
- When you approach an ELSE you use "Skip to next ENDIF"
  and continue executing after the ENDIF.
- When you approach an ENDIF you can continue executing statements.

There are also corner cases, like what to do when the end of
a file is reached during the skipping.

If you have also ELSIF statements the situation becomes
more complicated, but it is also solveable.

If you are interested in the details:
The Bas7 interpreter is described here:
http://seed7.sourceforge.net/scrshots/bas7.htm
There is a link to the source code in the top right area of the page.
The functions to skip code (regarding IF statements) are:
find_then
find_else
find_end_if
find_else_elseif_or_end_if

The functions will probably not fit to your interpreter, but you
might get some ideas from them.


Regards,
Thomas Mertes

--
Seed7 Homepage:  http://seed7.sourceforge.net
Seed7 - The extensible programming language: User defined statements
and operators, abstract data types, templates without special
syntax, OO with interfaces and multiple dispatch, statically typed,
interpreted or compiled, portable, runs under linux/unix/windows.
[This can work, but it's a lot easier to translate the source code
into an AST and interpret that.  If the source changes, translate it
again. -John]

Back to comp.compilers | Previous | Next — Previous in thread | Find similar | Unroll thread


Thread

interpreter: how is it possible to interpret nested IF ELSE ENDIF ???? Jens Kallup <jkallup@web.de> - 2013-05-15 07:42 +0200
  Re: interpreter: how is it possible to interpret nested IF ELSE ENDIF ???? Aleksey Demakov <ademakov@gmail.com> - 2013-05-31 16:07 +0400
  Re: interpreter: how is it possible to interpret nested IF ELSE ENDIF ???? mertesthomas@gmail.com - 2013-06-19 03:43 -0700

csiph-web