summaryrefslogtreecommitdiff
path: root/test/ken/rob2.go
diff options
context:
space:
mode:
Diffstat (limited to 'test/ken/rob2.go')
-rw-r--r--test/ken/rob2.go272
1 files changed, 0 insertions, 272 deletions
diff --git a/test/ken/rob2.go b/test/ken/rob2.go
deleted file mode 100644
index af63e4d9f..000000000
--- a/test/ken/rob2.go
+++ /dev/null
@@ -1,272 +0,0 @@
-// $G $D/$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
-
-const nilchar = 0;
-
-type Atom struct {
- str string;
- integer int;
- next *Slist; /* in hash bucket */
-}
-
-type List struct {
- car *Slist;
- cdr*Slist;
-}
-
-type Slist struct {
- isatom bool;
- isstring bool;
- //union {
- atom Atom;
- list List;
- //} u;
-
-}
-
-func (this *Slist) Car() *Slist {
- return this.list.car;
-}
-
-func (this *Slist) Cdr() *Slist {
- return this.list.cdr;
-}
-
-func (this *Slist) String() string {
- return this.atom.str;
-}
-
-func (this *Slist) Integer() int {
- return this.atom.integer;
-}
-
-func (slist *Slist) Free() {
- if slist == nil {
- return;
- }
- if slist.isatom {
-// free(slist.String());
- } else {
- slist.Car().Free();
- slist.Cdr().Free();
- }
-// free(slist);
-}
-
-//Slist* atom(byte *s, int i);
-
-var token int;
-var peekc int = -1;
-var lineno int32 = 1;
-
-var input string;
-var inputindex int = 0;
-var tokenbuf [100]byte;
-var tokenlen int = 0;
-
-const EOF int = -1;
-
-func main() {
- var list *Slist;
-
- OpenFile();
- for ;; {
- list = Parse();
- if list == nil {
- break;
- }
- list.Print();
- list.Free();
- break;
- }
-}
-
-func (slist *Slist) PrintOne(doparen bool) {
- if slist == nil {
- return;
- }
- if slist.isatom {
- if slist.isstring {
- print(slist.String());
- } else {
- print(slist.Integer());
- }
- } else {
- if doparen {
- print("(" );
- }
- slist.Car().PrintOne(true);
- if slist.Cdr() != nil {
- print(" ");
- slist.Cdr().PrintOne(false);
- }
- if doparen {
- print(")");
- }
- }
-}
-
-func (slist *Slist) Print() {
- slist.PrintOne(true);
- print("\n");
-}
-
-func Get() int {
- var c int;
-
- if peekc >= 0 {
- c = peekc;
- peekc = -1;
- } else {
- c = int(input[inputindex]);
- inputindex++;
- if c == '\n' {
- lineno = lineno + 1;
- }
- if c == nilchar {
- inputindex = inputindex - 1;
- c = EOF;
- }
- }
- return c;
-}
-
-func WhiteSpace(c int) bool {
- return c == ' ' || c == '\t' || c == '\r' || c == '\n';
-}
-
-func NextToken() {
- var i, c int;
-
- tokenbuf[0] = nilchar; // clear previous token
- c = Get();
- for WhiteSpace(c) {
- c = Get();
- }
- switch c {
- case EOF:
- token = EOF;
- case '(', ')':
- token = c;
- break;
- default:
- for i = 0; i < 100 - 1; { // sizeof tokenbuf - 1
- tokenbuf[i] = byte(c);
- i = i + 1;
- c = Get();
- if c == EOF {
- break;
- }
- if WhiteSpace(c) || c == ')' {
- peekc = c;
- break;
- }
- }
- if i >= 100 - 1 { // sizeof tokenbuf - 1
- panic("atom too long\n");
- }
- tokenlen = i;
- tokenbuf[i] = nilchar;
- if '0' <= tokenbuf[0] && tokenbuf[0] <= '9' {
- token = '0';
- } else {
- token = 'A';
- }
- }
-}
-
-func Expect(c int) {
- if token != c {
- print("parse error: expected ", c, "\n");
- panic("parse");
- }
- NextToken();
-}
-
-// Parse a non-parenthesized list up to a closing paren or EOF
-func ParseList() *Slist {
- var slist, retval *Slist;
-
- slist = new(Slist);
- slist.list.car = nil;
- slist.list.cdr = nil;
- slist.isatom = false;
- slist.isstring = false;
-
- retval = slist;
- for ;; {
- slist.list.car = Parse();
- if token == ')' || token == EOF { // empty cdr
- break;
- }
- slist.list.cdr = new(Slist);
- slist = slist.list.cdr;
- }
- return retval;
-}
-
-func atom(i int) *Slist { // BUG: uses tokenbuf; should take argument)
- var slist *Slist;
-
- slist = new(Slist);
- if token == '0' {
- slist.atom.integer = i;
- slist.isstring = false;
- } else {
- slist.atom.str = string(tokenbuf[0:tokenlen]);
- slist.isstring = true;
- }
- slist.isatom = true;
- return slist;
-}
-
-func atoi() int { // BUG: uses tokenbuf; should take argument)
- var v int = 0;
- for i := 0; i < tokenlen && '0' <= tokenbuf[i] && tokenbuf[i] <= '9'; i = i + 1 {
- v = 10 * v + int(tokenbuf[i] - '0');
- }
- return v;
-}
-
-func Parse() *Slist {
- var slist *Slist;
-
- if token == EOF || token == ')' {
- return nil;
- }
- if token == '(' {
- NextToken();
- slist = ParseList();
- Expect(')');
- return slist;
- } else {
- // Atom
- switch token {
- case EOF:
- return nil;
- case '0':
- slist = atom(atoi());
- case '"', 'A':
- slist = atom(0);
- default:
- slist = nil;
- print("unknown token: ", token, "\n");
- }
- NextToken();
- return slist;
- }
- return nil;
-}
-
-func OpenFile() {
- input = "(defn foo (add 12 34))\n\x00";
- inputindex = 0;
- peekc = -1; // BUG
- NextToken();
-}