OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [gcc/] [testsuite/] [go.test/] [test/] [turing.go] - Rev 700

Compare with Previous | Blame | View Log

// $G $F.go && $L $F.$A && ./$A.out

// Copyright 2009 The Go Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

package main

// brainfuck

var p, pc int
var a [30000]byte

const prog = "++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.!"

func scan(dir int) {
        for nest := dir; dir*nest > 0; pc += dir {
                switch prog[pc+dir] {
                case ']':
                        nest--
                case '[':
                        nest++
                }
        }
}

func main() {
        r := ""
        for {
                switch prog[pc] {
                case '>':
                        p++
                case '<':
                        p--
                case '+':
                        a[p]++
                case '-':
                        a[p]--
                case '.':
                        r += string(a[p])
                case '[':
                        if a[p] == 0 {
                                scan(1)
                        }
                case ']':
                        if a[p] != 0 {
                                scan(-1)
                        }
                default:
                        if r != "Hello World!\n" {
                                panic(r)
                        }
                        return
                }
                pc++
        }
}

Compare with Previous | Blame | View Log

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.