Writing a language converter in Ruby?


#1

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 ?


#2

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.


#3

Zouplaz wrote:

Why not use existing tools? I like treetop, myself:
http://treetop.rubyforge.org/

-Justin


#4

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.


#5

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


#6

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.


#7

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=7d84759579f71726edffea2f892f88a8


#8

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?


#9

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/).


#10

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


#11

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.