2005年04月12日
HelloWorld
Java で Hello World を書いてみた.ちょっと離れて見ると Hello World になっている.
class Hello {{{ {{{
{{{ {{{ {{ {{
{{{ {{{ {{ {{
{{{ {{{ {{{{{{ {{ {{ {{{{{{{
{{{{{{{{{ {{ {{ {{ {{ }} }}
}}} }}} }}}}}}}} }} }} }} }}
}}} }}} }} }} }} }} }}
}}} }}} }} }} }} }} }} }}
}}}}} public static void main (String
[]a){ {{{{{ {{{ {{{
{{{ {{{ {} }}
}}} }}} }} }}
}}} }(( (System . out)) ). println
((( "H" +"" +( "" ))+ "" )+ "" +(
"e" )+( "l" +( "" )) +( "" )+
"l" +(( "o" +( "" )) +( "" )+
""+" "+(( "" )+ "" )+ (( ""
+"" ))+ "W"+"o" +"rl" +"d" ));}}{}}
動かすとちゃんと Hello World を出力する.C ほどへんなことができないのであまり面白くない... 先の自己出力プログラム生成プログラムに食わせると,Hello World をバナーみたいに出力できてうれしいかも.
- Comments: 0
- TrackBack (Close): -
自己出力プログラムの生成プログラム
Java のソースを読んでそのソースを含む自己出力プログラムを吐くプログラムを書いた.あまり美しくないなぁ...
/***
* 次の Self2.template をソースファイルに埋め込んで,
* そのソース全体を含む自己出力プログラムを作成する.
* 実行クラス名は SelfPrint (Self2.template のクラス名) となる.
* \r は置き換えないのでソース中に含まないようにすること.
* \n, \t, " を %n, %t, %c という文字に変換して文字列を埋め込むので,
* ソースはこれらを含まないこと.
* あと, %s もあるとまずい.
* エスケープ文字もまずそう.
* Self.template の main 関数で何かメソッドを呼ぶように書けば仕事もできる.
* そのばあい,画面出力があると自己出力の意味が無いけど...
*---------------------- Self2.template start --------------------------
class SelfPrint {
static String s="%s";
public static void main(String [] args) {
String ss=s.replaceAll(new String(new byte []{37, 110}), new String(new byte []{10}));
ss=ss.replaceAll(new String(new byte []{37, 116}), new String(new byte []{9}));
ss=ss.replaceAll(new String(new byte []{37, 99}), new String(new byte []{34}));
ss=ss.replaceAll(new String(new byte []{37, 115}), s);
System.out.print(ss);
}
}
*---------------------- Self2.template end --------------------------
*
*/
import java.io.*;
class SelfGen2 {
public static void main(String [] args) throws Exception {
if(args.length <= 0){
System.out.println("Usage: java SelfGen2 input.java");
System.out.println("Note: input.java should not contain CR");
System.exit(0);
}
File file = new File(args[0]);
FileReader fis = new FileReader(file);
int len = (int)file.length();
char [] buf = new char[len];
len = fis.read(buf, 0, len);
String source = new String(buf, 0, len);
File tfile = new File("Self2.template");
FileReader tfis = new FileReader(tfile);
int tlen = (int)tfile.length();
char [] tbuf = new char[tlen];
tlen = tfis.read(tbuf, 0, tlen);
String template = new String(tbuf, 0, tlen);
source = source + template;
//System.out.println(source);
String ss = source;
ss=ss.replaceAll(new String(new byte []{10}), new String(new byte []{37, 110}));
ss=ss.replaceAll(new String(new byte []{9}), new String(new byte []{37, 116}));
ss=ss.replaceAll(new String(new byte []{34}), new String(new byte []{37, 99}));
source=source.replaceAll(new String(new byte []{37, 115}), ss);
System.out.print(source);
}
}
- Comments: 0
- TrackBack (Close): -