将代码从C转换为Java

时间:2014-12-07 15:30:44

标签: java c transform

#include <stdio.h>
#include <stdlib.h>

#define ST_PARAMETROV        4          //stevilo vhodnih parametrov
#define VEL_SPOMINA          10000      //velikost spomina +-10000
#define VEL_PROGRAMA         10000      //največja velikost programa
#define DOVOLJENIH_UKAZOV    10000      //največje dovoljeno število ukazov

int main() {

    // \0 označuje konec programa
    char program[VEL_PROGRAMA] = ",.>,<<,->--->+++.<.<.\0";
    int programPointer = 0;

    char parametri[ST_PARAMETROV] = {20,30,40,50};
    int parametriPointer = 0;

    unsigned char spomin[VEL_SPOMINA*2] = {0};
    int spominPointer = VEL_SPOMINA;

    int stOklepajev;
    int stOpravljenihUkazov = 0;


    while(program[programPointer] != 0 && DOVOLJENIH_UKAZOV > stOpravljenihUkazov){
        switch(program[programPointer]){
            case '>':
                spominPointer ++;
            break;

            case '<':
                spominPointer --;
            break;

            case '+':
                spomin[spominPointer] ++;
            break;

            case '-':
                spomin[spominPointer] --;
            break;

            case '.':
                printf("%i\n",spomin[spominPointer]);
            break;

            case ',':
                //če je zmanka parametrov zapiše 0
                if(parametriPointer > ST_PARAMETROV-1)spomin[spominPointer] = 0;
                else spomin[spominPointer] = parametri[parametriPointer++];
            break;

            case '[':
                if(spomin[spominPointer] == 0){
                    stOklepajev = 1;
                    while(stOklepajev != 0){
                        programPointer ++;
                        if(program[programPointer] == ']'){
                            stOklepajev--;
                        }
                        if(program[programPointer] == '['){
                            stOklepajev++;
                        }
                    }
                }
                break;

            case ']':
            if(spomin[spominPointer] != 0){
                stOklepajev = 1;
                while(stOklepajev != 0){
                    programPointer--;
                    if(program[programPointer] == '['){
                        stOklepajev--;
                    }
                    if(program[programPointer] == ']'){
                        stOklepajev++;
                    }
                }
            }
            break;


        }
        programPointer ++;
        stOpravljenihUkazov++;
    }
    return 0;
}

嗨,任何人都可以帮助我,我在将这些代码从C语言转换为Java语言时遇到了一些困难,任何能够毫无问题地轻松完成此任务的人都可以。我已经尝试过将它从Java转换为Java,但每次都会因为很多错误而失败。 如果有人可以将代码转换为Java,我会非常感激,然后我会自己更正错误。

代码本身是一个Brainfuck解释器。 感谢

2 个答案:

答案 0 :(得分:0)

你的#defines可能必须是const char。 您的case个开关必须转换为

if
else if
else if
 ...
else

之后它应该相当简单。

答案 1 :(得分:0)

需要的转换仅限于类和对象定义/初始化以及return

public class Brainfuck
{
    final static int
        ST_PARAMETROV     =     4,  //stevilo vhodnih parametrov
        VEL_SPOMINA       = 10000,  //velikost spomina +-10000
        VEL_PROGRAMA      = 10000,  //najve?ja velikost programa
        DOVOLJENIH_UKAZOV = 10000;  //najve?je dovoljeno ?tevilo ukazov

    public static void main(String[] argv)
    {
        // \0 ozna?uje konec programa
        char program[] = new char[VEL_PROGRAMA];
        char initialProgram[] = ",.>,<<,->--->+++.<.<.\0".toCharArray();
        System.arraycopy(initialProgram, 0, program, 0, initialProgram.length);
        int programPointer = 0;

        char parametri[] = {20, 30, 40, 50};
        int parametriPointer = 0;

        char spomin[] = new char[VEL_SPOMINA*2];
        int spominPointer = VEL_SPOMINA;

        int stOklepajev;
        int stOpravljenihUkazov = 0;

        while (program[programPointer] != 0
            && DOVOLJENIH_UKAZOV > stOpravljenihUkazov)
        {
            switch (program[programPointer])
            {

                case '>':
                    spominPointer++;
                break;

                case '<':
                    spominPointer--;
                break;

                case '+':
                    spomin[spominPointer]++;
                break;

                case '-':
                    spomin[spominPointer]--;
                break;

                case '.':
                    System.out.println((int)spomin[spominPointer]);
                break;

                case ',':
                    //?e je zmanka parametrov zapi?e 0
                    if (parametriPointer > ST_PARAMETROV-1)
                         spomin[spominPointer] = 0;
                    else spomin[spominPointer] = parametri[parametriPointer++];
                break;

                case '[':
                    if (spomin[spominPointer] == 0)
                    {
                        stOklepajev = 1;
                        while (stOklepajev != 0)
                        {
                            programPointer++;
                            if(program[programPointer] == ']') stOklepajev--;
                            if(program[programPointer] == '[') stOklepajev++;
                        }
                    }
                break;

                case ']':
                    if(spomin[spominPointer] != 0)
                    {
                        stOklepajev = 1;
                        while(stOklepajev != 0)
                        {
                            programPointer--;
                            if(program[programPointer] == '[') stOklepajev--;
                            if(program[programPointer] == ']') stOklepajev++;
                        }
                    }
                break;

            }
            programPointer++;
            stOpravljenihUkazov++;
        }
        System.exit(0);
    }
}