0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Javaで超簡単疑似プログラム

Posted at

自作言語つくりたい

ある日、暇だったから 自作言語が作りたくなった
でも、私は知っている 自作言語は作るものが多いことを
…じゃあもう計算能力だけ当ててやるくらいならできるんじゃない?
あと言語もくっそ単純なアセンブラっぽいのを使えばできるんじゃね?

うちの学校

うちの学校はJavaのお勉強をしてるから…じゃあJavaにしよ

Main.java
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class Main {
    @FunctionalInterface
    public interface CPU_MEIREI {
        void function(long[] registers, int a, int b);
    }
    //拡張性を持たせるため、Switchをつかってみた
    public static void systemcall(long[] r, int a, int b){
        switch (a) {
            case 1:
                System.out.println(r[b]);
                break;
        
            default:
                break;
        }
    }
    public static void main(String[] args) {
        if(args.length < 1){
            System.out.println("文字列に引数を指定してください");
            return;
        }
        long registers[] = new long[4];
        //命令セット
        final CPU_MEIREI meirei[] = {
            (r, a, b)-> r[a] = r[a] + r[b],     //0
            (r, a, b)-> r[a] = r[a] - r[b],     //1
            (r, a, b)-> r[a] = r[a] * r[b],     //2
            (r, a, b)-> r[a] = r[a] / r[b],     //3
            (r, a, b)-> r[a] = r[a] % r[b],     //4
            (r, a, b)-> r[a] = r[a] >> r[b],    //5
            (r, a, b)-> r[a] = r[a] << r[b],    //6
            (r, a, b)-> r[a] = r[a] ^ r[b],     //7
            (r, a, b)-> r[a] = r[b],            //8
            (r, a, b)-> r[a] = b,               //9
            Main::systemcall                    //10
        };
        if(args.length == 5){
            registers[0] = Integer.parseInt(args[1]);
            registers[1] = Integer.parseInt(args[2]);
            registers[2] = Integer.parseInt(args[3]);
            registers[3] = Integer.parseInt(args[4]);
        }
        //命令実行(ポインタとか使って、if,for,while文を使えるように…したいけど…)
        try(BufferedReader br = new BufferedReader(new FileReader(args[0]))){
            br.lines().forEach(str->{
                //System.out.println(str);
                String[] testa = str.split(" ");
                if(testa.length != 3) return;
                int meirei_tmp = Integer.parseInt(testa[0]);
                int register1 = Integer.parseInt(testa[1]);
                int register2 = Integer.parseInt(testa[2]);
                meirei[meirei_tmp].function(registers, register1, register2);
            });
        }catch(IOException e){
            e.printStackTrace();
        }
        StringBuilder sb = new StringBuilder();
        sb.append("eax = ").append(registers[0]).append('\n');
        sb.append("ebx = ").append(registers[1]).append('\n');
        sb.append("ecx = ").append(registers[2]).append('\n');
        sb.append("edx = ").append(registers[3]).append('\n');
        System.out.println(sb);
    }
}

自作プログラミング言語ファイル

自作言語
0 0 1 
0 2 3
0 0 2
10 1 0

(4つの引数を受け取って、すべてを足すプログラム)

まとめ

まだまだ、改良の余地があるから、もうちょこっと…頑張りたい

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?