Forum: Ruby Writing a language converter in Ruby ?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Zouplaz (Guest)
on 2009-03-20 13:06
(Received via mailing list)
Hi, I wonder where to start if I wanted to write a converter from XX
language source code to Ruby source code or from Ruby to XX ?

Eg. Converting Basic source code to Ruby ?

Do I absolutely need to use a tool like CocoR
(http://www.zenspider.com/ZSS/Products/CocoR/) ? Or is there a
standalone approach that only uses Ruby capacities ?
Dylan E. (Guest)
on 2009-03-20 14:38
(Received via mailing list)
It's a good idea to use a parser generator, it will simplify your code
and
make it easier to work with. Of course you can just start reading the
basic
files and parse them with a bunch of logic. Of course the code quality
will
always be much higher if you just rewrite it, unless you want to compile
it
but then you would want to target C.
Justin C. (Guest)
on 2009-03-21 05:13
(Received via mailing list)
Zouplaz wrote:
>
Why not use existing tools? I like treetop, myself:
http://treetop.rubyforge.org/

-Justin
Brian C. (Guest)
on 2009-03-23 17:51
Dylan E. wrote:
> It's a good idea to use a parser generator, it will simplify your code
> and
> make it easier to work with. Of course you can just start reading the
> basic
> files and parse them with a bunch of logic.

Parsing is only half the answer. Once you have parsed, you will normally
have built some internal structure representing the input. You then
usually need a code generator to output code in the target language.

It's possible to generate naive code as you parse, but it will usually
be of poor quality. It may be possible to perform transformations on
this output to improve it, e.g. as a "peephole" optimiser does.

Recommended venerable book: "Compilers: Principles, Techniques and
Tools" by Aho, Sethi, Ullman - aka "The Dragon Book". I believe it has
been recently revised.
Ian T. (Guest)
on 2009-03-23 19:39
Zouplaz wrote:
> Hi, I wonder where to start if I wanted to write a converter from XX
> language source code to Ruby source code or from Ruby to XX ?
>
> Eg. Converting Basic source code to Ruby ?
>
> Do I absolutely need to use a tool like CocoR
> (http://www.zenspider.com/ZSS/Products/CocoR/) ? Or is there a
> standalone approach that only uses Ruby capacities ?

Perhaps, you would just be better off a completely different tool. A
source transformation programming language, such as TXL.
http://www.txl.ca/

Regards,
Ian
Albert S. (Guest)
on 2009-03-24 10:52
Justin C. wrote:
> Why not use existing tools? I like treetop, myself:
> http://treetop.rubyforge.org/
>
> -Justin

That's interesting. I see that their DSL looks like:

  rule additive
    multitive '+' additive / multitive
  end

Do you notice? There's "end" there but no "do"! How is it possible?
Brian C. (Guest)
on 2009-03-24 12:24
Albert S. wrote:
> That's interesting. I see that their DSL looks like:
>
>   rule additive
>     multitive '+' additive / multitive
>   end
>
> Do you notice? There's "end" there but no "do"! How is it possible?

Because it's not Ruby.

In Ruby, blocks are optional after a method call. Both these are legal:

(1)
    foo

(2)
    foo do
      ... more stuff
    end

Presumably, TXL's language *requires* a rule body followed by end.
Brian C. (Guest)
on 2009-03-24 13:59
Brian C. wrote:
> Presumably, TXL's language *requires* a rule body followed by end.

BTW: TXL is distributed only as a binaries (closed source).

http://txl.ca/forum/viewtopic.php?t=15&sid=7d84759...
Albert S. (Guest)
on 2009-03-26 18:54
Brian C. wrote:
> Albert S. wrote:
>> That's interesting. I see that their DSL looks like:
>>
>>   rule additive
>>     multitive '+' additive / multitive
>>   end
>>
>> Do you notice? There's "end" there but no "do"! How is it possible?
>
> Because it's not Ruby.
> [snip]
> Presumably, TXL's language *requires* a rule body followed by end.

But I was not talking about TXL. I was talking about Treetop
(http://treetop.rubyforge.org/).
Alex G. (Guest)
on 2009-03-26 19:04
(Received via mailing list)
On 26 Mar 2009, at 16:51, Albert S. wrote:

>> Because it's not Ruby.
>> [snip]
>> Presumably, TXL's language *requires* a rule body followed by end.
>
> But I was not talking about TXL. I was talking about Treetop
> (http://treetop.rubyforge.org/).
>
> --
> Posted via http://www.ruby-forum.com/.


Treetop grammers aren't written in Ruby (or TXL) they're their own
custom language.

Alex G.
Systems Biology Centre
University of Cambridge
James C. (Guest)
on 2009-03-26 19:10
(Received via mailing list)
2009/3/26 Alex G. <removed_email_address@domain.invalid>

>>>>  end
>> (http://treetop.rubyforge.org/).
>>
>> -- Posted via http://www.ruby-forum.com/.
>>
>
>
> Treetop grammers aren't written in Ruby (or TXL) they're their own custom
> language.



Though, worth noting that the language bears a very close relationship
to
Ruby modules, since Treetop grammars can be mixed into each other so
languages can be composed from smaller languages. When you compile a
Treetop
grammar, you get a Ruby module that can be mixed into any other class to
make that class a parser for the grammar.
This topic is locked and can not be replied to.