<div dir="ltr">Generally speaking, Racket is set up to work well with the #lang lines, but not as well without. Lots of things get easier if they are there.<br><div><br></div><div>Robby</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Wed, Sep 11, 2013 at 11:57 AM, Dmitry Pavlov <span dir="ltr"><<a href="mailto:dpavlov@ipa.nw.ru" target="_blank">dpavlov@ipa.nw.ru</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Joe,<br>
<br>
Thank you. Actually my goal is to run files that do<br>
not contain the #lang declaration--only pure non-Racket<br>
non-sexp code. Is there a way to (dynamic-require)<br>
a module with an externally preset language? I do not know.<br>
<br>
I tried your approach anyway. It works well itself,<br>
but I have failed (as with all the other approaches)<br>
to make a standalone executable from my "interpreter"<br>
program. I wonder if anybody tried that with programs<br>
of this kind.<br>
<br>
Best regards,<br>
<br>
Dmitry<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
<br>
On 09/11/2013 05:46 PM, Joe Gibbs Politz wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Dmitry,<br>
<br>
I've been using `dynamic-require` for Pyret, a non-SEXP based<br>
language.  For example, here's part of our command-line interface:<br>
<br>
<a href="https://github.com/brownplt/pyret-lang/blob/master/src/cmdline.rkt#L116" target="_blank">https://github.com/brownplt/<u></u>pyret-lang/blob/master/src/<u></u>cmdline.rkt#L116</a><br>
<br>
You can ignore the parameterization under `check-mode`, which is Pyret<br>
specific.  The point is that `pyret-file` is a filename handed in as a<br>
command-line argument, and we load the module via `dynamic-require`.<br>
`dynamic-require` does the work of using the reader/environment<br>
specified for the #lang declared in the file, and gets things like<br>
relative module imports right, too (at least I haven't been able to do<br>
anything too unexpected).<br>
<br>
This should work for any language that you want to build a<br>
file-accepting interface for, not just non-sexp ones.  I'm not sure if<br>
this is the preferred style or not; if it's not, Pyret should probably<br>
use whatever better method there is as well.<br>
<br>
Cheers,<br>
Joe P<br>
<br>
<br>
<br>
On Tue, Sep 10, 2013 at 11:14 AM, Dmitry Pavlov <<a href="mailto:dpavlov@ipa.nw.ru" target="_blank">dpavlov@ipa.nw.ru</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello,<br>
<br>
I have developed a non-SEXP DSL called SLON, and it works<br>
great in DrRacket via "#lang slon" declaration.<br>
<br>
I have properly set up a lexer, a parser which returns datum<br>
or syntax objects, slon/lang/reader.rkt,<br>
slon/lang/lang-into.rkt, slon/lang/confugure-runtime.<u></u>rkt<br>
and all the other stuff.<br>
<br>
Now I need it to work as a stand-alone interpreter<br>
which runs files specified by user (outside of DrRacket).<br>
How do I do that? The only thing I was able to come up<br>
with is using make-evaluator for racket/sandbox:<br>
<br>
(require slon/slon-parser<br>
          racket/sandbox)<br>
<br>
(call-with-input-file*<br>
    "myprogram.slon"<br>
    (lambda (port)<br>
      (parameterize ((sandbox-input (current-input-port))<br>
                     (sandbox-output (current-output-port)))<br>
        (call-with-trusted-sandbox-<u></u>configuration<br>
         (lambda ()<br>
           ((make-evaluator 'slon/slon-language<br>
                            #:allow-read '("/"))<br>
            (slon-read port))))))))<br>
<br>
Is it the correct way to create a stand-alone interpreter?<br>
Because I do not really need a "sandbox" of any kind,<br>
and also I was forced to specify #:allow-read '("/")<br>
because the SLON programs do read arbitrary files.<br>
<br>
Also I am having a lot of trouble in making that<br>
a stand-alone executable; but I will postpone<br>
discussing it because I am not sure whether<br>
I chose the right way to do the whole thing.<br>
<br>
<br>
Best regards,<br>
<br>
Dmitry<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/<u></u>users</a><br>
</blockquote>
<br>
<br>
</blockquote>
<br>
____________________<br>
 Racket Users list:<br>
 <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/<u></u>users</a><br>
</div></div></blockquote></div><br></div>