Execute Brain****/ALGOL 68: Difference between revisions
Content added Content deleted
m (foundartion page....) |
m (Not a curly bracket, nor a single BEGIN ~ END in sight... now imagine that! :-)) |
||
Line 1: | Line 1: | ||
{{implementation|ALGOL 68}}{{collection|RCBF}} |
|||
An implementation of BF for Rosetta Code. |
An implementation of BF for Rosetta Code. |
||
Revision as of 10:23, 1 December 2007
Execute Brain****/ALGOL 68 is an implementation of ALGOL 68.
Other implementations of ALGOL 68.
Execute Brain****/ALGOL 68 is part of RCBF. You may find other members of RCBF at Category:RCBF.
An implementation of BF for Rosetta Code.
MODE BYTE = SHORT SHORT SHORT INT; MODE CADDR = BYTE; # code address # MODE OPCODE = BYTE; OPCODE nop = 0; MODE DADDR = BYTE; # data address # MODE DATA = BYTE; DATA zero = 0; PROC run = ([] OPCODE code list)VOID:( [-255:255]DATA data list; # finite data space # FOR i FROM LWB data list TO UPB data list DO data list[i] := zero OD; DADDR data addr := ( UPB data list + LWB data list ) OVER 2; CADDR code addr := LWB code list; [0:127]OPCODE assembler; # 7 bit ascii only # STRING op code list="><+-.,[]"; []PROC VOID op list= []PROC VOID( # ? # VOID: SKIP, # NOP # # > # VOID: data addr +:= 1, # < # VOID: data addr -:= 1, # + # VOID: data list[data addr] +:= 1, # - # VOID: data list[data addr] -:= 1, # . # VOID: print(REPR data list[data addr]), # , # VOID: data list[data addr]:=ABS read char, # [ # VOID: IF data list[data addr] = zero THEN FOR new addr FROM code addr + 1 WHILE code addr := new addr; code list[new addr] /= ABS "]" DO SKIP OD FI, # ] # VOID: IF data list[data addr] /= zero THEN FOR new addr FROM code addr - 1 BY -1 WHILE code addr := new addr; code list[new addr] /= ABS "[" DO SKIP OD FI )[:@0]; FOR op TO UPB assembler DO assembler[op] := nop OD; # insert NOP # FOR op TO UPB op code list DO assembler[ABS op code list[op]] := op OD; WHILE code addr <= UPB code list DO op list[ABS assembler[ABS code list[code addr]]]; code addr +:= 1 OD ); STRING code list := "++++++[>+++++++++++<-]>-."; # print the ascii letter A # [UPB code list]BYTE byte code list; # convert to bytes # FOR i TO UPB code list DO byte code list[i] := ABS code list[i] OD; run(byte code list)