�䤬�����Τ�ʤ�Ǥ������Ƕ�Υץ�����ߥ󥰸���Ȥ����顢 �䤿��ʣ���ǡ�����������ʤ�ΤˤʤäƤ���Ȼפ��ޤ���?
�פ��Ф��٤Ƥ��ѿ��������ƥ��å��Ǥ��ä����ϴ������ưפǤ����� ��������ALGOL�Ϥθ��줬���������ѿ��򥹥��å����ݻ�����褦�ˤʤä����Ȥǡ� �ѿ�������������Ȥ�����γ�ǰ���ɲä���Ƥ��ޤ��ޤ����� C�ǡ� ���������ѿ��ؤΥݥ��󥿤�����ͤ��֤��ƤҤɤ��ܤˤ��ä��鿴�Ԥ�¿�����ȤǤ��礦�� ����ˡ����������ѿ��򥹥��å����֤����Ȥ� �Ƶ��ƤӽФ�����ǽ�ˤʤäƤ��ޤ��ޤ������� ����ޤ��鿴�Ե㤫���Ǥ��� �����å������Ȥ�ϥΥ�����Υ��������ɤ⤦�Ȥ�����ΤΡ� Ƭ���椬���󤬤餬�ä���ȯ�������ˤʤä����Ȥ����Τϡ� ï�⤬�и����Ƥ������Ǥ���
����˺Ƕ�Υץ�����ߥ󥰸���Ǥϡ����֥������Ȥ򲿤⤫��ҡ��פ��֤����������ꡢ ���줬�ޤ��鿴�Ե㤫���γ�ǰ�Ǥ��� �ݥ�����¿�Ѥ��뤳�ȤˤĤʤ��äƤ��ޤ��� ��? �ݥ��󥿤���ʤ��������ä�? �����C�Υݥ��󥿤ˤ�����ι�ʸ����äƤ���Ȥ��¹Ի������å����ʤ��Ȥ��� ����Ϥ��뤱��ɡ����ȴط������󤬤餬��ȤҤɤ��ܤˤ����Ȥ�������� �ݥ��󥿤ȸƤܤ������ȤȸƤܤ���Ʊ�����ȡ� ���ޤǤ�1�����Υ����ΰ�����ˤ��Ƥ���Ф褫�ä��Τ��� �ݥ���(����)��Ƴ������뤳�Ȥǡ� ����Ū���İ�ǽ�Ϥ�ɬ�פˤʤäƤ��ޤä��ΤǤ���
����ɤ����������֥��������Ȥ�����ǰ�ϡ� �ץ������������֤���ĥ����ޥ꤬�������󤢤��Ȥ��� ��ǰ��¾�ʤ餺���Ȥ������Ȥ������� �ץ�����ޤϤ������󤢤륫���ޥ�ξ��֤��İ������������ʤ���Фʤ�ʤ��ΤǤ��� ����ϡ��ץ�������ʣ���٤򡢤����Ȥ߹�碌�ο������� �Ĥޤ�ؿ��ؿ�Ū�����ä����뤳�Ȥˤʤ�ޤ���
���ޤĤ�����OO����Ǥϡ��ݥ���ե������Ȥ�����ǽ�ˤ�� Ŭ�Ѥ�����³������¹Ի��˷�ޤ�ΤǤ����顢 �ץ������Υ��������ɤळ��(��Ū�ʲ���)�Ϥޤ��ޤ�����ˤʤäƤ��ޤäƤ��ޤ��� C�ʤɤǤϡ�����ؿ��Υ��������ɤ�ݡ� ��Ū�δؿ�����ɤ�ɤ󲼰̤ؤȷ���ʤ�Ƥ����Ф����櫓�Ǥ����� OO����Ǥϡ� ���󥹥��󥹥ե�����ɤʤɤ��ݻ�����Ƥ��륪�֥������ȤΥ᥽�åɤ��ƤФ�Ƥ����顢 ���Υ��֥������Ȥ���������Ƥ���Ȥ����ޤ��̤ä��ɤ�ɬ�פ�����ޤ��� �����������������̤ä��ɤࡢ�Ĥޤꡢ �ɤμ¹ԥѥ����̤äƤ������褿����õ�뤳�Ȥϡ� ñ�˼¹Խ���ɤ�Ǥ����Τ���٤ư���Ū���񤷤���ΤǤ����� ����ɤ���������ä�õ�����Ƥ����֥������Ȥ������ս�� �ǥ�����ѥ������ʤ󤾻Ȥ��Ƥ����ꤹ��ȡ� ����ˤ�������Ĺ��ι�λϤޤ�Ǥ���
���䡢�ޤ�����Ǥ⡢���֥������ȤΥ᥽�åɤ����饹�Ȥ����������Τ�������졢 �Ѿ��ط��⥽������ˤ�����ȵ��Ҥ���Ƥ���С��ޤ������ɤ����Ȥ��Ǥ���Ǥ��礦�� ���������ץ��ȥ����ץ١�����OO����Ǥϡ� ���饹�������Τ�������줺���¹Ի��ˤؤ��ؤ��Ѳ������ꤹ��ΤǤ���
�ޤ�����˽񤤤��褦�ˡ���������Υ��֥������Ȥ����������ʾ��֤���Ĥ��� ���θ�����񤷤��ΤǤ����� ����Ǥ⥪�֥������Ȥμ�ꤦ����֤� ���饹�Υե�����ɤȤ����������Τ��������Ƥ���� �ޤ��İ��Ǥ��뤫�⤷��ޤ��� ������������ˤ�äƤϡ������������Ȥ�������ε�ǽ�ǡ� ñ�ʤ���������ѿ��ΤĤ����ä���Τ����Ĥδ֤ˤ����֤���� ���֥������ȤȤ��ư����Ƥ��ޤä��ꤷ�ޤ��� ����Ǥϡ��ɤ��˾��֤�������Ƥ���Τ����äѤ�狼��ޤ���
���ΤϤ褫�ä��ġ�
�ȡ�����Ĥ���ò©���뤢�ʤ��Τ���ˡ�����ȯ�������줬��BF-BASIC'n�פǤ���
BF-BASIC'n�ϡ� �ָ���׻����ʳؤ���פȸ�����Alan Turing ���ͰƤ����Ǥ�ץ�ߥƥ��֤ʷ��β��ۥޥ���ξ�ˡ� ����80ǯ��Ρ��ץ�����ߥ󥰸���Ȥ�����BASIC���ä������ ʷ�ϵ���ȿ�Ǥ���������Ǥ��� �����å���ҡ��פ⥪�֥������Ȥ�ݥ���ե�����⥯��������⤢��ޤ��� �Ȥ�櫓�鿴�ԤˤȤäơ��ؽ�������ޤˤ��ʤ��Ȥ�����̣�ǡ� ���Τ褦�ʸ���ˤϽ��פʰ�̣������Ȼ�ϳο����Ƥ��ޤ���
���ơ��������ץ�����ߥ󥰸�����ä��Ȥ��ˤϡ� �ޤ���Hello World!�פ�ɽ�������Ƥߤ롢�Ȥ����Τ������꡼�Ǥ��礦�� BF-BASIC'n�ǡ���Hello World!�� ��ɽ��������ץ������Υ������ϰʲ��Τ褦�ˤʤ�ޤ���
���ݤݤݤݤݤݤݤݤݤ��Ƥ�ΤФܡ���ݤݤݤݤݤݤݤݤ��ӤʤФӤ����� �Фܡ���ݡ��󤹤ݤݤݤݤݤݤݤ��Ƥ�ΤФܡ���ݤݤݤݤ��ӤʤФӤ����� �Фܡ���ݤݡ���ݤݤݤݤݤݤݤݡ���ݡ���ݤݤݤݡ��󤹤Ƥ�ΤӤʤФӤ����� ���ݤݤݤݤݤݤݤݤ��Ƥ�ΤФܡ���ݤݤݤݤ��ӤʤФӤ����� �Фܡ���ݡ��󤹤ݤݤݤݤݤݤݤݤݤݤݤ��Ƥ�ΤФܡ���ݤݤݤݤݤ��ӤʤФӤ����� �Фܡ���ݡ��󤹤ݤݤݤݤݤݤݤݤ��Ƥ�ΤФܡ���ݤݤݤ��ӤʤФӤ����� �Фܡ���ݡ���ݤݤݤݡ���ӤӤӤӤӤӤݡ���ӤӤӤӤӤӤӤӤݡ��� ���Ƥ�ΤӤʤФӤ����󤹤ݤݤݤݤݤݤݤݤ��Ƥ�ΤФܡ���ݤݤݤݤ��ӤʤФӤ����� �Фܡ���ݤݡ��󤹤Ƥ�ΤӤʤФӤ�����ݤݤݤݤݤݤݤݤݤݤݡ���
������������Τ�̵��ǤϤ���ޤ�����BF-BASIC'n���פ���ˡ� ���塼��󥰥ޥ�������Υץ�����ߥ󥰸���Ǥ���Brainfuck�� �֤١����÷��פ�̣�դ����ɲä�����ΤǤ���
Brainfuck�ˤĤ��Ƥβ���Ϥ����餬�狼��䤹���Ǥ��礦��
K.INABA����Ρ�������ʤ��� @ �͹����������פ�Brainf*ck�Υڡ�����
http://www.kmonos.net/alang/etc/brainfuck.php
Wikipedia�Ǥ������Ϥ����顣
http://ja.wikipedia.org/wiki/Brainfuck
�������֤١����÷��פ�Wikipedia�Ǥ������Ϥ����顣
http://ja.wikipedia.org/wiki/%E3%81%B9%E3%83%BC%E3%81%97%E3%81%A3%E5%90%9B
�֤١����÷��פ�ʷ�ϵ���Ĥ���ʤ顢 �֤��Τߤ���פΤ�����Υڡ����Τۤ����褤���⤷��ޤ���
http://www.tanomi.com/shop/jyuchu/items01064.html
Brainfuck��BF-BASIC'n�Υȡ�������б��դ��ϰʲ��Τ褦�ˤʤ�ޤ���
Brainfuck | BF-BASIC'n |
---|---|
> | �� |
< | �Фܡ��� |
+ | �� |
- | �� |
. | �ݡ��� |
, | ������� |
[ | ���Ƥ�� |
] | �ʤФӤ����� |
BF-BASIC'n�Υ������Ϥ����顣
1: #include <stdio.h> 2: #include <string.h> 3: #include <stdlib.h> 4: #include <ctype.h> 5: #include <assert.h> 6: 7: typedef struct { 8: int bf; 9: char *basicn; 10: } Conv; 11: 12: static Conv st_conv[] = { 13: {'>', "��"}, 14: {'<', "�Фܡ���"}, 15: {'+', "��"}, 16: {'-', "��"}, 17: {'.', "�ݡ���"}, 18: {',', "�������"}, 19: {'[', "���Ƥ��"}, 20: {']', "�ʤФӤ�����"}, 21: }; 22: 23: typedef struct { 24: int bf_code; 25: int address; 26: } BfCode; 27: 28: static BfCode st_bf_code[10000]; 29: static int st_code_count; 30: 31: static int 32: compare_conv(const void *a, const void *b) 33: { 34: return strlen(((Conv*)b)->basicn) - strlen(((Conv*)a)->basicn); 35: } 36: 37: static void 38: sort_conv_table(Conv *table, int table_count) 39: { 40: qsort(table, table_count, sizeof(Conv), compare_conv); 41: } 42: 43: static void 44: read_source(FILE *fp) 45: { 46: unsigned char line[4096]; 47: int i; 48: int j; 49: int code_idx = 0; 50: int stack[256]; 51: int sp = 0; 52: 53: while ((fgets(line, 4096, fp)) != NULL) { 54: for (i = 0; line[i] != '\0'; ) { 55: if (isspace(line[i])) { 56: i++; 57: continue; 58: } 59: 60: for (j = 0; j < sizeof(st_conv)/sizeof(Conv); j++) { 61: int len = strlen(st_conv[j].basicn); 62: if (!strncmp(&line[i], st_conv[j].basicn, len)) { 63: st_bf_code[code_idx].bf_code = st_conv[j].bf; 64: 65: if (st_conv[j].bf == '[') { 66: stack[sp] = code_idx; 67: sp++; 68: } else if (st_conv[j].bf == ']') { 69: st_bf_code[stack[sp-1]].address = code_idx; 70: st_bf_code[code_idx].address = stack[sp-1]; 71: sp--; 72: if (sp < 0) { 73: fprintf(stderr, "bracket mismatch\n"); 74: exit(2); 75: } 76: } 77: code_idx++; 78: i += len; 79: break; 80: } 81: } 82: if (j == sizeof(st_conv)/sizeof(Conv)) { 83: fprintf(stderr, "syntax error\n"); 84: exit(2); 85: } 86: } 87: } 88: if (sp != 0) { 89: fprintf(stderr, "bracket mismatch\n"); 90: exit(2); 91: } 92: 93: st_code_count = code_idx; 94: } 95: 96: static void 97: interpret(void) 98: { 99: int pc; 100: int array[65536]; 101: int p = 0; 102: 103: for (pc = 0; pc < st_code_count; pc++) { 104: switch (st_bf_code[pc].bf_code) { 105: case '>': 106: p++; 107: break; 108: case '<': 109: p--; 110: break; 111: case '+': 112: array[p]++; 113: break; 114: case '-': 115: array[p]--; 116: break; 117: case '.': 118: putchar(array[p]); 119: break; 120: case ',': 121: array[p] = getchar(); 122: break; 123: case '[': 124: if (!array[p]) { 125: pc = st_bf_code[pc].address; 126: } 127: break; 128: case ']': 129: pc = st_bf_code[pc].address - 1; 130: break; 131: default: 132: assert(0); 133: } 134: } 135: } 136: 137: 138: int 139: main(int argc, char **argv) 140: { 141: FILE *in_fp; 142: 143: sort_conv_table(st_conv, sizeof(st_conv)/sizeof(Conv)); 144: 145: if (argc == 2) { 146: in_fp = fopen(argv[1], "r"); 147: if (in_fp == NULL) { 148: fprintf(stderr, "%s not found.\n", argv[1]); 149: exit(1); 150: } 151: } else { 152: fprintf(stderr, "Usage:%s filename\n", argv[0]); 153: exit(1); 154: } 155: 156: read_source(in_fp); 157: interpret(); 158: 159: return 0; 160: }
Windows�����¹Է����Ϥ����顣
�¤Ͼ�ǵ󤲤�hello, world.�ϡ� K.INABA����Υڡ����Υ������򸵤ˤ�����ΤʤΤǤ����� �䤬��ʬ�ǽ񤤤�hello, world.(K&R�������˽�������å�������ʸ���ˤ���)�� �����ʤ�ޤ�����
���ݤݤݤݤݤݤݤݤݤݤݤݤݤݤݤݤ��Ƥ�ΤФܡ���ݤݤݤݤݤݤ��ӤʤФӤ����� �Фܡ���ݤݤݤݤݤݤݤݤݡ���ӤӤӤݡ���ݤݤݤݤݤݤݤݡ���ݡ��� �ݤݤݤݡ��󤹤ݤݤݤݤݤݤݤݤݤݤݤݤݤݤݤݤ��Ƥ�Τ��ݤݤФܡ���ӤʤФӤ����� ���ݤݤݤݤݤݤݤݤݤݤݤݤݡ���ӤӤӤӤӤӤӤӤӤӤӤӤݡ��� �Фܡ���Фܡ���ݤݤݤݤݤݤݤݤݡ���ӤӤӤӤӤӤӤӤݡ���ݤݤݤݡ��� �ӤӤӤӤӤӤݡ���ӤӤӤӤӤӤӤӤݡ��󤹤��ݤݤݤݤݤݤݤݤݤݤݤݤݤݤݡ���
���ޤ������ä��ϸ�Ⱦ��ñĴ�ǡ�
�Ȥ����ǡ� �¤ΤȤ���Brainfuck�Υȡ�������ִ���������Ȥ����Τ��̤˻�����ϤǤϤʤ��� ˨���Ȥ����������Ȥ������ʸ����Τ�2ch��ͳ�Ǹ����������Ȥ�����ޤ��� (�Ƕ�õ�������ɸ��Ĥ���ޤ���Ǥ���)��¾�ˤ�Ʊ�ͤλ�ߤϤ����������뤳�ȤǤ��礦��
�ޤ����ä��������Ϥ��äƤߤ����ȤǤ����� �Ѵ��ơ��֥��ʲ��Τ褦�˺����ؤ���ȡ�
static Conv st_conv[] = { {'>', "��"}, {'<', "���פ�!!"}, {'+', "��"}, {'-', "�ۤ���"}, {'.', "�ҤǤ֤�"}, {',', "�����Ϥ⤦���Ǥ��� "}, {'[', "�����!!"}, {']', "���٤�!!"}, };
�åµï¿½ï¿½hello, world.�פϤ����ʤ�ޤ���
���������������������������������� �����!! ���פ�!! ���������������ۤ��� ���٤�!! ���פ�!! ���������������� �ҤǤ֤� �ۤ����ۤ����ۤ��� �ҤǤ֤� �������������� �ҤǤ֤� �ҤǤ֤� ������ �ҤǤ֤� ���������������������������������� �����!! ������ ���פ�!! �ۤ��� ���٤�!! �������������������������� �ҤǤ֤� �ۤ����ۤ����ۤ����ۤ����ۤ����ۤ����ۤ����ۤ����ۤ����ۤ����ۤ����ۤ��� �ҤǤ֤� ���פ�!! ���פ�!! ���������������� �ҤǤ֤� �ۤ����ۤ����ۤ����ۤ����ۤ����ۤ����ۤ����ۤ��� �ҤǤ֤� ������ �ҤǤ֤� �ۤ����ۤ����ۤ����ۤ����ۤ����ۤ��� �ҤǤ֤� �ۤ����ۤ����ۤ����ۤ����ۤ����ۤ����ۤ����ۤ��� �ҤǤ֤� �������������������������������� �ҤǤ֤�
�ޤ����ʲ��Τ褦���֤�������С�
static Conv st_conv[] = { {'>', "�դ뤨�뤾�ϡ���!"}, {'<', "dz���Ĥ���ۤɥҡ���!!"}, {'+', "����"}, {'-', "̵��"}, {'.', "��!"}, {',', "��������"}, {'[', "���ޤ��μ��Υ���դϡ�"}, {']', "�פȤ���!"}, };
�����ʤ�ޤ���
�դ뤨�뤾�ϡ���! ���饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�� ���ޤ��μ��Υ���դϡ�dz���Ĥ���ۤɥҡ���!!���饪�饪�饪�饪�饪�� �դ뤨�뤾�ϡ���!̵�̡פȤ���! dz���Ĥ���ۤɥҡ���!!���饪�饪�饪�饪�饪�饪�饪�饡! ̵��̵��̵�̥�! ���饪�饪�饪�饪�饪�饪�饡!��! ���饪�饪�饡!�դ뤨�뤾�ϡ���! ���饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�� ���ޤ��μ��Υ���դϡ֤դ뤨�뤾�ϡ���!���饪��dz���Ĥ���ۤɥҡ���!!̵�̡פȤ���! �դ뤨�뤾�ϡ���!���饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饡! ̵��̵��̵��̵��̵��̵��̵��̵��̵��̵��̵��̵�̥�! dz���Ĥ���ۤɥҡ���!!dz���Ĥ���ۤɥҡ���!!���饪�饪�饪�饪�饪�饪�饪�饡! ̵��̵��̵��̵��̵��̵��̵��̵�̥�! ���饪�饪�饡! ̵��̵��̵��̵��̵��̵�̥�! ̵��̵��̵��̵��̵��̵��̵��̵�̥�! �դ뤨�뤾�ϡ���! �դ뤨�뤾�ϡ���! ���饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饪�饡!
��BF-Basic'n�פ�����ܥڡ����ǵ󤲤����٤ƤΥץ������� �Ѵ��ơ��֥�ΤΥ饤���󥹤ϡ� NYSL Version 0.9982�Ȥ��ޤ���
�����ۤ���Τ⡢�Ѵ��ơ��֥�򺹤��ؤ��Ƽ������Ȥ��Ƹ�������Τ� �����˼�ͳ�Ǥ���
���λ��� | �ҤȤľ�Υڡ�������� | �ȥåץڡ��������