Page 8 of 20

Re: C++/C programming discussion

Posted: Mon Sep 20, 2010 5:26 pm
by Scott
Matthew wrote:fstream is a C++ class which I've never used. You may try it and it can work but I wouldn't know how to help.
I've used it so I'm okay with the it but was just wondering if you knew if it would work. I'll give it a shot and update on how it went later.

Re: C++/C programming discussion

Posted: Mon Sep 20, 2010 5:58 pm
by Matthew
You are going to try to create a Ruby to C++ converter now?

Re: C++/C programming discussion

Posted: Mon Sep 20, 2010 7:00 pm
by Scott
Matthew wrote:You are going to try to create a Ruby to C++ converter now?
Yep. I did some simple stuff: http://codepad.org/XuJefoZw

Here's the Ruby code I used: http://codepad.org/54hIqK98

Some stuff is wrong, other stuff doesn't work, just wanted to show what I was doing. I am at a loss of what .chomp does right now as I haven't programmed in Ruby for a long time.

EDIT: New code:

Code: Select all

#include <iostream>
#include <string>
#include <fstream>

using namespace std;

int main()
{
    fstream rubycode;
    rubycode.open("anothertest.rb");
    string rubyline;
    bool semicolon = true, newline = true;
    int i = 0, j;

    while (! rubycode.eof())
    {
        getline(rubycode, rubyline);
        semicolon = true;
        newline = true;

        for (i = 0; i < rubyline.length(); i++)
        {
            //puts to cout
            if (rubyline[i] == 'p' && rubyline[i+1] == 'u' && rubyline[i+2] == 't' && rubyline[i+3] == 's')
            cout << "std::cout << ";
            //writing what string is being put
            if (rubyline[i-5] == 'p' && rubyline[i-4] == 'u' && rubyline[i-3] == 't' && rubyline[i-2] == 's')
            {
                for (j = i; j < rubyline.length(); j++)
                {
                    if (rubyline[j] == '\'')
                    cout << "\"";
                    else
                    cout << rubyline[j];
                }
            }
            //gets
            if (rubyline[i] == 'g' && rubyline[i+1] == 'e' && rubyline[i+2] == 't' && rubyline[i+3] == 's' && rubyline[i+4] != '.')
            cout << "std::cin >> ";
            //gets.
            if (rubyline[i] == 'g' && rubyline[i+1] == 'e' && rubyline[i+2] == 't' && rubyline[i+3] == 's' && rubyline[i+4] == '.')
            cout << "std::cin.";
            //chomp
            if (rubyline[i] == 'c' && rubyline[i+1] == 'h' && rubyline[i+2] == 'o' && rubyline[i+3] == 'm' && rubyline[i+4] == 'p')
            cout << "get()";
            //if
            if (rubyline[i] == 'i' && rubyline[i+1] == 'f')
            cout << "if ";
            //in between the brackets
            if (rubyline[i] == '(')
            {
                for (j = i; j < rubyline.length(); j++)
                {
                    if (rubyline[j] == ')')
                    {
                        cout << ")\n{";
                        semicolon = false;
                        break;
                    }
                    else
                    cout << rubyline[j];
                }
            }
            //else
            if (rubyline[i] == 'e' && rubyline[i+1] == 'l' && rubyline[i+2] == 's' && rubyline[i+3] == 'e')
            {
                cout << "}\nelse\n{";
                semicolon = false;
            }
            //end
            if (rubyline[i] == 'e' && rubyline[i+1] == 'n' && rubyline[i+2] == 'd')
            {
                cout << "}";
                semicolon = false;
            }
        }
        if (rubyline.length() == 0)
        {
            semicolon = false;
            newline = false;
        }
        if (semicolon == true)
        cout << ";";
        if (newline == true)
        cout << "\n";
    }
    rubycode.close();

    return 0;
}
This completely converts the Ruby code (linked above) except headers, int main, return 0, ect. Simply the code written. I will probably continue with this project and may get some more experience Ruby programmers that I know/can find. Thanks for the idea :)-

