Skip to content

Instantly share code, notes, and snippets.

@koturn
Last active January 8, 2017 07:58
Show Gist options
  • Save koturn/7793c93af60ac54b31d2dd287e30d203 to your computer and use it in GitHub Desktop.
Save koturn/7793c93af60ac54b31d2dd287e30d203 to your computer and use it in GitHub Desktop.
まずは Hello, world! からだよね
func main()
var bfSource: []char :: "+++++++++[>++++++++>+++++++++++>+++++<<<-]>.>++.+++++++..+++.>-.------------.<++++++++.--------.+++.------.--------.>+."
var pc: int
var hp: int
var heap : []bit8 :: #[65536]bit8
var reader: @InputReader :: #@InputReader
while(pc < ^bfSource)
switch(bfSource[pc])
case '+'
do heap[hp] :+ 1b8
case '-'
do heap[hp] :- 1b8
case '>'
do hp :+ 1
case '<'
do hp :- 1
case '.'
do cui@print((heap[hp] $ char).toStr())
case ','
do heap[hp] :: reader.getchar() $ bit8
case '['
if(heap[hp] = 0b8)
do pc :+ 1
var depth: int :: 1
while(depth > 0)
switch(bfSource[pc])
case '['
do depth :+ 1
case ']'
do depth :- 1
end switch
do pc :+ 1
end while
do pc :- 1
end if
case ']'
if(heap[hp] <> 0b8)
do pc :- 1
var depth: int :: 1
while(depth > 0)
switch(bfSource[pc])
case '['
do depth :- 1
case ']'
do depth :+ 1
end switch
do pc :- 1
end while
do pc :+ 1
end if
end switch
do pc :+ 1
end while
do cui@print("\n")
end func
{getchar()の模倣のためのクラス}
class InputReader()
var buffer: []char
var bufferPtr: int
*func ctor()
do me.buffer :: ""
do me.bufferPtr :: 0
end func
+func getchar(): char
if(me.bufferPtr = ^me.buffer)
do me.buffer :: cui@input() ~ "\n"
do me.bufferPtr :: 0
end if
var ch: char :: me.buffer[me.bufferPtr]
do me.bufferPtr :+ 1
ret ch
end func
end class
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment