JBFD:BrainfuckからJavaへの逆コンパイラー

誰かがかつて言った:「いくつかの任意のラテン文字を取り、それらの前にJを追加してください。そうすれば、別のJavaテクノロジーが手に入ります。」 この記事では、Java BrainFuck Decompilerを意味するJBFDテクノロジーについて説明します。 この技術はまだかなり新しい(3時間の強度)ため、厳密に判断しないでください。



デコンパイラを作成するというアイデアは偶然ではありませんでした。 一般的にインターネット上のBrainFuckに関する記事、特にHabréに関する記事の多くが非難されています。 この素晴らしい言語のインタプリタはたくさんありますが、BFコードをデバッグするためのツールはほとんど見つかりませんでした。



しかし、BFから「ネイティブ」言語にコードを変換し、お気に入りのIDEを最大限に活用して、微妙なバグの検出、テストでのコードのカバー、最適化などを行うとどうなりますか? JBFDを使用すれば、これだけでなくさらに多くのことが可能になります。



せっかちな人のために、逆コンパイラのソースコードをダウンロードするためのリンクはこちら-JBFD.javaです。 コードはJDKバージョン1.5以降で実行されます。



JBFD.javaをコンパイルし、引数なしでプログラムを実行すると、次の結果が得られます。



 使用法:java JBFD << filename >> << options >>
オプション:
	 -p-クリーンアップされたソースコードを印刷する


-pオプションはオプションです。 たぶん誰かがコード検証に役立ち、ソースコードから改行とコメントを捨てるでしょう。 検証中、これまでは余分な文字または欠落した文字「]」と「[」のみが検出されます。 余分な ']'の場合、ソースファイルの行番号と文字も示されます。



たとえば、単純なecho.bfプログラムを逆コンパイルしてみましょう。



  、+ [-。、+]


「java JBFD echo.bf」コマンドを実行すると、echo.bf.javaファイルが次の内容で現在のフォルダーに表示されます。



class Program { static class FuckedByte { char value; FuckedByte(int value) { this.value = (char) value; } char get() { return value; } void inc(int i) { value += i; value %= 256; } void dec(int i) { value -= i; value %= 256; if (value < 0) value += 256; } static FuckedByte read() { try { return new FuckedByte(System.in.read()); } catch (Exception e) { throw new RuntimeException("Error reading from System.in"); } } void write() { System.out.print(value); } } public static void main(String[] args) { FuckedByte fb0 = new FuckedByte(0); fb0 = FuckedByte.read(); fb0.inc(1); while (fb0.get() != 0) { fb0.dec(1); fb0.write(); fb0 = FuckedByte.read(); fb0.inc(1); } } }
      
      







mainメソッドの内容-これはBrainfuckを使用した逆コンパイルされたコードであり、その他すべて-作業を簡素化します。 これで、ファイルはコンパイル、借方記入、テストで覆われ、難読化され、一般的には想像力が許す限りのすべてを実行できます。



これまでのところ、逆コンパイラはecho、hello worldなどの最も単純なプログラムでのみテストされています。 デコンパイラコードは急いで書かれており、最終決定されます。 それにもかかわらず、今、私は改善のためのコメントや提案に感謝します。



皆さん、頑張ってください。



All Articles