Re: C++/C programming discussion

Posted: Tue Sep 21, 2010 4:31 pm
by Matthew
To make a full converter you will need to implement the dynamic features of Ruby to C++. Thats hard to do. Also the expressions will work differently so you'd need an expression converter like mine. Converting the OOP to C++ will be easier than converting to C because C doesn't do OOP like C++ does.

Re: C++/C programming discussion

Posted: Tue Sep 21, 2010 5:31 pm
by Scott
Matthew wrote:To make a full converter you will need to implement the dynamic features of Ruby to C++.
:?:
Matthew wrote:Also the expressions will work differently so you'd need an expression converter like mine.
:?:
Matthew wrote:Converting the OOP to C++ will be easier than converting to C because C doesn't do OOP like C++ does.
That part I understood :)

Re: C++/C programming discussion

Posted: Tue Sep 21, 2010 5:40 pm
by Matthew
I'm talking mostly about the dynamic typing (Use google).

Google expressions also.

Re: C++/C programming discussion

Posted: Tue Sep 21, 2010 5:55 pm
by Scott
Do you create a .c file with the converted code? That would be cool although formatting would probably prove difficult.

Re: C++/C programming discussion

Posted: Tue Sep 21, 2010 6:03 pm
by Matthew
A c source file, yes. I might include some option to pass the result to gcc for compilation.

Re: C++/C programming discussion

Posted: Tue Sep 21, 2010 8:35 pm
by Scott
Matthew wrote:A c source file, yes. I might include some option to pass the result to gcc for compilation.
That would be cool. I was wondering if that was possible myself.

Re: C++/C programming discussion

Posted: Wed Sep 22, 2010 6:06 pm
by Matthew
I have a problem with my char pointers (C strings). A char pointer changes and I don't know why. It's breaking my pointer arithmetic which in turn results in a number too large for strncpy and hence a buffer overflow.

People have been least helpful on this website so far - http://stackoverflow.com/questions/3773 ... inter-arit

Re: C++/C programming discussion

Posted: Wed Sep 22, 2010 6:16 pm
by Scott
Matthew wrote:I have a problem with my char pointers (C strings). A char pointer changes and I don't know why. It's breaking my pointer arithmetic which in turn results in a number too large for strncpy and hence a buffer overflow.

People have been least helpful on this website so far - http://stackoverflow.com/questions/3773 ... inter-arit
I noticed the bracket thing too...but anyway; you may want to try these forums http://www.cplusplus.com/forum It's C++ but they could probably still help.

Re: C++/C programming discussion

Posted: Wed Sep 22, 2010 6:36 pm
by Matthew
I had an answers which was correct. I wasn't allocating enough memory for the stack.

Re: C++/C programming discussion

Posted: Wed Sep 22, 2010 6:39 pm
by Scott
Matthew wrote:I had an answers which was correct. I wasn't allocating enough memory for the stack.
I could have told you that :lol:

A question I always wonder, what are you planning on doing as a career? I would assume Computer Science, but even so, what career path afterwards?

Re: C++/C programming discussion

Posted: Wed Sep 22, 2010 6:45 pm
by Matthew
I want to run my own business. Likely computer related. I've just started a degree called Enterprise development.

Re: C++/C programming discussion

Posted: Wed Sep 22, 2010 6:54 pm
by Scott
Matthew wrote:I want to run my own business. Likely computer related. I've just started a degree called Enterprise development.
I've always wanted to start my own business as well; taking business classes to teach me some of the challenges that could potentially await. The thing is, I want to become a Computer Scientist with a higher knowledge in the branch of game/simulation development. The problem being that you can't get a paycheck for years and even then the game might not sell. I guess I could work IT and game program with a team on the side, release the game, hope to get a publisher's attention, and go from there. That's a lot of hope and ifs though.