<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div>I think, you may simply add #lang into input-port when reading the file.<br></div></blockquote><div><br></div><div>Good point, but how do I (dynamic-require) a port?</div><div>I could make a temporary file with the #lang line preceding</div>
<div>the contents of the original file, but then I lose all the references</div><div>to the original file in the parser error messages etc.</div><div><br></div><div>In case you referred to my original solution with </div>
<div>(<span style="font-family:arial,sans-serif;font-size:13.333333969116211px">make-evaluator), which I do not like: it works</span></div><div><span style="font-family:arial,sans-serif;font-size:13.333333969116211px">without #lang all right.</span></div>
<div><span style="font-family:arial,sans-serif;font-size:13.333333969116211px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13.333333969116211px">Regards,</span></div><div><span style="font-family:arial,sans-serif;font-size:13.333333969116211px"><br>
</span></div><div><span style="font-family:arial,sans-serif;font-size:13.333333969116211px">Dmitry</span></div><div><span style="font-family:arial,sans-serif;font-size:13.333333969116211px"><br></span></div><div><span style="font-family:arial,sans-serif;font-size:13.333333969116211px"><br>
</span></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><br><br>Среда, 11 сентября 2013, 12:08 -05:00 от Robby Findler <<a href="mailto:robby@eecs.northwestern.edu" target="_blank">robby@eecs.northwestern.edu</a>>:<br>

<blockquote style="border-left-width:1px;border-left-style:solid;border-left-color:rgb(8,87,166);margin:10px;padding:0px 0px 0px 10px">
        <div>
        



    






        

        
        
        
        
        

        



<div>
        
        <div>
                
                
                        <div><div class="im"><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><div><div class="h5"><div>
<br><br><div>On Wed, Sep 11, 2013 at 11:57 AM, Dmitry Pavlov <span dir="ltr"><<a href="https://e.mail.ru/sentmsg?mailto=mailto%3adpavlov@ipa.nw.ru" target="_blank">dpavlov@ipa.nw.ru</a>></span> wrote:<br><blockquote style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style: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><div><br>
<br>
<br>
<br>
<br>
On 09/11/2013 05:46 PM, Joe Gibbs Politz wrote:<br>
<blockquote style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style: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="https://e.mail.ru/sentmsg?mailto=mailto%3adpavlov@ipa.nw.ru" target="_blank">dpavlov@ipa.nw.ru</a>> wrote:<br>
<blockquote style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style: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>

</div></div></div><div><div class="h5">
                        <div>____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br>
</div>
                
                
        </div></div></div><span class=""><font color="#888888">

        
</font></span></div><span class=""><font color="#888888">


</font></span></div><span class=""><font color="#888888">
</font></span></blockquote><span class=""><font color="#888888">
<br>
<br>-- 
<br>Roman Klochkov<br></font></span></div>
</blockquote></div><br></div></div>