changeset 0:6bf66c125dbc

Initial revision
author kono
date Fri, 05 Nov 2004 14:07:59 +0900
parents
children 2d043d7fef20 1ee4fa9364c7
files .DS_Store .gdbinit Makefile calc.c calc.s calc.s.gcc calc.s.rs6k compile-m68k.c compile.c ending.09 ending.rs6k error.txt input.txt intro.rs6k output.s project s-calc-r.c s-calc.c s-calc.s s-code-09.c s-code-intel-r.c s-code-intel.c s-code-intel.c.3.1 s-code-m68k.c s-code-print.c s-code-rs6k-r.c s-code-rs6k.c s-code-sparc.c s-compile.c s-compile.h s-input.txt s-prefix.c s-token.c s-tree-compile.c s-tree.c s-yacc.y test0.c test0.s tmp.pl tmptmp token.c
diffstat 41 files changed, 9612 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
Binary file .DS_Store has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/.gdbinit	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,4 @@
+b expr
+b aexpr
+b mexpr
+b term
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/Makefile	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,175 @@
+TEST = s-intel-r
+
+CC = gcc
+CFLAGS = -g 
+# COMPILER = s-compile.o s-token.o
+# COMPILER = s-tree-compile.o s-token.o
+COMPILER = s-yacc.o s-token.o
+
+TARGET =  token calc  s-calc s-prefix s-rpn s-09 s-intel s-intel-r s-sparc s-rs6k s-m68k
+all:     $(TARGET)
+
+token:     token.o s-token.o
+	$(CC) $(CFLAGS)  -o $@ $^
+
+calc:  calc.c
+	$(CC) $(CFLAGS)  -o $@ $^
+
+s-calc:   s-calc.c s-token.o
+	$(CC) $(CFLAGS)  -o $@ $^
+
+s-tree:   s-tree.c s-token.o
+	$(CC) $(CFLAGS)  -o $@ $^
+
+s-prefix:      s-prefix.o s-code-print.o  s-token.o
+	$(CC) $(CFLAGS)  -o $@ $^
+s-rpn:      $(COMPILER) s-code-print.o  
+	$(CC) $(CFLAGS)  -o $@ $^
+s-09:      $(COMPILER) s-code-09.o  
+	$(CC) $(CFLAGS)  -o $@ $^
+s-intel:   $(COMPILER) s-code-intel.o  
+	$(CC) $(CFLAGS)  -o $@ $^
+s-intel-r:   $(COMPILER) s-code-intel-r.o  
+	$(CC) $(CFLAGS)  -o $@ $^
+s-sparc:    $(COMPILER) s-code-sparc.o  
+	$(CC) $(CFLAGS)  -o $@ $^
+s-rs6k:    $(COMPILER) s-code-rs6k.o  
+	$(CC) $(CFLAGS)  -o $@ $^
+s-rs6k-r:    $(COMPILER) s-code-rs6k-r.o  
+	$(CC) $(CFLAGS)  -o $@ $^
+s-m68k:    $(COMPILER) s-code-m68k.o  
+	$(CC) $(CFLAGS)  -o $@ $^
+s-yacc.o: 	s-yacc.y
+	$(YACC) s-yacc.y
+	mv y.tab.c s-yacc.c
+	$(CC) -c s-yacc.c
+
+test:     $(TEST)
+	./$(TEST) < s-input.txt > s-output.s
+	$(CC) s-output.s
+	./a.out
+
+MC09EMU = ../emulator/util09/v09
+MC09ASM = ../emulator/util09/a09
+test-09:    s-09
+	./s-09 < s-input.txt > s-output.a09
+	$(MC09ASM) s-output.a09
+	$(MC09EMU) s-output
+
+clean:
+	rm -f *.o  $(TARGET) a.out s-output.s s-output.a09 s-output 
+	rm -f s-yacc.c y.tab.c y.tab.h
+
+# DO NOT DELETE
+
+calc.o: /usr/include/stdio.h /usr/include/sys/types.h
+calc.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+calc.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+calc.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+calc.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+compile-m68k.o: /usr/include/stdio.h /usr/include/sys/types.h
+compile-m68k.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+compile-m68k.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+compile-m68k.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+compile-m68k.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+compile.o: /usr/include/stdio.h /usr/include/sys/types.h
+compile.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+compile.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+compile.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+compile.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-calc-r.o: /usr/include/stdio.h /usr/include/sys/types.h
+s-calc-r.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-calc-r.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-calc-r.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-calc-r.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-calc.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-calc.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-calc.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-calc.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-calc.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-code-09.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-code-09.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-code-09.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-code-09.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-code-09.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-code-intel-r.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-code-intel-r.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-code-intel-r.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-code-intel-r.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-code-intel-r.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-code-intel.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-code-intel.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-code-intel.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-code-intel.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-code-intel.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-code-m68k.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-code-m68k.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-code-m68k.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-code-m68k.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-code-m68k.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-code-print.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-code-print.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-code-print.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-code-print.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-code-print.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-code-rs6k-r.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-code-rs6k-r.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-code-rs6k-r.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-code-rs6k-r.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-code-rs6k-r.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-code-rs6k.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-code-rs6k.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-code-rs6k.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-code-rs6k.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-code-rs6k.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-code-sparc.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-code-sparc.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-code-sparc.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-code-sparc.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-code-sparc.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-compile.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-compile.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-compile.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-compile.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-compile.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-prefix.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-prefix.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-prefix.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-prefix.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-prefix.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-token.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-token.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-token.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-token.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-token.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-tree-compile.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-tree-compile.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-tree-compile.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-tree-compile.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-tree-compile.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-tree.o: /usr/include/stdio.h /usr/include/sys/types.h
+s-tree.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-tree.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-tree.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-tree.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-yacc.o: /usr/include/stdlib.h /usr/include/machine/ansi.h
+s-yacc.o: /usr/include/ppc/ansi.h /usr/include/machine/types.h
+s-yacc.o: /usr/include/ppc/types.h /usr/include/sys/cdefs.h s-compile.h
+s-yacc.o: /usr/include/stdio.h /usr/include/sys/types.h
+s-yacc.o: /usr/include/sys/appleapiopts.h /usr/include/machine/endian.h
+s-yacc.o: /usr/include/ppc/endian.h
+token.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+token.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+token.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+token.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+token.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+y.tab.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+y.tab.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+y.tab.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+y.tab.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+y.tab.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
+s-yacc.o: s-compile.h /usr/include/stdio.h /usr/include/sys/types.h
+s-yacc.o: /usr/include/sys/appleapiopts.h /usr/include/sys/cdefs.h
+s-yacc.o: /usr/include/machine/types.h /usr/include/ppc/types.h
+s-yacc.o: /usr/include/machine/ansi.h /usr/include/ppc/ansi.h
+s-yacc.o: /usr/include/machine/endian.h /usr/include/ppc/endian.h
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calc.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,318 @@
+/*
+    Simple Calculator
+	$Id$
+ */
+
+#include <stdio.h>
+
+char *ptr,*last_ptr;
+int  value,lvalue;
+int  last_token;
+int  variable[48];
+
+static int  expr();
+static int  aexpr();
+static int  mexpr();
+static int  term();
+
+
+#define T_EQUAL	  (0x100|'=')
+#define T_NEQUAL  (0x100|'!')
+#define T_LSHIFT  (0x100|'<')
+#define T_RSHIFT  (0x100|'>')
+
+static void
+line_skip()
+{
+    while(*ptr++);
+    last_ptr = ptr;  
+    last_token = EOF;
+}
+
+static void
+error(description)
+char *description;
+{
+    fprintf(stderr,"%s on %s\n",description,last_ptr);
+    line_skip();
+}
+
+static int
+token()
+{
+    int c,d;
+
+    last_ptr = ptr;  /* for error position */
+    c= *ptr;
+    while(c<=' ' && c) {
+	c = *++ptr;
+    }
+    if(!c) {
+	last_token = EOF;
+	return last_token;
+    }
+    ptr++;
+    if ('/'==c && ('/'== *ptr || '*'== *ptr)) {       /* comment */ 
+	line_skip();
+	return EOF;
+    }
+    if('1'<=c && c<='9') {     /* Decimal */
+	d = c-'0';
+	while(c= *ptr++) {
+	    if('0'<=c && c<='9') {
+		d = d*10 + (c - '0');
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if ('0'==c && 'x'== *ptr) {       /* Hex */
+	ptr++;
+	d = 0;
+	while(c= *ptr++) {
+	    if('0'<=c && c<='9') {
+		d = d*16 + (c - '0');
+	    } else if('a'<=c && c<='f') {
+		d = d*16 + (c - 'a' + 10);
+	    } else if('A'<=c && c<='F') {
+		d = d*16 + (c - 'a' + 10);
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if ('0'==c) {       /* Octal */
+	d = c-'0';
+	while(c= *ptr++) {
+	    if('0'<=c && c<='7') {
+		d = d*8 + (c - '0');
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if ('\''==c) {      /* Ascii */
+	d = 0;
+	while(c= *ptr++) {
+	    if('\''!=c && c<=0x7f) {
+		d = d*256 + c;
+	    } else if(c>=0x80 && *ptr) {
+		d = d*256*256 + c*256 + *ptr++;
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if (('a'<=c && c<='z')  ||   /* variable */
+		('A'<=c && c<='Z')) {
+	value = ((c>'Z')?c-'a'+'Z'-'A'+1:c-'A');
+	last_token = 'v';
+	return last_token;
+    } else if ('='==c && '='== *ptr) {       /* equal */
+	ptr++;
+	last_token = T_EQUAL;
+	return last_token;
+    } else if ('!'==c && '='== *ptr) {       /* equal */
+	ptr++;
+	last_token = T_NEQUAL;
+    } else if ('<'==c && '<'== *ptr) {       /* shift */
+	ptr++;
+	last_token = T_LSHIFT;
+	return last_token;
+    } else if ('>'==c && '>'== *ptr) {       /* shift */
+	ptr++;
+	last_token = T_RSHIFT;
+	return last_token;
+    } else {
+	last_token = c;
+	return last_token;
+	return c;
+    }
+}
+
+static int
+expr()
+{
+    int d,assign;
+
+    d = aexpr();
+    assign = lvalue;
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '<': 
+	    d = (d < aexpr()); 
+	    break;
+	case '>': 
+	    d = (d > aexpr()); 
+	    break;
+	case T_EQUAL: 
+	    d = (d == aexpr()); 
+	    break;
+	case T_NEQUAL: 
+	    d = (d != aexpr()); 
+	    break;
+	case T_LSHIFT: 
+	    d <<= aexpr(); 
+	    break;
+	case T_RSHIFT: 
+	    d >>= aexpr(); 
+	    break;
+	case '?': 
+	    {
+		int true;
+		true = expr(); 
+		if(last_token != ':') {
+		    error("? expression not terminated with :");
+		    return true;
+		} 
+		if(d) {
+		    expr(); 
+		    return true;
+		} else {
+		    return expr(); 
+		}
+	    }
+	    break;
+	case '=': 
+	    if(assign>=0) {
+		d = expr(); 
+		variable[assign] = d;
+		return d;
+	    } else {
+		error("Bad assignment");
+		return 0;
+	    }
+	    break;
+	case ':': 
+	case ')': 
+	    return d;
+	default:
+	    error("Bad expression");
+	    token();
+	}
+    }
+    last_token = EOF;
+    return d;
+}
+
+static int
+aexpr()
+{
+    int d;
+
+    d = mexpr();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '^': 
+	    d ^= mexpr(); 
+	    break;
+	case '|': 
+	    d |= mexpr(); 
+	    break;
+	case '&': 
+	    d &= mexpr(); 
+	    break;
+	case '-': 
+	    d -= mexpr(); 
+	    break;
+	case '+': 
+	    d += mexpr(); 
+	    break;
+	default:
+	    return d;
+	}
+    }
+    return d;
+}
+
+static int
+mexpr()
+{
+    int d;
+
+    d = term();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '*': 
+	    d *= term(); 
+	    break;
+	case '/': 
+	    d /= term(); 
+	    break;
+	case '%': 
+	    d %= term(); 
+	    break;
+	case '^': 
+	    d ^= term(); 
+	    break;
+	default:
+	    return d;
+	}
+    }
+    return d;
+}
+
+static int term()
+{
+    int d;
+
+    lvalue= -1;
+    token();
+    if(last_token==EOF) {
+	error("Term expected");
+    }
+    switch(last_token) {
+    case '0':
+	d = value;
+	token();
+	return d;
+    case 'v':
+	d = lvalue = value;
+	token();
+	return variable[d];
+    case '-':
+	return - term();
+    case '!':
+	return ! term();
+    case '(':
+	d = expr();
+	if(last_token != ')') {
+	    error("Unbalanced parenthsis");
+	} 
+	token(); 
+	return d;
+    default:
+	token();
+	error("Unknown term");
+	return 0;
+    }
+}
+
+int
+main(int ac,char *av[]) 
+{
+    int d;
+    char buf[BUFSIZ];
+
+    while (fgets(buf,BUFSIZ,stdin)) {
+	ptr = buf;
+	d = expr();
+	printf("%s = 0x%08x = %d\n",buf,d,d);
+	fflush(stdout);
+    }
+    return 0;
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calc.s	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,982 @@
+.text
+	.align 2
+_line_skip:
+	mflr r0
+	bcl 20,31,L1$pb
+L1$pb:
+	mflr r10
+	mtlr r0
+	addis r9,r10,ha16(L_ptr$non_lazy_ptr-L1$pb)
+	lwz r11,lo16(L_ptr$non_lazy_ptr-L1$pb)(r9)
+L2:
+	lwz r9,0(r11)
+	lbz r0,0(r9)
+	addi r9,r9,1
+	stw r9,0(r11)
+	cmpwi cr0,r0,0
+	bne+ cr0,L2
+	addis r9,r10,ha16(L_ptr$non_lazy_ptr-L1$pb)
+	lwz r9,lo16(L_ptr$non_lazy_ptr-L1$pb)(r9)
+	lwz r0,0(r9)
+	addis r9,r10,ha16(L_last_ptr$non_lazy_ptr-L1$pb)
+	lwz r9,lo16(L_last_ptr$non_lazy_ptr-L1$pb)(r9)
+	stw r0,0(r9)
+	li r0,-1
+	addis r9,r10,ha16(L_last_token$non_lazy_ptr-L1$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L1$pb)(r9)
+	stw r0,0(r9)
+	blr
+.data
+.cstring
+	.align 2
+LC0:
+	.ascii "%s on %s\12\0"
+.text
+	.align 2
+_error:
+	mflr r0
+	stw r31,-4(r1)
+	stw r0,8(r1)
+	stwu r1,-80(r1)
+	bcl 20,31,L2$pb
+L2$pb:
+	mflr r31
+	mr r5,r3
+	addis r3,r31,ha16(L___sF$non_lazy_ptr-L2$pb)
+	lwz r3,lo16(L___sF$non_lazy_ptr-L2$pb)(r3)
+	addi r3,r3,176
+	addis r4,r31,ha16(LC0-L2$pb)
+	la r4,lo16(LC0-L2$pb)(r4)
+	addis r9,r31,ha16(L_last_ptr$non_lazy_ptr-L2$pb)
+	lwz r9,lo16(L_last_ptr$non_lazy_ptr-L2$pb)(r9)
+	lwz r6,0(r9)
+	bl L_fprintf$stub
+	bl _line_skip
+	lwz r0,88(r1)
+	addi r1,r1,80
+	mtlr r0
+	lwz r31,-4(r1)
+	blr
+	.align 2
+_token:
+	mflr r0
+	stw r31,-4(r1)
+	stw r0,8(r1)
+	stwu r1,-80(r1)
+	bcl 20,31,L3$pb
+L3$pb:
+	mflr r31
+	addis r9,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_ptr$non_lazy_ptr-L3$pb)(r9)
+	lwz r11,0(r9)
+	addis r9,r31,ha16(L_last_ptr$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_last_ptr$non_lazy_ptr-L3$pb)(r9)
+	stw r11,0(r9)
+	lbz r0,0(r11)
+	extsb r3,r0
+	cmpwi cr0,r3,32
+	bgt- cr0,L8
+	cmpwi cr0,r3,0
+	beq- cr0,L8
+	addis r9,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r11,lo16(L_ptr$non_lazy_ptr-L3$pb)(r9)
+L11:
+	lwz r9,0(r11)
+	addi r0,r9,1
+	stw r0,0(r11)
+	lbz r0,1(r9)
+	extsb r3,r0
+	cmpwi cr0,r3,32
+	bgt- cr0,L8
+	cmpwi cr0,r3,0
+	bne+ cr0,L11
+L8:
+	cmpwi cr0,r3,0
+	bne- cr0,L12
+	li r0,-1
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L3$pb)(r9)
+	stw r0,0(r9)
+	b L77
+L12:
+	addis r9,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_ptr$non_lazy_ptr-L3$pb)(r9)
+	lwz r11,0(r9)
+	addi r0,r11,1
+	stw r0,0(r9)
+	cmpwi cr0,r3,47
+	bne+ cr0,L13
+	lbz r0,1(r11)
+	extsb r0,r0
+	cmpwi cr0,r0,47
+	beq- cr0,L14
+	cmpwi cr0,r0,42
+	bne+ cr0,L13
+L14:
+	bl _line_skip
+L77:
+	li r3,-1
+	b L6
+L13:
+	addi r0,r3,-49
+	cmplwi cr0,r0,8
+	bgt- cr0,L15
+	addi r10,r3,-48
+	addis r11,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r11,lo16(L_ptr$non_lazy_ptr-L3$pb)(r11)
+	lwz r9,0(r11)
+	lbz r0,0(r9)
+	addi r9,r9,1
+	stw r9,0(r11)
+	extsb. r3,r0
+	beq- cr0,L48
+L21:
+	addi r0,r3,-48
+	cmplwi cr0,r0,9
+	bgt- cr0,L48
+	mulli r9,r10,10
+	add r9,r9,r3
+	addi r10,r9,-48
+	lwz r9,0(r11)
+	lbz r0,0(r9)
+	addi r9,r9,1
+	stw r9,0(r11)
+	extsb. r3,r0
+	bne+ cr0,L21
+	b L48
+L15:
+	cmpwi cr0,r3,48
+	bne+ cr0,L24
+	addis r9,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r8,lo16(L_ptr$non_lazy_ptr-L3$pb)(r9)
+	lwz r11,0(r8)
+	lbz r0,0(r11)
+	cmpwi cr0,r0,120
+	bne+ cr0,L24
+	addi r9,r11,1
+	stw r9,0(r8)
+	li r10,0
+	lbz r0,1(r11)
+	addi r9,r9,1
+	stw r9,0(r8)
+	extsb. r3,r0
+	beq- cr0,L48
+	mr r11,r8
+L34:
+	addi r0,r3,-48
+	cmplwi cr0,r0,9
+	bgt- cr0,L28
+	slwi r9,r10,4
+	add r9,r9,r3
+	addi r10,r9,-48
+	b L25
+L28:
+	addi r0,r3,-97
+	cmplwi cr0,r0,5
+	ble- cr0,L76
+	addi r0,r3,-65
+	cmplwi cr0,r0,5
+	bgt- cr0,L48
+L76:
+	slwi r9,r10,4
+	add r9,r9,r3
+	addi r10,r9,-87
+L25:
+	lwz r9,0(r11)
+	lbz r0,0(r9)
+	addi r9,r9,1
+	stw r9,0(r11)
+	extsb. r3,r0
+	bne+ cr0,L34
+	b L48
+L24:
+	cmpwi cr0,r3,48
+	bne+ cr0,L37
+	li r10,0
+	addis r11,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r11,lo16(L_ptr$non_lazy_ptr-L3$pb)(r11)
+	lwz r9,0(r11)
+	lbz r0,0(r9)
+	addi r9,r9,1
+	stw r9,0(r11)
+	extsb. r3,r0
+	beq- cr0,L48
+L43:
+	addi r0,r3,-48
+	cmplwi cr0,r0,7
+	bgt- cr0,L48
+	slwi r9,r10,3
+	add r9,r9,r3
+	addi r10,r9,-48
+	lwz r9,0(r11)
+	lbz r0,0(r9)
+	addi r9,r9,1
+	stw r9,0(r11)
+	extsb. r3,r0
+	bne+ cr0,L43
+	b L48
+L37:
+	cmpwi cr0,r3,39
+	bne+ cr0,L46
+	li r10,0
+	addis r11,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r11,lo16(L_ptr$non_lazy_ptr-L3$pb)(r11)
+	lwz r9,0(r11)
+	lbz r0,0(r9)
+	addi r9,r9,1
+	stw r9,0(r11)
+	extsb. r3,r0
+	beq- cr0,L48
+	addis r6,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	mr r7,r11
+L54:
+	cmpwi cr0,r3,39
+	beq- cr0,L50
+	cmpwi cr0,r3,127
+	bgt- cr0,L50
+	slwi r0,r10,8
+	add r10,r0,r3
+	b L47
+L50:
+	cmpwi cr0,r3,127
+	ble- cr0,L48
+	lwz r8,lo16(L_ptr$non_lazy_ptr-L3$pb)(r6)
+	lwz r11,0(r8)
+	lbz r0,0(r11)
+	extsb. r9,r0
+	beq- cr0,L48
+	slwi r0,r10,8
+	add r0,r0,r3
+	slwi r0,r0,8
+	add r10,r0,r9
+	addi r0,r11,1
+	stw r0,0(r8)
+L47:
+	lwz r9,0(r7)
+	lbz r0,0(r9)
+	addi r9,r9,1
+	stw r9,0(r7)
+	extsb. r3,r0
+	bne+ cr0,L54
+L48:
+	cmpwi cr0,r3,0
+	beq- cr0,L55
+	addis r11,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r11,lo16(L_ptr$non_lazy_ptr-L3$pb)(r11)
+	lwz r9,0(r11)
+	addi r9,r9,-1
+	stw r9,0(r11)
+L55:
+	addis r9,r31,ha16(L_value$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_value$non_lazy_ptr-L3$pb)(r9)
+	stw r10,0(r9)
+	li r0,48
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L3$pb)(r9)
+	stw r0,0(r9)
+	li r3,48
+	b L6
+L46:
+	addi r0,r3,-97
+	cmplwi cr0,r0,25
+	ble- cr0,L58
+	addi r0,r3,-65
+	cmplwi cr0,r0,25
+	bgt- cr0,L57
+L58:
+	addi r0,r3,-71
+	cmpwi cr0,r3,90
+	bgt- cr0,L60
+	addi r0,r3,-65
+L60:
+	addis r9,r31,ha16(L_value$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_value$non_lazy_ptr-L3$pb)(r9)
+	stw r0,0(r9)
+	li r0,118
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L3$pb)(r9)
+	stw r0,0(r9)
+	li r3,118
+	b L6
+L57:
+	cmpwi cr0,r3,61
+	bne+ cr0,L62
+	addis r9,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r11,lo16(L_ptr$non_lazy_ptr-L3$pb)(r9)
+	lwz r9,0(r11)
+	lbz r0,0(r9)
+	cmpwi cr0,r0,61
+	bne+ cr0,L62
+	addi r0,r9,1
+	stw r0,0(r11)
+	li r0,317
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L3$pb)(r9)
+	stw r0,0(r9)
+	li r3,317
+	b L6
+L62:
+	cmpwi cr0,r3,33
+	bne+ cr0,L64
+	addis r9,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_ptr$non_lazy_ptr-L3$pb)(r9)
+	lwz r9,0(r9)
+	lbz r0,0(r9)
+	cmpwi cr0,r0,61
+	beq- cr0,L70
+L64:
+	cmpwi cr0,r3,60
+	bne+ cr0,L66
+	addis r9,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r11,lo16(L_ptr$non_lazy_ptr-L3$pb)(r9)
+	lwz r9,0(r11)
+	lbz r0,0(r9)
+	cmpwi cr0,r0,60
+	bne+ cr0,L66
+	addi r0,r9,1
+	stw r0,0(r11)
+	li r0,316
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L3$pb)(r9)
+	stw r0,0(r9)
+	li r3,316
+	b L6
+L66:
+	cmpwi cr0,r3,62
+	bne+ cr0,L68
+	addis r9,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r11,lo16(L_ptr$non_lazy_ptr-L3$pb)(r9)
+	lwz r9,0(r11)
+	lbz r0,0(r9)
+	cmpwi cr0,r0,62
+	bne+ cr0,L68
+	addi r0,r9,1
+	stw r0,0(r11)
+	li r0,318
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L3$pb)(r9)
+	stw r0,0(r9)
+	li r3,318
+	b L6
+L68:
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L3$pb)(r9)
+	stw r3,0(r9)
+	b L6
+L70:
+	addis r11,r31,ha16(L_ptr$non_lazy_ptr-L3$pb)
+	lwz r11,lo16(L_ptr$non_lazy_ptr-L3$pb)(r11)
+	lwz r9,0(r11)
+	addi r9,r9,1
+	stw r9,0(r11)
+	li r0,289
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L3$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L3$pb)(r9)
+	stw r0,0(r9)
+L6:
+	lwz r0,88(r1)
+	addi r1,r1,80
+	mtlr r0
+	lwz r31,-4(r1)
+	blr
+.data
+.cstring
+	.align 2
+LC1:
+	.ascii "? expression not terminated with :\0"
+	.align 2
+LC2:
+	.ascii "Bad assignment\0"
+	.align 2
+LC3:
+	.ascii "Bad expression\0"
+.text
+	.align 2
+_expr:
+	mflr r0
+	stmw r28,-16(r1)
+	stw r0,8(r1)
+	stwu r1,-80(r1)
+	bcl 20,31,L4$pb
+L4$pb:
+	mflr r31
+	bl L_aexpr$stub
+	mr r30,r3
+	addis r9,r31,ha16(L_lvalue$non_lazy_ptr-L4$pb)
+	lwz r9,lo16(L_lvalue$non_lazy_ptr-L4$pb)(r9)
+	lwz r28,0(r9)
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L4$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L4$pb)(r9)
+	lwz r0,0(r9)
+	cmpwi cr0,r0,-1
+	beq- cr0,L108
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L4$pb)
+	lwz r29,lo16(L_last_token$non_lazy_ptr-L4$pb)(r9)
+L106:
+	lwz r0,0(r29)
+	cmpwi cr0,r0,62
+	beq- cr0,L86
+	bgt- cr0,L103
+	cmpwi cr0,r0,58
+	beq- cr0,L110
+	bgt- cr0,L104
+	cmpwi cr0,r0,41
+	beq- cr0,L110
+	b L101
+L104:
+	cmpwi cr0,r0,60
+	beq- cr0,L84
+	cmpwi cr0,r0,61
+	beq- cr0,L96
+	b L101
+L103:
+	cmpwi cr0,r0,316
+	beq- cr0,L90
+	bgt- cr0,L105
+	cmpwi cr0,r0,63
+	beq- cr0,L92
+	cmpwi cr0,r0,289
+	beq- cr0,L89
+	b L101
+L105:
+	cmpwi cr0,r0,317
+	beq- cr0,L88
+	cmpwi cr0,r0,318
+	beq- cr0,L91
+	b L101
+L84:
+	bl L_aexpr$stub
+	li r0,1
+	cmpw cr0,r30,r3
+	blt- cr0,L109
+	b L112
+L86:
+	bl L_aexpr$stub
+	li r0,1
+	cmpw cr0,r30,r3
+	bgt- cr0,L109
+L112:
+	li r0,0
+	b L109
+L88:
+	bl L_aexpr$stub
+	xor r30,r30,r3
+	subfic r0,r30,0
+	adde r30,r0,r30
+	b L80
+L89:
+	bl L_aexpr$stub
+	xor r30,r30,r3
+	addic r9,r30,-1
+	subfe r0,r9,r30
+L109:
+	mr r30,r0
+	b L80
+L90:
+	bl L_aexpr$stub
+	slw r30,r30,r3
+	b L80
+L91:
+	bl L_aexpr$stub
+	sraw r30,r30,r3
+	b L80
+L92:
+	bl _expr
+	mr r28,r3
+	lwz r0,0(r29)
+	cmpwi cr0,r0,58
+	beq- cr0,L93
+	addis r3,r31,ha16(LC1-L4$pb)
+	la r3,lo16(LC1-L4$pb)(r3)
+	bl _error
+	b L111
+L93:
+	cmpwi cr0,r30,0
+	beq- cr0,L94
+	bl _expr
+L111:
+	mr r3,r28
+	b L79
+L94:
+	bl _expr
+	b L79
+L96:
+	cmpwi cr0,r28,0
+	blt- cr0,L97
+	bl _expr
+	slwi r0,r28,2
+	addis r9,r31,ha16(L_variable$non_lazy_ptr-L4$pb)
+	lwz r9,lo16(L_variable$non_lazy_ptr-L4$pb)(r9)
+	stwx r3,r9,r0
+	b L79
+L97:
+	addis r3,r31,ha16(LC2-L4$pb)
+	la r3,lo16(LC2-L4$pb)(r3)
+	bl _error
+	li r3,0
+	b L79
+L101:
+	addis r3,r31,ha16(LC3-L4$pb)
+	la r3,lo16(LC3-L4$pb)(r3)
+	bl _error
+	bl _token
+L80:
+	lwz r0,0(r29)
+	cmpwi cr0,r0,-1
+	bne+ cr0,L106
+L108:
+	li r0,-1
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L4$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L4$pb)(r9)
+	stw r0,0(r9)
+L110:
+	mr r3,r30
+L79:
+	lwz r0,88(r1)
+	addi r1,r1,80
+	mtlr r0
+	lmw r28,-16(r1)
+	blr
+	.align 2
+_aexpr:
+	mflr r0
+	stmw r29,-12(r1)
+	stw r0,8(r1)
+	stwu r1,-80(r1)
+	bcl 20,31,L5$pb
+L5$pb:
+	mflr r31
+	bl L_mexpr$stub
+	mr r30,r3
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L5$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L5$pb)(r9)
+	lwz r0,0(r9)
+	cmpwi cr0,r0,-1
+	beq- cr0,L128
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L5$pb)
+	lwz r29,lo16(L_last_token$non_lazy_ptr-L5$pb)(r9)
+L126:
+	lwz r0,0(r29)
+	cmpwi cr0,r0,45
+	beq- cr0,L121
+	bgt- cr0,L125
+	cmpwi cr0,r0,38
+	beq- cr0,L120
+	cmpwi cr0,r0,43
+	beq+ cr0,L122
+	b L128
+L125:
+	cmpwi cr0,r0,94
+	beq- cr0,L118
+	cmpwi cr0,r0,124
+	beq+ cr0,L119
+	b L128
+L118:
+	bl L_mexpr$stub
+	xor r30,r30,r3
+	b L114
+L119:
+	bl L_mexpr$stub
+	or r30,r30,r3
+	b L114
+L120:
+	bl L_mexpr$stub
+	and r30,r30,r3
+	b L114
+L121:
+	bl L_mexpr$stub
+	subf r30,r3,r30
+	b L114
+L122:
+	bl L_mexpr$stub
+	add r30,r30,r3
+L114:
+	lwz r0,0(r29)
+	cmpwi cr0,r0,-1
+	bne+ cr0,L126
+L128:
+	mr r3,r30
+	lwz r0,88(r1)
+	addi r1,r1,80
+	mtlr r0
+	lmw r29,-12(r1)
+	blr
+	.align 2
+_mexpr:
+	mflr r0
+	stmw r29,-12(r1)
+	stw r0,8(r1)
+	stwu r1,-80(r1)
+	bcl 20,31,L6$pb
+L6$pb:
+	mflr r31
+	bl L_term$stub
+	mr r30,r3
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L6$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L6$pb)(r9)
+	lwz r0,0(r9)
+	cmpwi cr0,r0,-1
+	beq- cr0,L143
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L6$pb)
+	lwz r29,lo16(L_last_token$non_lazy_ptr-L6$pb)(r9)
+L141:
+	lwz r0,0(r29)
+	cmpwi cr0,r0,42
+	beq- cr0,L134
+	bgt- cr0,L140
+	cmpwi cr0,r0,37
+	beq+ cr0,L136
+	b L143
+L140:
+	cmpwi cr0,r0,47
+	beq- cr0,L135
+	cmpwi cr0,r0,94
+	beq+ cr0,L137
+	b L143
+L134:
+	bl L_term$stub
+	mullw r30,r30,r3
+	b L130
+L135:
+	bl L_term$stub
+	divw r30,r30,r3
+	b L130
+L136:
+	bl L_term$stub
+	divw r0,r30,r3
+	mullw r0,r0,r3
+	subf r30,r0,r30
+	b L130
+L137:
+	bl L_term$stub
+	xor r30,r30,r3
+L130:
+	lwz r0,0(r29)
+	cmpwi cr0,r0,-1
+	bne+ cr0,L141
+L143:
+	mr r3,r30
+	lwz r0,88(r1)
+	addi r1,r1,80
+	mtlr r0
+	lmw r29,-12(r1)
+	blr
+.data
+.cstring
+	.align 2
+LC4:
+	.ascii "Term expected\0"
+	.align 2
+LC5:
+	.ascii "Unbalanced parenthsis\0"
+	.align 2
+LC6:
+	.ascii "Unknown term\0"
+.text
+	.align 2
+_term:
+	mflr r0
+	stmw r30,-8(r1)
+	stw r0,8(r1)
+	stwu r1,-80(r1)
+	bcl 20,31,L7$pb
+L7$pb:
+	mflr r31
+	li r0,-1
+	addis r9,r31,ha16(L_lvalue$non_lazy_ptr-L7$pb)
+	lwz r9,lo16(L_lvalue$non_lazy_ptr-L7$pb)(r9)
+	stw r0,0(r9)
+	bl _token
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L7$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L7$pb)(r9)
+	lwz r0,0(r9)
+	cmpwi cr0,r0,-1
+	bne+ cr0,L145
+	addis r3,r31,ha16(LC4-L7$pb)
+	la r3,lo16(LC4-L7$pb)(r3)
+	bl _error
+L145:
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L7$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L7$pb)(r9)
+	lwz r9,0(r9)
+	cmpwi cr0,r9,48
+	beq- cr0,L147
+	bgt- cr0,L155
+	cmpwi cr0,r9,40
+	beq- cr0,L151
+	bgt- cr0,L156
+	cmpwi cr0,r9,33
+	beq- cr0,L150
+	b L153
+L156:
+	cmpwi cr0,r9,45
+	beq- cr0,L149
+	b L153
+L155:
+	cmpwi cr0,r9,118
+	beq- cr0,L148
+	b L153
+L147:
+	addis r9,r31,ha16(L_value$non_lazy_ptr-L7$pb)
+	lwz r9,lo16(L_value$non_lazy_ptr-L7$pb)(r9)
+	lwz r30,0(r9)
+	b L152
+L148:
+	addis r9,r31,ha16(L_value$non_lazy_ptr-L7$pb)
+	lwz r9,lo16(L_value$non_lazy_ptr-L7$pb)(r9)
+	lwz r0,0(r9)
+	addis r9,r31,ha16(L_lvalue$non_lazy_ptr-L7$pb)
+	lwz r9,lo16(L_lvalue$non_lazy_ptr-L7$pb)(r9)
+	stw r0,0(r9)
+	mr r30,r0
+	bl _token
+	slwi r0,r30,2
+	addis r9,r31,ha16(L_variable$non_lazy_ptr-L7$pb)
+	lwz r9,lo16(L_variable$non_lazy_ptr-L7$pb)(r9)
+	lwzx r0,r9,r0
+	b L144
+L149:
+	bl _term
+	neg r0,r3
+	b L144
+L150:
+	bl _term
+	subfic r9,r3,0
+	adde r0,r9,r3
+	b L144
+L151:
+	bl _expr
+	mr r30,r3
+	addis r9,r31,ha16(L_last_token$non_lazy_ptr-L7$pb)
+	lwz r9,lo16(L_last_token$non_lazy_ptr-L7$pb)(r9)
+	lwz r0,0(r9)
+	cmpwi cr0,r0,41
+	beq- cr0,L152
+	addis r3,r31,ha16(LC5-L7$pb)
+	la r3,lo16(LC5-L7$pb)(r3)
+	bl _error
+L152:
+	bl _token
+	mr r0,r30
+	b L144
+L153:
+	bl _token
+	addis r3,r31,ha16(LC6-L7$pb)
+	la r3,lo16(LC6-L7$pb)(r3)
+	bl _error
+	li r0,0
+L144:
+	mr r3,r0
+	lwz r0,88(r1)
+	addi r1,r1,80
+	mtlr r0
+	lmw r30,-8(r1)
+	blr
+.data
+.cstring
+	.align 2
+LC7:
+	.ascii "%s = 0x%08x = %d\12\0"
+.text
+	.align 2
+	.globl _main
+_main:
+	mflr r0
+	stmw r28,-16(r1)
+	stw r0,8(r1)
+	stwu r1,-1104(r1)
+	bcl 20,31,L8$pb
+L8$pb:
+	mflr r31
+	addis r29,r31,ha16(L___sF$non_lazy_ptr-L8$pb)
+	addis r9,r31,ha16(L_ptr$non_lazy_ptr-L8$pb)
+	lwz r28,lo16(L_ptr$non_lazy_ptr-L8$pb)(r9)
+	addi r30,r1,64
+	b L158
+L161:
+	stw r30,0(r28)
+	bl _expr
+	mr r6,r3
+	addis r3,r31,ha16(LC7-L8$pb)
+	la r3,lo16(LC7-L8$pb)(r3)
+	mr r4,r30
+	mr r5,r6
+	bl L_printf$stub
+	lwz r3,lo16(L___sF$non_lazy_ptr-L8$pb)(r29)
+	addi r3,r3,88
+	bl L_fflush$stub
+L158:
+	addi r3,r1,64
+	li r4,1024
+	lwz r5,lo16(L___sF$non_lazy_ptr-L8$pb)(r29)
+	bl L_fgets$stub
+	cmpwi cr0,r3,0
+	bne+ cr0,L161
+	li r3,0
+	lwz r0,1112(r1)
+	addi r1,r1,1104
+	mtlr r0
+	lmw r28,-16(r1)
+	blr
+.comm _ptr,4
+.comm _last_ptr,4
+.comm _value,4
+.comm _lvalue,4
+.comm _last_token,4
+.comm _variable,192
+.data
+.picsymbol_stub
+L_fflush$stub:
+	.indirect_symbol _fflush
+	mflr r0
+	bcl 20,31,L0$_fflush
+L0$_fflush:
+	mflr r11
+	addis r11,r11,ha16(L_fflush$lazy_ptr-L0$_fflush)
+	mtlr r0
+	lwz r12,lo16(L_fflush$lazy_ptr-L0$_fflush)(r11)
+	mtctr r12
+	addi r11,r11,lo16(L_fflush$lazy_ptr-L0$_fflush)
+	bctr
+.data
+.lazy_symbol_pointer
+L_fflush$lazy_ptr:
+	.indirect_symbol _fflush
+	.long dyld_stub_binding_helper
+.data
+.picsymbol_stub
+L_printf$stub:
+	.indirect_symbol _printf
+	mflr r0
+	bcl 20,31,L0$_printf
+L0$_printf:
+	mflr r11
+	addis r11,r11,ha16(L_printf$lazy_ptr-L0$_printf)
+	mtlr r0
+	lwz r12,lo16(L_printf$lazy_ptr-L0$_printf)(r11)
+	mtctr r12
+	addi r11,r11,lo16(L_printf$lazy_ptr-L0$_printf)
+	bctr
+.data
+.lazy_symbol_pointer
+L_printf$lazy_ptr:
+	.indirect_symbol _printf
+	.long dyld_stub_binding_helper
+.data
+.picsymbol_stub
+L_fgets$stub:
+	.indirect_symbol _fgets
+	mflr r0
+	bcl 20,31,L0$_fgets
+L0$_fgets:
+	mflr r11
+	addis r11,r11,ha16(L_fgets$lazy_ptr-L0$_fgets)
+	mtlr r0
+	lwz r12,lo16(L_fgets$lazy_ptr-L0$_fgets)(r11)
+	mtctr r12
+	addi r11,r11,lo16(L_fgets$lazy_ptr-L0$_fgets)
+	bctr
+.data
+.lazy_symbol_pointer
+L_fgets$lazy_ptr:
+	.indirect_symbol _fgets
+	.long dyld_stub_binding_helper
+.data
+.picsymbol_stub
+L_term$stub:
+	.indirect_symbol _term
+	mflr r0
+	bcl 20,31,L0$_term
+L0$_term:
+	mflr r11
+	addis r11,r11,ha16(L_term$lazy_ptr-L0$_term)
+	mtlr r0
+	lwz r12,lo16(L_term$lazy_ptr-L0$_term)(r11)
+	mtctr r12
+	addi r11,r11,lo16(L_term$lazy_ptr-L0$_term)
+	bctr
+.data
+.lazy_symbol_pointer
+L_term$lazy_ptr:
+	.indirect_symbol _term
+	.long dyld_stub_binding_helper
+.data
+.picsymbol_stub
+L_mexpr$stub:
+	.indirect_symbol _mexpr
+	mflr r0
+	bcl 20,31,L0$_mexpr
+L0$_mexpr:
+	mflr r11
+	addis r11,r11,ha16(L_mexpr$lazy_ptr-L0$_mexpr)
+	mtlr r0
+	lwz r12,lo16(L_mexpr$lazy_ptr-L0$_mexpr)(r11)
+	mtctr r12
+	addi r11,r11,lo16(L_mexpr$lazy_ptr-L0$_mexpr)
+	bctr
+.data
+.lazy_symbol_pointer
+L_mexpr$lazy_ptr:
+	.indirect_symbol _mexpr
+	.long dyld_stub_binding_helper
+.data
+.picsymbol_stub
+L_aexpr$stub:
+	.indirect_symbol _aexpr
+	mflr r0
+	bcl 20,31,L0$_aexpr
+L0$_aexpr:
+	mflr r11
+	addis r11,r11,ha16(L_aexpr$lazy_ptr-L0$_aexpr)
+	mtlr r0
+	lwz r12,lo16(L_aexpr$lazy_ptr-L0$_aexpr)(r11)
+	mtctr r12
+	addi r11,r11,lo16(L_aexpr$lazy_ptr-L0$_aexpr)
+	bctr
+.data
+.lazy_symbol_pointer
+L_aexpr$lazy_ptr:
+	.indirect_symbol _aexpr
+	.long dyld_stub_binding_helper
+.data
+.picsymbol_stub
+L_fprintf$stub:
+	.indirect_symbol _fprintf
+	mflr r0
+	bcl 20,31,L0$_fprintf
+L0$_fprintf:
+	mflr r11
+	addis r11,r11,ha16(L_fprintf$lazy_ptr-L0$_fprintf)
+	mtlr r0
+	lwz r12,lo16(L_fprintf$lazy_ptr-L0$_fprintf)(r11)
+	mtctr r12
+	addi r11,r11,lo16(L_fprintf$lazy_ptr-L0$_fprintf)
+	bctr
+.data
+.lazy_symbol_pointer
+L_fprintf$lazy_ptr:
+	.indirect_symbol _fprintf
+	.long dyld_stub_binding_helper
+.data
+.non_lazy_symbol_pointer
+L_variable$non_lazy_ptr:
+	.indirect_symbol _variable
+	.long	0
+L_lvalue$non_lazy_ptr:
+	.indirect_symbol _lvalue
+	.long	0
+L_value$non_lazy_ptr:
+	.indirect_symbol _value
+	.long	0
+L___sF$non_lazy_ptr:
+	.indirect_symbol ___sF
+	.long	0
+L_last_token$non_lazy_ptr:
+	.indirect_symbol _last_token
+	.long	0
+L_last_ptr$non_lazy_ptr:
+	.indirect_symbol _last_ptr
+	.long	0
+L_ptr$non_lazy_ptr:
+	.indirect_symbol _ptr
+	.long	0
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calc.s.gcc	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,1466 @@
+	.file	"calc.c"
+.toc
+.csect .text[PR]
+gcc2_compiled.:
+__gnu_compiled_c:
+.toc
+LC..0:
+	.tc ptr[TC],ptr
+LC..1:
+	.tc last_ptr[TC],last_ptr
+LC..2:
+	.tc last_token[TC],last_token
+.csect .text[PR]
+	.align 2
+	.globl line_skip
+	.globl .line_skip
+.csect line_skip[DS]
+line_skip:
+	.long .line_skip, TOC[tc0], 0
+.csect .text[PR]
+.line_skip:
+	st 31,-4(1)
+	stu 1,-32(1)
+	mr 31,1
+	cror 0,0,0
+L..2:
+	l 9,LC..0(2)
+	l 11,0(9)
+	cal 0,1(11)
+	st 0,0(9)
+	lbz 9,0(11)
+	rlinm 0,9,0,0xff
+	cmpi 1,0,0
+	bc 12,6,$+8
+	b L..4
+	b L..3
+L..4:
+	b L..2
+L..3:
+	l 9,LC..1(2)
+	l 11,LC..0(2)
+	l 0,0(11)
+	st 0,0(9)
+	l 9,LC..2(2)
+	lil 0,-1
+	st 0,0(9)
+L..1:
+	l 1,0(1)
+	l 31,-4(1)
+	br
+LT..line_skip:
+	.long 0
+	.byte 0,0,32,96,128,1,0,1
+	.long LT..line_skip-.line_skip
+	.short 9
+	.byte "line_skip"
+	.byte 31
+	.extern fprintf[DS]
+	.extern .fprintf
+	.extern _iob[RW]
+.csect _calc.rw_c[RO]
+	.align 2
+LC..3:
+	.byte "%s on %s"
+	.byte 10, 0
+.toc
+LC..4:
+	.tc last_ptr[TC],last_ptr
+LC..5:
+	.tc _iob.P64[TC],_iob[RW]+64
+LC..6:
+	.tc LC..3[TC],LC..3
+.csect .text[PR]
+	.align 2
+	.globl error
+	.globl .error
+.csect error[DS]
+error:
+	.long .error, TOC[tc0], 0
+.csect .text[PR]
+.error:
+	mflr 0
+	st 31,-4(1)
+	st 0,8(1)
+	stu 1,-64(1)
+	mr 31,1
+	st 3,88(31)
+	l 9,LC..4(2)
+	l 3,LC..5(2)
+	l 4,LC..6(2)
+	l 5,88(31)
+	l 6,0(9)
+	bl .fprintf
+	cror 31,31,31
+	bl .line_skip
+	cror 31,31,31
+L..5:
+	l 1,0(1)
+	l 0,8(1)
+	mtlr 0
+	l 31,-4(1)
+	br
+LT..error:
+	.long 0
+	.byte 0,0,32,97,128,1,1,1
+	.long 0
+	.long LT..error-.error
+	.short 5
+	.byte "error"
+	.byte 31
+.toc
+LC..7:
+	.tc last_ptr[TC],last_ptr
+LC..8:
+	.tc ptr[TC],ptr
+LC..9:
+	.tc last_token[TC],last_token
+LC..10:
+	.tc value[TC],value
+.csect .text[PR]
+	.align 2
+	.globl token
+	.globl .token
+.csect token[DS]
+token:
+	.long .token, TOC[tc0], 0
+.csect .text[PR]
+.token:
+	mflr 0
+	st 31,-4(1)
+	st 0,8(1)
+	stu 1,-72(1)
+	mr 31,1
+	l 9,LC..7(2)
+	l 11,LC..8(2)
+	l 0,0(11)
+	st 0,0(9)
+	l 11,LC..8(2)
+	l 9,0(11)
+	lbz 0,0(9)
+	rlinm 9,0,0,0xff
+	st 9,56(31)
+L..7:
+	l 0,56(31)
+	cmpi 1,0,32
+	bc 4,5,$+8
+	b L..10
+	l 0,56(31)
+	cmpi 1,0,0
+	bc 12,6,$+8
+	b L..9
+	b L..10
+L..10:
+	b L..8
+L..9:
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 10,0(11)
+	cal 0,1(10)
+	mr 11,0
+	st 11,0(9)
+	lbz 0,0(11)
+	rlinm 9,0,0,0xff
+	st 9,56(31)
+	b L..7
+L..8:
+	l 0,56(31)
+	cmpi 1,0,0
+	bc 12,6,$+8
+	b L..11
+	l 9,LC..9(2)
+	lil 0,-1
+	st 0,0(9)
+	l 9,LC..9(2)
+	l 3,0(9)
+	b L..6
+L..11:
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 10,0(11)
+	cal 0,1(10)
+	mr 11,0
+	st 11,0(9)
+	l 0,56(31)
+	cmpi 1,0,47
+	bc 12,6,$+8
+	b L..12
+	l 11,LC..8(2)
+	l 9,0(11)
+	lbz 11,0(9)
+	rlinm 0,11,0,0xff
+	cmpi 1,0,47
+	bc 4,6,$+8
+	b L..13
+	l 11,LC..8(2)
+	l 9,0(11)
+	lbz 11,0(9)
+	rlinm 0,11,0,0xff
+	cmpi 1,0,42
+	bc 4,6,$+8
+	b L..13
+	b L..12
+L..13:
+	bl .line_skip
+	cror 31,31,31
+	lil 3,-1
+	b L..6
+L..12:
+	l 0,56(31)
+	cmpi 1,0,48
+	bc 12,5,$+8
+	b L..14
+	l 0,56(31)
+	cmpi 1,0,57
+	bc 4,5,$+8
+	b L..14
+	l 0,56(31)
+	ai 9,0,-48
+	st 9,60(31)
+L..15:
+	l 9,LC..8(2)
+	l 11,0(9)
+	cal 0,1(11)
+	st 0,0(9)
+	lbz 9,0(11)
+	rlinm 0,9,0,0xff
+	mr 9,0
+	st 9,56(31)
+	cmpi 1,9,0
+	bc 12,6,$+8
+	b L..17
+	b L..16
+L..17:
+	l 0,56(31)
+	cmpi 1,0,47
+	bc 12,5,$+8
+	b L..18
+	l 0,56(31)
+	cmpi 1,0,57
+	bc 4,5,$+8
+	b L..18
+	l 9,60(31)
+	muli 0,9,10
+	ai 9,0,-48
+	l 0,56(31)
+	cax 9,9,0
+	st 9,60(31)
+	b L..19
+L..18:
+	b L..16
+L..19:
+	b L..15
+L..16:
+	l 0,56(31)
+	cmpi 1,0,0
+	bc 4,6,$+8
+	b L..20
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 0,0(11)
+	ai 11,0,-1
+	mr 0,11
+	st 0,0(9)
+	lil 9,-1
+	cmp 1,0,9
+	bc 4,6,$+8
+	b L..20
+L..20:
+	l 9,LC..10(2)
+	l 0,60(31)
+	st 0,0(9)
+	l 9,LC..9(2)
+	lil 0,48
+	st 0,0(9)
+	l 9,LC..9(2)
+	l 3,0(9)
+	b L..6
+	b L..21
+L..14:
+	l 0,56(31)
+	cmpi 1,0,48
+	bc 12,6,$+8
+	b L..22
+	l 11,LC..8(2)
+	l 9,0(11)
+	lbz 11,0(9)
+	rlinm 0,11,0,0xff
+	cmpi 1,0,120
+	bc 12,6,$+8
+	b L..22
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 10,0(11)
+	cal 0,1(10)
+	mr 11,0
+	st 11,0(9)
+	lil 0,0
+	st 0,60(31)
+L..23:
+	l 9,LC..8(2)
+	l 11,0(9)
+	cal 0,1(11)
+	st 0,0(9)
+	lbz 9,0(11)
+	rlinm 0,9,0,0xff
+	mr 9,0
+	st 9,56(31)
+	cmpi 1,9,0
+	bc 12,6,$+8
+	b L..25
+	b L..24
+L..25:
+	l 0,56(31)
+	cmpi 1,0,47
+	bc 12,5,$+8
+	b L..26
+	l 0,56(31)
+	cmpi 1,0,57
+	bc 4,5,$+8
+	b L..26
+	l 0,60(31)
+	mr 9,0
+	sli 0,9,4
+	ai 9,0,-48
+	l 0,56(31)
+	cax 9,9,0
+	st 9,60(31)
+	b L..27
+L..26:
+	l 0,56(31)
+	cmpi 1,0,96
+	bc 12,5,$+8
+	b L..28
+	l 0,56(31)
+	cmpi 1,0,102
+	bc 4,5,$+8
+	b L..28
+	l 0,60(31)
+	mr 9,0
+	sli 0,9,4
+	ai 9,0,-87
+	l 0,56(31)
+	cax 9,9,0
+	st 9,60(31)
+	b L..29
+L..28:
+	l 0,56(31)
+	cmpi 1,0,64
+	bc 12,5,$+8
+	b L..30
+	l 0,56(31)
+	cmpi 1,0,70
+	bc 4,5,$+8
+	b L..30
+	l 0,60(31)
+	mr 9,0
+	sli 0,9,4
+	ai 9,0,-87
+	l 0,56(31)
+	cax 9,9,0
+	st 9,60(31)
+	b L..31
+L..30:
+	b L..24
+L..31:
+L..29:
+L..27:
+	b L..23
+L..24:
+	l 0,56(31)
+	cmpi 1,0,0
+	bc 4,6,$+8
+	b L..32
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 0,0(11)
+	ai 11,0,-1
+	mr 0,11
+	st 0,0(9)
+	lil 9,-1
+	cmp 1,0,9
+	bc 4,6,$+8
+	b L..32
+L..32:
+	l 9,LC..10(2)
+	l 0,60(31)
+	st 0,0(9)
+	l 9,LC..9(2)
+	lil 0,48
+	st 0,0(9)
+	l 9,LC..9(2)
+	l 3,0(9)
+	b L..6
+	b L..33
+L..22:
+	l 0,56(31)
+	cmpi 1,0,48
+	bc 12,6,$+8
+	b L..34
+	l 0,56(31)
+	ai 9,0,-48
+	st 9,60(31)
+L..35:
+	l 9,LC..8(2)
+	l 11,0(9)
+	cal 0,1(11)
+	st 0,0(9)
+	lbz 9,0(11)
+	rlinm 0,9,0,0xff
+	mr 9,0
+	st 9,56(31)
+	cmpi 1,9,0
+	bc 12,6,$+8
+	b L..37
+	b L..36
+L..37:
+	l 0,56(31)
+	cmpi 1,0,47
+	bc 12,5,$+8
+	b L..38
+	l 0,56(31)
+	cmpi 1,0,55
+	bc 4,5,$+8
+	b L..38
+	l 0,60(31)
+	mr 9,0
+	sli 0,9,3
+	ai 9,0,-48
+	l 0,56(31)
+	cax 9,9,0
+	st 9,60(31)
+	b L..39
+L..38:
+	b L..36
+L..39:
+	b L..35
+L..36:
+	l 0,56(31)
+	cmpi 1,0,0
+	bc 4,6,$+8
+	b L..40
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 0,0(11)
+	ai 11,0,-1
+	mr 0,11
+	st 0,0(9)
+	lil 9,-1
+	cmp 1,0,9
+	bc 4,6,$+8
+	b L..40
+L..40:
+	l 9,LC..10(2)
+	l 0,60(31)
+	st 0,0(9)
+	l 9,LC..9(2)
+	lil 0,48
+	st 0,0(9)
+	l 9,LC..9(2)
+	l 3,0(9)
+	b L..6
+	b L..41
+L..34:
+	l 0,56(31)
+	cmpi 1,0,39
+	bc 12,6,$+8
+	b L..42
+	lil 0,0
+	st 0,60(31)
+L..43:
+	l 9,LC..8(2)
+	l 11,0(9)
+	cal 0,1(11)
+	st 0,0(9)
+	lbz 9,0(11)
+	rlinm 0,9,0,0xff
+	mr 9,0
+	st 9,56(31)
+	cmpi 1,9,0
+	bc 12,6,$+8
+	b L..45
+	b L..44
+L..45:
+	l 0,56(31)
+	cmpi 1,0,39
+	bc 4,6,$+8
+	b L..46
+	l 0,56(31)
+	cmpi 1,0,127
+	bc 4,5,$+8
+	b L..46
+	l 0,60(31)
+	mr 9,0
+	sli 0,9,8
+	l 9,56(31)
+	cax 0,0,9
+	st 0,60(31)
+	b L..47
+L..46:
+	l 0,56(31)
+	cmpi 1,0,127
+	bc 12,5,$+8
+	b L..48
+	l 11,LC..8(2)
+	l 9,0(11)
+	lbz 11,0(9)
+	rlinm 0,11,0,0xff
+	cmpi 1,0,0
+	bc 4,6,$+8
+	b L..48
+	l 0,60(31)
+	mr 9,0
+	sli 0,9,16
+	l 9,56(31)
+	mr 11,9
+	sli 9,11,8
+	cax 0,0,9
+	l 9,LC..8(2)
+	l 11,0(9)
+	cal 10,1(11)
+	st 10,0(9)
+	lbz 11,0(11)
+	rlinm 9,11,0,0xff
+	cax 0,0,9
+	st 0,60(31)
+	b L..49
+L..48:
+	b L..44
+L..49:
+L..47:
+	b L..43
+L..44:
+	l 0,56(31)
+	cmpi 1,0,0
+	bc 4,6,$+8
+	b L..50
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 0,0(11)
+	ai 11,0,-1
+	mr 0,11
+	st 0,0(9)
+	lil 9,-1
+	cmp 1,0,9
+	bc 4,6,$+8
+	b L..50
+L..50:
+	l 9,LC..10(2)
+	l 0,60(31)
+	st 0,0(9)
+	l 9,LC..9(2)
+	lil 0,48
+	st 0,0(9)
+	l 9,LC..9(2)
+	l 3,0(9)
+	b L..6
+	b L..51
+L..42:
+	l 0,56(31)
+	cmpi 1,0,96
+	bc 12,5,$+8
+	b L..54
+	l 0,56(31)
+	cmpi 1,0,122
+	bc 12,5,$+8
+	b L..53
+	b L..54
+L..54:
+	l 0,56(31)
+	cmpi 1,0,64
+	bc 12,5,$+8
+	b L..52
+	l 0,56(31)
+	cmpi 1,0,90
+	bc 12,5,$+8
+	b L..53
+	b L..52
+L..53:
+	l 9,LC..10(2)
+	l 0,56(31)
+	cmpi 1,0,90
+	bc 12,5,$+8
+	b L..55
+	l 11,56(31)
+	cal 0,-71(11)
+	b L..56
+L..55:
+	l 11,56(31)
+	cal 0,-65(11)
+L..56:
+	st 0,0(9)
+	l 9,LC..9(2)
+	lil 0,118
+	st 0,0(9)
+	l 9,LC..9(2)
+	l 3,0(9)
+	b L..6
+	b L..57
+L..52:
+	l 0,56(31)
+	cmpi 1,0,61
+	bc 12,6,$+8
+	b L..58
+	l 11,LC..8(2)
+	l 9,0(11)
+	lbz 11,0(9)
+	rlinm 0,11,0,0xff
+	cmpi 1,0,61
+	bc 12,6,$+8
+	b L..58
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 10,0(11)
+	cal 0,1(10)
+	mr 11,0
+	st 11,0(9)
+	l 9,LC..9(2)
+	lil 0,317
+	st 0,0(9)
+	l 9,LC..9(2)
+	l 3,0(9)
+	b L..6
+	b L..59
+L..58:
+	l 0,56(31)
+	cmpi 1,0,33
+	bc 12,6,$+8
+	b L..60
+	l 11,LC..8(2)
+	l 9,0(11)
+	lbz 11,0(9)
+	rlinm 0,11,0,0xff
+	cmpi 1,0,61
+	bc 12,6,$+8
+	b L..60
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 10,0(11)
+	cal 0,1(10)
+	mr 11,0
+	st 11,0(9)
+	l 9,LC..9(2)
+	lil 0,289
+	st 0,0(9)
+	b L..61
+L..60:
+	l 0,56(31)
+	cmpi 1,0,60
+	bc 12,6,$+8
+	b L..62
+	l 11,LC..8(2)
+	l 9,0(11)
+	lbz 11,0(9)
+	rlinm 0,11,0,0xff
+	cmpi 1,0,60
+	bc 12,6,$+8
+	b L..62
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 10,0(11)
+	cal 0,1(10)
+	mr 11,0
+	st 11,0(9)
+	l 9,LC..9(2)
+	lil 0,316
+	st 0,0(9)
+	l 9,LC..9(2)
+	l 3,0(9)
+	b L..6
+	b L..63
+L..62:
+	l 0,56(31)
+	cmpi 1,0,62
+	bc 12,6,$+8
+	b L..64
+	l 11,LC..8(2)
+	l 9,0(11)
+	lbz 11,0(9)
+	rlinm 0,11,0,0xff
+	cmpi 1,0,62
+	bc 12,6,$+8
+	b L..64
+	l 0,LC..8(2)
+	l 9,LC..8(2)
+	l 11,LC..8(2)
+	l 10,0(11)
+	cal 0,1(10)
+	mr 11,0
+	st 11,0(9)
+	l 9,LC..9(2)
+	lil 0,318
+	st 0,0(9)
+	l 9,LC..9(2)
+	l 3,0(9)
+	b L..6
+	b L..65
+L..64:
+	l 9,LC..9(2)
+	l 0,56(31)
+	st 0,0(9)
+	l 9,LC..9(2)
+	l 3,0(9)
+	b L..6
+	l 3,56(31)
+	b L..6
+L..65:
+L..63:
+L..61:
+L..59:
+L..57:
+L..51:
+L..41:
+L..33:
+L..21:
+L..6:
+	l 1,0(1)
+	l 0,8(1)
+	mtlr 0
+	l 31,-4(1)
+	br
+LT..token:
+	.long 0
+	.byte 0,0,32,97,128,1,0,1
+	.long LT..token-.token
+	.short 5
+	.byte "token"
+	.byte 31
+	.extern aexpr[DS]
+	.extern .aexpr
+.csect _calc.rw_c[RO]
+	.align 2
+LC..13:
+	.byte "? expression not terminated with :"
+	.byte 0
+	.align 2
+LC..16:
+	.byte "Bad assignment"
+	.byte 0
+	.align 2
+LC..18:
+	.byte "Bad expression"
+	.byte 0
+.toc
+LC..11:
+	.tc lvalue[TC],lvalue
+LC..12:
+	.tc last_token[TC],last_token
+LC..14:
+	.tc LC..13[TC],LC..13
+LC..15:
+	.tc variable[TC],variable
+LC..17:
+	.tc LC..16[TC],LC..16
+LC..19:
+	.tc LC..18[TC],LC..18
+.csect .text[PR]
+	.align 2
+	.globl expr
+	.globl .expr
+.csect expr[DS]
+expr:
+	.long .expr, TOC[tc0], 0
+.csect .text[PR]
+.expr:
+	mflr 0
+	st 31,-4(1)
+	st 0,8(1)
+	stu 1,-80(1)
+	mr 31,1
+	bl .aexpr
+	cror 31,31,31
+	mr 0,3
+	st 0,56(31)
+	l 9,LC..11(2)
+	l 0,0(9)
+	st 0,60(31)
+L..67:
+	l 9,LC..12(2)
+	l 0,0(9)
+	lil 9,-1
+	cmp 1,0,9
+	bc 12,6,$+8
+	b L..69
+	b L..68
+L..69:
+	l 9,LC..12(2)
+	l 0,0(9)
+	cmpi 1,0,62
+	bc 4,6,$+8
+	b L..72
+	cmpi 1,0,62
+	bc 4,5,$+8
+	b L..88
+	cmpi 1,0,58
+	bc 4,6,$+8
+	b L..84
+	cmpi 1,0,58
+	bc 4,5,$+8
+	b L..89
+	cmpi 1,0,41
+	bc 4,6,$+8
+	b L..85
+	b L..86
+L..89:
+	cmpi 1,0,60
+	bc 4,6,$+8
+	b L..71
+	cmpi 1,0,61
+	bc 4,6,$+8
+	b L..81
+	b L..86
+L..88:
+	cmpi 1,0,316
+	bc 4,6,$+8
+	b L..75
+	cmpi 1,0,316
+	bc 4,5,$+8
+	b L..90
+	cmpi 1,0,63
+	bc 4,6,$+8
+	b L..77
+	cmpi 1,0,289
+	bc 4,6,$+8
+	b L..74
+	b L..86
+L..90:
+	cmpi 1,0,317
+	bc 4,6,$+8
+	b L..73
+	cmpi 1,0,318
+	bc 4,6,$+8
+	b L..76
+	b L..86
+L..71:
+	bl .aexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	cmp 1,9,0
+	mfcr 0
+	rlinm 0,0,5,1
+	st 0,56(31)
+	b L..70
+L..72:
+	bl .aexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	cmp 1,9,0
+	mfcr 0
+	rlinm 0,0,6,1
+	st 0,56(31)
+	b L..70
+L..73:
+	bl .aexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	cmp 1,9,0
+	mfcr 0
+	rlinm 0,0,7,1
+	st 0,56(31)
+	b L..70
+L..74:
+	bl .aexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	xor 0,9,0
+	abs 9,0
+	neg 0,9
+	sri 0,0,31
+	st 0,56(31)
+	b L..70
+L..75:
+	bl .aexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	sle 0,9,0
+	st 0,56(31)
+	b L..70
+L..76:
+	bl .aexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	srea 0,9,0
+	st 0,56(31)
+	b L..70
+L..77:
+	bl .expr
+	mr 0,3
+	st 0,64(31)
+	l 9,LC..12(2)
+	l 0,0(9)
+	cmpi 1,0,58
+	bc 4,6,$+8
+	b L..78
+	l 3,LC..14(2)
+	bl .error
+	cror 31,31,31
+	l 3,64(31)
+	b L..66
+L..78:
+	l 0,56(31)
+	cmpi 1,0,0
+	bc 4,6,$+8
+	b L..79
+	bl .expr
+	l 3,64(31)
+	b L..66
+	b L..80
+L..79:
+	bl .expr
+	mr 0,3
+	mr 3,0
+	b L..66
+L..80:
+	b L..70
+L..81:
+	l 0,60(31)
+	cmpi 1,0,0
+	bc 4,4,$+8
+	b L..82
+	bl .expr
+	mr 0,3
+	st 0,56(31)
+	l 0,60(31)
+	mr 9,0
+	sli 0,9,2
+	l 9,LC..15(2)
+	cax 0,0,9
+	mr 9,0
+	l 0,56(31)
+	st 0,0(9)
+	l 3,56(31)
+	b L..66
+	b L..83
+L..82:
+	l 3,LC..17(2)
+	bl .error
+	cror 31,31,31
+	lil 3,0
+	b L..66
+L..83:
+	b L..70
+L..84:
+L..85:
+	l 3,56(31)
+	b L..66
+L..86:
+	l 3,LC..19(2)
+	bl .error
+	cror 31,31,31
+	bl .token
+	cror 31,31,31
+L..70:
+	b L..67
+L..68:
+	l 9,LC..12(2)
+	lil 0,-1
+	st 0,0(9)
+	l 3,56(31)
+	b L..66
+L..66:
+	l 1,0(1)
+	l 0,8(1)
+	mtlr 0
+	l 31,-4(1)
+	br
+LT..expr:
+	.long 0
+	.byte 0,0,32,97,128,1,0,1
+	.long LT..expr-.expr
+	.short 4
+	.byte "expr"
+	.byte 31
+	.extern mexpr[DS]
+	.extern .mexpr
+.toc
+LC..20:
+	.tc last_token[TC],last_token
+.csect .text[PR]
+	.align 2
+	.globl aexpr
+	.globl .aexpr
+.csect aexpr[DS]
+aexpr:
+	.long .aexpr, TOC[tc0], 0
+.csect .text[PR]
+.aexpr:
+	mflr 0
+	st 31,-4(1)
+	st 0,8(1)
+	stu 1,-72(1)
+	mr 31,1
+	bl .mexpr
+	cror 31,31,31
+	mr 0,3
+	st 0,56(31)
+L..92:
+	l 9,LC..20(2)
+	l 0,0(9)
+	lil 9,-1
+	cmp 1,0,9
+	bc 12,6,$+8
+	b L..94
+	b L..93
+L..94:
+	l 9,LC..20(2)
+	l 0,0(9)
+	cmpi 1,0,45
+	bc 4,6,$+8
+	b L..99
+	cmpi 1,0,45
+	bc 4,5,$+8
+	b L..103
+	cmpi 1,0,38
+	bc 4,6,$+8
+	b L..98
+	cmpi 1,0,43
+	bc 4,6,$+8
+	b L..100
+	b L..101
+L..103:
+	cmpi 1,0,94
+	bc 4,6,$+8
+	b L..96
+	cmpi 1,0,124
+	bc 4,6,$+8
+	b L..97
+	b L..101
+L..96:
+	bl .mexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	xor 0,9,0
+	st 0,56(31)
+	b L..95
+L..97:
+	bl .mexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	or 0,9,0
+	st 0,56(31)
+	b L..95
+L..98:
+	bl .mexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	and 0,9,0
+	st 0,56(31)
+	b L..95
+L..99:
+	bl .mexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	sf 0,0,9
+	st 0,56(31)
+	b L..95
+L..100:
+	bl .mexpr
+	cror 31,31,31
+	mr 0,3
+	l 9,56(31)
+	cax 0,9,0
+	st 0,56(31)
+	b L..95
+L..101:
+	l 3,56(31)
+	b L..91
+L..95:
+	b L..92
+L..93:
+	l 3,56(31)
+	b L..91
+L..91:
+	l 1,0(1)
+	l 0,8(1)
+	mtlr 0
+	l 31,-4(1)
+	br
+LT..aexpr:
+	.long 0
+	.byte 0,0,32,97,128,1,0,1
+	.long LT..aexpr-.aexpr
+	.short 5
+	.byte "aexpr"
+	.byte 31
+	.extern term[DS]
+	.extern .term
+.toc
+LC..21:
+	.tc last_token[TC],last_token
+.csect .text[PR]
+	.align 2
+	.globl mexpr
+	.globl .mexpr
+.csect mexpr[DS]
+mexpr:
+	.long .mexpr, TOC[tc0], 0
+.csect .text[PR]
+.mexpr:
+	mflr 0
+	st 31,-4(1)
+	st 0,8(1)
+	stu 1,-72(1)
+	mr 31,1
+	bl .term
+	cror 31,31,31
+	mr 0,3
+	st 0,56(31)
+L..105:
+	l 9,LC..21(2)
+	l 0,0(9)
+	lil 9,-1
+	cmp 1,0,9
+	bc 12,6,$+8
+	b L..107
+	b L..106
+L..107:
+	l 9,LC..21(2)
+	l 0,0(9)
+	cmpi 1,0,42
+	bc 4,6,$+8
+	b L..109
+	cmpi 1,0,42
+	bc 4,5,$+8
+	b L..115
+	cmpi 1,0,37
+	bc 4,6,$+8
+	b L..111
+	b L..113
+L..115:
+	cmpi 1,0,47
+	bc 4,6,$+8
+	b L..110
+	cmpi 1,0,94
+	bc 4,6,$+8
+	b L..112
+	b L..113
+L..109:
+	bl .mexpr
+	mr 0,3
+	l 9,56(31)
+	muls 0,9,0
+	st 0,56(31)
+	b L..108
+L..110:
+	bl .mexpr
+	mr 0,3
+	l 9,56(31)
+	divs 0,9,0
+	mfmq 11
+	st 11,60(31)
+	st 0,56(31)
+	b L..108
+L..111:
+	bl .mexpr
+	mr 0,3
+	l 9,56(31)
+	divs 0,9,0
+	mfmq 11
+	st 11,60(31)
+	l 11,60(31)
+	st 11,56(31)
+	b L..108
+L..112:
+	bl .mexpr
+	mr 0,3
+	l 9,56(31)
+	xor 0,9,0
+	st 0,56(31)
+	b L..108
+L..113:
+	l 3,56(31)
+	b L..104
+L..108:
+	b L..105
+L..106:
+	l 3,56(31)
+	b L..104
+L..104:
+	l 1,0(1)
+	l 0,8(1)
+	mtlr 0
+	l 31,-4(1)
+	br
+LT..mexpr:
+	.long 0
+	.byte 0,0,32,97,128,1,0,1
+	.long LT..mexpr-.mexpr
+	.short 5
+	.byte "mexpr"
+	.byte 31
+.csect _calc.rw_c[RO]
+	.align 2
+LC..24:
+	.byte "Term expected"
+	.byte 0
+	.align 2
+LC..28:
+	.byte "Unbalanced parenthsis"
+	.byte 0
+	.align 2
+LC..30:
+	.byte "Unknown term"
+	.byte 0
+.toc
+LC..22:
+	.tc lvalue[TC],lvalue
+LC..23:
+	.tc last_token[TC],last_token
+LC..25:
+	.tc LC..24[TC],LC..24
+LC..26:
+	.tc value[TC],value
+LC..27:
+	.tc variable[TC],variable
+LC..29:
+	.tc LC..28[TC],LC..28
+LC..31:
+	.tc LC..30[TC],LC..30
+.csect .text[PR]
+	.align 2
+	.globl term
+	.globl .term
+.csect term[DS]
+term:
+	.long .term, TOC[tc0], 0
+.csect .text[PR]
+.term:
+	mflr 0
+	st 31,-4(1)
+	st 0,8(1)
+	stu 1,-72(1)
+	mr 31,1
+	l 9,LC..22(2)
+	lil 0,-1
+	st 0,0(9)
+	bl .token
+	cror 31,31,31
+	l 9,LC..23(2)
+	l 0,0(9)
+	lil 9,-1
+	cmp 1,0,9
+	bc 12,6,$+8
+	b L..117
+	l 3,LC..25(2)
+	bl .error
+	cror 31,31,31
+L..117:
+	l 9,LC..23(2)
+	l 0,0(9)
+	cmpi 1,0,48
+	bc 4,6,$+8
+	b L..119
+	cmpi 1,0,48
+	bc 4,5,$+8
+	b L..127
+	cmpi 1,0,40
+	bc 4,6,$+8
+	b L..123
+	cmpi 1,0,40
+	bc 4,5,$+8
+	b L..128
+	cmpi 1,0,33
+	bc 4,6,$+8
+	b L..122
+	b L..125
+L..128:
+	cmpi 1,0,45
+	bc 4,6,$+8
+	b L..121
+	b L..125
+L..127:
+	cmpi 1,0,118
+	bc 4,6,$+8
+	b L..120
+	b L..125
+L..119:
+	l 9,LC..26(2)
+	l 0,0(9)
+	st 0,56(31)
+	bl .token
+	cror 31,31,31
+	l 3,56(31)
+	b L..116
+L..120:
+	l 9,LC..22(2)
+	l 11,LC..26(2)
+	l 0,0(11)
+	st 0,0(9)
+	st 0,56(31)
+	bl .token
+	cror 31,31,31
+	l 0,56(31)
+	mr 9,0
+	sli 0,9,2
+	l 9,LC..27(2)
+	cax 0,0,9
+	mr 9,0
+	l 3,0(9)
+	b L..116
+L..121:
+	bl .term
+	mr 0,3
+	neg 9,0
+	mr 3,9
+	b L..116
+L..122:
+	bl .term
+	mr 0,3
+	cmpi 1,0,0
+	mfcr 0
+	rlinm 0,0,7,1
+	mr 3,0
+	b L..116
+L..123:
+	bl .expr
+	cror 31,31,31
+	mr 0,3
+	st 0,56(31)
+	l 9,LC..23(2)
+	l 0,0(9)
+	cmpi 1,0,41
+	bc 4,6,$+8
+	b L..124
+	l 3,LC..29(2)
+	bl .error
+	cror 31,31,31
+L..124:
+	bl .token
+	cror 31,31,31
+	l 3,56(31)
+	b L..116
+L..125:
+	bl .token
+	cror 31,31,31
+	l 3,LC..31(2)
+	bl .error
+	cror 31,31,31
+	lil 3,0
+	b L..116
+L..118:
+L..116:
+	l 1,0(1)
+	l 0,8(1)
+	mtlr 0
+	l 31,-4(1)
+	br
+LT..term:
+	.long 0
+	.byte 0,0,32,97,128,1,0,1
+	.long LT..term-.term
+	.short 4
+	.byte "term"
+	.byte 31
+	.extern .__main
+	.extern fgets[DS]
+	.extern .fgets
+	.extern printf[DS]
+	.extern .printf
+.csect _calc.rw_c[RO]
+	.align 2
+LC..34:
+	.byte "%s = 0x%08x = %d"
+	.byte 10, 0
+	.extern fflush[DS]
+	.extern .fflush
+.toc
+LC..32:
+	.tc _iob[TC],_iob[RW]
+LC..33:
+	.tc ptr[TC],ptr
+LC..35:
+	.tc LC..34[TC],LC..34
+LC..36:
+	.tc _iob.P32[TC],_iob[RW]+32
+.csect .text[PR]
+	.align 2
+	.globl main
+	.globl .main
+.csect main[DS]
+main:
+	.long .main, TOC[tc0], 0
+.csect .text[PR]
+.main:
+	mflr 0
+	st 31,-4(1)
+	st 0,8(1)
+	stu 1,-4168(1)
+	mr 31,1
+	bl .__main
+	cror 31,31,31
+L..130:
+	cal 0,60(31)
+	mr 3,0
+	lil 4,4096
+	l 5,LC..32(2)
+	bl .fgets
+	cror 31,31,31
+	mr 0,3
+	cmpi 1,0,0
+	bc 12,6,$+8
+	b L..132
+	b L..131
+L..132:
+	l 9,LC..33(2)
+	cal 0,60(31)
+	st 0,0(9)
+	bl .expr
+	cror 31,31,31
+	mr 0,3
+	st 0,56(31)
+	cal 0,60(31)
+	l 3,LC..35(2)
+	mr 4,0
+	l 5,56(31)
+	l 6,56(31)
+	bl .printf
+	cror 31,31,31
+	l 3,LC..36(2)
+	bl .fflush
+	cror 31,31,31
+	b L..130
+L..131:
+	lil 3,0
+	b L..129
+L..129:
+	l 1,0(1)
+	l 0,8(1)
+	mtlr 0
+	l 31,-4(1)
+	br
+LT..main:
+	.long 0
+	.byte 0,0,32,97,128,1,0,1
+	.long LT..main-.main
+	.short 4
+	.byte "main"
+	.byte 31
+.comm ptr,4
+.comm last_ptr,4
+.comm value,4
+.comm lvalue,4
+.comm last_token,4
+.comm variable,192
+_section_.text:
+.csect .data[RW]
+	.long _section_.text
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calc.s.rs6k	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,1181 @@
+.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
+.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
+.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
+.set r30,30; .set r31,31
+.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
+.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
+.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
+.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
+.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
+.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
+.set fp30,30; .set fp31,31
+.set MQ,0; .set XER,1; .set FROM_RTCU,4; .set FROM_RTCL,5; .set FROM_DEC,6
+.set LR,8; .set CTR,9; .set TID,17; .set DSISR,18; .set DAR,19; .set TO_RTCU,20
+.set TO_RTCL,21; .set TO_DEC,22; .set SDR_0,24; .set SDR_1,25; .set SRR_0,26
+.set SRR_1,27
+.set BO_dCTR_NZERO_AND_NOT,0; .set BO_dCTR_NZERO_AND_NOT_1,1
+.set BO_dCTR_ZERO_AND_NOT,2; .set BO_dCTR_ZERO_AND_NOT_1,3
+.set BO_IF_NOT,4; .set BO_IF_NOT_1,5; .set BO_IF_NOT_2,6
+.set BO_IF_NOT_3,7; .set BO_dCTR_NZERO_AND,8; .set BO_dCTR_NZERO_AND_1,9
+.set BO_dCTR_ZERO_AND,10; .set BO_dCTR_ZERO_AND_1,11; .set BO_IF,12
+.set BO_IF_1,13; .set BO_IF_2,14; .set BO_IF_3,15; .set BO_dCTR_NZERO,16
+.set BO_dCTR_NZERO_1,17; .set BO_dCTR_ZERO,18; .set BO_dCTR_ZERO_1,19
+.set BO_ALWAYS,20; .set BO_ALWAYS_1,21; .set BO_ALWAYS_2,22
+.set BO_ALWAYS_3,23; .set BO_dCTR_NZERO_8,24; .set BO_dCTR_NZERO_9,25
+.set BO_dCTR_ZERO_8,26; .set BO_dCTR_ZERO_9,27; .set BO_ALWAYS_8,28
+.set BO_ALWAYS_9,29; .set BO_ALWAYS_10,30; .set BO_ALWAYS_11,31
+.set CR0_LT,0; .set CR0_GT,1; .set CR0_EQ,2; .set CR0_SO,3
+.set CR1_FX,4; .set CR1_FEX,5; .set CR1_VX,6; .set CR1_OX,7
+.set CR2_LT,8; .set CR2_GT,9; .set CR2_EQ,10; .set CR2_SO,11
+.set CR3_LT,12; .set CR3_GT,13; .set CR3_EQ,14; .set CR3_SO,15
+.set CR4_LT,16; .set CR4_GT,17; .set CR4_EQ,18; .set CR4_SO,19
+.set CR5_LT,20; .set CR5_GT,21; .set CR5_EQ,22; .set CR5_SO,23
+.set CR6_LT,24; .set CR6_GT,25; .set CR6_EQ,26; .set CR6_SO,27
+.set CR7_LT,28; .set CR7_GT,29; .set CR7_EQ,30; .set CR7_SO,31
+.set TO_LT,16; .set TO_GT,8; .set TO_EQ,4; .set TO_LLT,2; .set TO_LGT,1
+
+	.rename	H.10.NO_SYMBOL{PR},""
+	.rename	E.30._calc_c_{RW},"_calc$c$"
+	.rename	H.32._calc_c_{TC},"_calc$c$"
+	.rename	H.36.line_skip{TC},"line_skip"
+	.rename	H.40.ptr{TC},"ptr"
+	.rename	H.44.last_ptr{TC},"last_ptr"
+	.rename	H.48.last_token{TC},"last_token"
+	.rename	H.52.error{TC},"error"
+	.rename	H.56._iob{TC},"_iob"
+	.rename	H.60.token{TC},"token"
+	.rename	H.64.value{TC},"value"
+	.rename	H.68.expr{TC},"expr"
+	.rename	H.72.lvalue{TC},"lvalue"
+	.rename	H.76.variable{TC},"variable"
+	.rename	H.80.aexpr{TC},"aexpr"
+	.rename	H.84.mexpr{TC},"mexpr"
+	.rename	H.88.term{TC},"term"
+	.rename	H.92.main{TC},"main"
+
+	.lglobl	H.10.NO_SYMBOL{PR}      
+	.globl	.line_skip              
+	.globl	.error                  
+	.globl	.token                  
+	.globl	.expr                   
+	.globl	.aexpr                  
+	.globl	.mexpr                  
+	.globl	.term                   
+	.globl	.main                   
+	.lglobl	E.30._calc_c_{RW}       
+	.globl	line_skip{DS}           
+	.globl	ptr{RW}                 
+	.globl	last_ptr{RW}            
+	.globl	last_token{RW}          
+	.globl	error{DS}               
+	.extern	_iob{UA}                
+	.globl	token{DS}               
+	.globl	value{RW}               
+	.globl	expr{DS}                
+	.globl	lvalue{RW}              
+	.globl	variable{RW}            
+	.globl	aexpr{DS}               
+	.globl	mexpr{DS}               
+	.globl	term{DS}                
+	.globl	main{DS}                
+	.extern	.fprintf{PR}            
+	.extern	.fgets{PR}              
+	.extern	.printf{PR}             
+	.extern	.fflush{PR}             
+
+
+# .text section
+
+
+	.csect	H.10.NO_SYMBOL{PR}      
+.line_skip:                             # 0x00000000 (H.10.NO_SYMBOL)
+	.file	"calc.c"                
+	l	r4,T.40.ptr(RTOC)
+	cal	r0,-1(r0)
+	l	r3,0(r4)
+	l	r5,T.44.last_ptr(RTOC)
+	lbz	r6,0(r3)
+	cal	r8,0(r3)
+	cmpi	0,r6,0
+	ai	r3,r3,1
+	st	r3,0(r4)
+	l	r6,T.48.last_token(RTOC)
+	bc	BO_IF,CR0_EQ,__L54
+	lbzu	r7,1(r8)
+	ai	r3,r3,1
+	cmpi	1,r7,0
+	st	r3,0(r4)
+__L3c:                                  # 0x0000003c (H.10.NO_SYMBOL+0x3c)
+	bc	BO_IF,CR1_VX,__L54
+	lbzu	r7,1(r8)
+	ai	r3,r3,1
+	cmpi	1,r7,0
+	st	r3,0(r4)
+	b	__L3c
+__L54:                                  # 0x00000054 (H.10.NO_SYMBOL+0x54)
+	st	r3,0(r5)
+	st	r0,0(r6)
+	bcr	BO_ALWAYS,CR0_LT
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x40			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=0
+	.byte	0x00			# STORES_BC=0,FPR_SAVED=0
+	.byte	0x00			# GPR_SAVED=0
+	.byte	0x00			# FIXEDPARMS=0
+	.byte	0x00			# FLOATPARMS=0,PARMSONSTK=0
+	.long	0x00000060		# TB_OFFSET
+	.short	9			# NAME_LEN
+	.byte	"line_skip"
+	.byte	0			# padding
+# End of traceback table
+.error:                                 # 0x0000007c (H.10.NO_SYMBOL+0x7c)
+	cal	r5,0(r3)
+	l	r4,T.44.last_ptr(RTOC)
+	mfspr	r0,LR
+	stu	SP,-64(SP)
+	l	r3,T.56._iob(RTOC)
+	l	r6,0(r4)
+	st	r0,72(SP)
+	ai	r3,r3,64
+	l	r4,T.32._calc_c_(RTOC)
+	bl	.fprintf{PR}
+	cror	CR3_SO,CR3_SO,CR3_SO
+	bl	.line_skip
+	l	r12,72(SP)
+	ai	SP,SP,64
+	mtspr	LR,r12
+	bcr	BO_ALWAYS,CR0_LT
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x41			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x00			# GPR_SAVED=0
+	.byte	0x01			# FIXEDPARMS=1
+	.byte	0x00			# FLOATPARMS=0,PARMSONSTK=0
+	.long	0x00000000		# 
+	.long	0x00000040		# TB_OFFSET
+	.short	5			# NAME_LEN
+	.byte	"error"
+	.byte	0			# padding
+# End of traceback table
+.token:                                 # 0x000000d8 (H.10.NO_SYMBOL+0xd8)
+	l	r6,T.40.ptr(RTOC)
+	l	r4,T.44.last_ptr(RTOC)
+	l	r5,0(r6)
+	mfspr	r0,LR
+	st	r5,0(r4)
+	lbz	r3,0(r5)
+	stu	SP,-64(SP)
+	cmpi	0,r3,32
+	cmpi	1,r3,0
+	st	r0,72(SP)
+	ai	r4,r5,1
+	bc	BO_IF,CR0_GT,__L150
+	bc	BO_IF,CR1_VX,__L158
+	ai	r7,r5,2
+	cal	r5,0(r4)
+	st	r5,0(r6)
+	lbz	r3,0(r4)
+	ai	r4,r7,1
+	cmpi	0,r3,32
+	cmpi	1,r3,0
+__L128:                                 # 0x00000128 (H.10.NO_SYMBOL+0x128)
+	bc	BO_IF,CR0_GT,__L150
+	bc	BO_IF,CR1_VX,__L158
+	ai	r5,r5,1
+	st	r5,0(r6)
+	lbz	r3,0(r7)
+	cal	r7,0(r4)
+	cmpi	0,r3,32
+	cmpi	1,r3,0
+	ai	r4,r4,1
+	b	__L128
+__L150:                                 # 0x00000150 (H.10.NO_SYMBOL+0x150)
+	cmpi	1,r3,0
+	bc	BO_IF_NOT,CR1_VX,__L16c
+__L158:                                 # 0x00000158 (H.10.NO_SYMBOL+0x158)
+	ai	SP,SP,64
+	l	r4,T.48.last_token(RTOC)
+	cal	r3,-1(r0)
+	st	r3,0(r4)
+	bcr	BO_ALWAYS,CR0_LT
+__L16c:                                 # 0x0000016c (H.10.NO_SYMBOL+0x16c)
+	cmpi	0,r3,47
+	ai	r4,r5,1
+	st	r4,0(r6)
+	bc	BO_IF_NOT,CR0_EQ,__L1a8
+	lbz	r4,1(r5)
+	cmpli	1,r4,0x002f
+	cmpli	0,r4,0x002a
+	bc	BO_IF,CR1_VX,__L190
+	bc	BO_IF_NOT,CR0_EQ,__L1a8
+__L190:                                 # 0x00000190 (H.10.NO_SYMBOL+0x190)
+	bl	.line_skip
+	cal	r3,-1(r0)
+	l	r12,72(SP)
+	ai	SP,SP,64
+	mtspr	LR,r12
+	bcr	BO_ALWAYS,CR0_LT
+__L1a8:                                 # 0x000001a8 (H.10.NO_SYMBOL+0x1a8)
+	cmpi	1,r3,49
+	cmpi	0,r3,57
+	cmpi	7,r3,48
+	cmpi	6,r3,39
+	ai	r8,r3,-48
+	bc	BO_IF,CR1_FX,__L258
+	bc	BO_IF,CR0_GT,__L258
+	lbz	r3,1(r5)
+	ai	r4,r5,1
+	cmpi	0,r3,0
+	ai	r5,r5,2
+	st	r5,0(r6)
+	bc	BO_IF,CR0_EQ,__L22c
+	rlinm	r0,r8,3,0,28
+	cmpi	1,r3,48
+	cmpi	0,r3,57
+	ai	r7,r3,-48
+	a	r0,r8,r0
+__L1f0:                                 # 0x000001f0 (H.10.NO_SYMBOL+0x1f0)
+	bc	BO_IF,CR1_FX,__L22c
+	a	r0,r8,r0
+	bc	BO_IF,CR0_GT,__L22c
+	lbzu	r3,1(r4)
+	ai	r5,r5,1
+	cmpi	6,r3,0
+	a	r8,r7,r0
+	st	r5,0(r6)
+	ai	r7,r3,-48
+	bc	BO_IF,CR6_EQ,__L22c
+	rlinm	r0,r8,3,0,28
+	cmpi	1,r3,48
+	cmpi	0,r3,57
+	a	r0,r8,r0
+	b	__L1f0
+__L22c:                                 # 0x0000022c (H.10.NO_SYMBOL+0x22c)
+	cmpi	0,r3,0
+	bc	BO_IF,CR0_EQ,__L23c
+	ai	r4,r5,-1
+	st	r4,0(r6)
+__L23c:                                 # 0x0000023c (H.10.NO_SYMBOL+0x23c)
+	l	r3,T.64.value(RTOC)
+	ai	SP,SP,64
+	l	r4,T.48.last_token(RTOC)
+__L248:                                 # 0x00000248 (H.10.NO_SYMBOL+0x248)
+	st	r8,0(r3)
+	cal	r3,48(r0)
+	st	r3,0(r4)
+	bcr	BO_ALWAYS,CR0_LT
+__L258:                                 # 0x00000258 (H.10.NO_SYMBOL+0x258)
+	cmpi	0,r3,97
+	bc	BO_IF_NOT,CR7_EQ,__L3c8
+	lbz	r4,1(r5)
+	cal	r0,0(r8)
+	cmpli	1,r4,0x0078
+	bc	BO_IF_NOT,CR1_VX,__L344
+	ai	r4,r5,2
+	st	r4,0(r6)
+	lbz	r3,2(r5)
+	ai	r0,r5,3
+	cmpi	0,r3,0
+	st	r0,0(r6)
+	cal	r8,0(r0)
+	bc	BO_IF,CR0_EQ,__L324
+	cmpi	6,r3,48
+	cmpi	0,r3,57
+	cmpi	1,r3,97
+	cmpi	7,r3,102
+__L2a0:                                 # 0x000002a0 (H.10.NO_SYMBOL+0x2a0)
+	rlinm	r5,r8,4,0,27
+	cror	CR0_EQ,CR6_LT,CR0_GT
+	bc	BO_IF,CR0_EQ,__L2c4
+	ai	r3,r3,-48
+	a	r8,r3,r5
+	lbzu	r3,1(r4)
+	ai	r0,r0,1
+	cmpi	0,r3,0
+	b	__L308
+__L2c4:                                 # 0x000002c4 (H.10.NO_SYMBOL+0x2c4)
+	cmpi	0,r3,65
+	cmpi	6,r3,70
+	cror	CR1_VX,CR1_FX,CR7_GT
+	bc	BO_IF,CR1_VX,__L2ec
+	ai	r3,r3,-87
+	a	r8,r5,r3
+	lbzu	r3,1(r4)
+	ai	r0,r0,1
+	cmpi	0,r3,0
+	b	__L308
+__L2ec:                                 # 0x000002ec (H.10.NO_SYMBOL+0x2ec)
+	ai	r7,r3,-87
+	bc	BO_IF,CR0_LT,__L324
+	bc	BO_IF,CR6_GT,__L324
+	a	r8,r5,r7
+	lbzu	r3,1(r4)
+	ai	r0,r0,1
+	cmpi	0,r3,0
+__L308:                                 # 0x00000308 (H.10.NO_SYMBOL+0x308)
+	st	r0,0(r6)
+	bc	BO_IF,CR0_EQ,__L324
+	cmpi	6,r3,48
+	cmpi	0,r3,57
+	cmpi	1,r3,97
+	cmpi	7,r3,102
+	b	__L2a0
+__L324:                                 # 0x00000324 (H.10.NO_SYMBOL+0x324)
+	cmpi	1,r3,0
+	bc	BO_IF,CR1_VX,__L23c
+	ai	r4,r0,-1
+	st	r4,0(r6)
+	l	r3,T.64.value(RTOC)
+	ai	SP,SP,64
+	l	r4,T.48.last_token(RTOC)
+	b	__L248
+__L344:                                 # 0x00000344 (H.10.NO_SYMBOL+0x344)
+	cmpi	0,r4,0
+	ai	r3,r5,1
+	ai	r5,r5,2
+	st	r5,0(r6)
+	bc	BO_IF,CR0_EQ,__L39c
+	cmpi	6,r4,48
+	cmpi	0,r4,55
+	ai	r8,r4,-48
+	rlinm	r7,r0,3,0,28
+__L368:                                 # 0x00000368 (H.10.NO_SYMBOL+0x368)
+	bc	BO_IF,CR6_LT,__L39c
+	bc	BO_IF,CR0_GT,__L39c
+	lbzu	r4,1(r3)
+	ai	r5,r5,1
+	cmpi	1,r4,0
+	a	r0,r8,r7
+	st	r5,0(r6)
+	ai	r8,r4,-48
+	bc	BO_IF,CR1_VX,__L39c
+	cmpi	6,r4,48
+	cmpi	0,r4,55
+	rlinm	r7,r0,3,0,28
+	b	__L368
+__L39c:                                 # 0x0000039c (H.10.NO_SYMBOL+0x39c)
+	cmpi	0,r4,0
+	bc	BO_IF,CR0_EQ,__L3ac
+	ai	r4,r5,-1
+	st	r4,0(r6)
+__L3ac:                                 # 0x000003ac (H.10.NO_SYMBOL+0x3ac)
+	l	r3,T.64.value(RTOC)
+	ai	SP,SP,64
+	l	r4,T.48.last_token(RTOC)
+	st	r0,0(r3)
+	cal	r3,48(r0)
+	st	r3,0(r4)
+	bcr	BO_ALWAYS,CR0_LT
+__L3c8:                                 # 0x000003c8 (H.10.NO_SYMBOL+0x3c8)
+	cmpi	1,r3,122
+	cal	r4,0(r0)
+	bc	BO_IF_NOT,CR6_EQ,__L490
+	lbz	r0,1(r5)
+	ai	r3,r5,2
+	cmpi	0,r0,0
+	st	r3,0(r6)
+	bc	BO_IF,CR0_EQ,__L464
+	cmpi	1,r0,39
+	cmpi	6,r0,127
+	cmpi	0,r0,128
+	rlinm	r5,r4,8,0,23
+__L3f8:                                 # 0x000003f8 (H.10.NO_SYMBOL+0x3f8)
+	cror	CR1_VX,CR1_VX,CR6_GT
+	rlinm	r7,r4,16,0,15
+	bc	BO_IF,CR1_VX,__L418
+	a	r4,r0,r5
+	lbz	r0,0(r3)
+	ai	r3,r3,1
+	cmpi	0,r0,0
+	b	__L448
+__L418:                                 # 0x00000418 (H.10.NO_SYMBOL+0x418)
+	rlinm	r5,r0,8,0,23
+	a	r7,r7,r5
+	bc	BO_IF,CR0_LT,__L464
+	lbz	r5,0(r3)
+	cmpi	1,r5,0
+	bc	BO_IF,CR1_VX,__L464
+	ai	r3,r3,1
+	a	r4,r5,r7
+	st	r3,0(r6)
+	lbz	r0,0(r3)
+	ai	r3,r3,1
+	cmpi	0,r0,0
+__L448:                                 # 0x00000448 (H.10.NO_SYMBOL+0x448)
+	cmpi	1,r0,39
+	cmpi	6,r0,127
+	st	r3,0(r6)
+	bc	BO_IF,CR0_EQ,__L464
+	cmpi	0,r0,128
+	rlinm	r5,r4,8,0,23
+	b	__L3f8
+__L464:                                 # 0x00000464 (H.10.NO_SYMBOL+0x464)
+	cmpi	0,r0,0
+	bc	BO_IF,CR0_EQ,__L474
+	ai	r3,r3,-1
+	st	r3,0(r6)
+__L474:                                 # 0x00000474 (H.10.NO_SYMBOL+0x474)
+	l	r3,T.64.value(RTOC)
+	ai	SP,SP,64
+	l	r5,T.48.last_token(RTOC)
+	st	r4,0(r3)
+	cal	r3,48(r0)
+	st	r3,0(r5)
+	bcr	BO_ALWAYS,CR0_LT
+__L490:                                 # 0x00000490 (H.10.NO_SYMBOL+0x490)
+	cmpi	6,r3,65
+	cmpi	7,r3,90
+	bc	BO_IF,CR0_LT,__L4a0
+	bc	BO_IF_NOT,CR1_FEX,__L4b0
+__L4a0:                                 # 0x000004a0 (H.10.NO_SYMBOL+0x4a0)
+	cmpi	1,r3,61
+	cmpi	0,r3,33
+	cror	CR6_EQ,CR6_LT,CR7_GT
+	bc	BO_IF,CR6_EQ,__L4dc
+__L4b0:                                 # 0x000004b0 (H.10.NO_SYMBOL+0x4b0)
+	bc	BO_IF_NOT,CR7_GT,__L4bc
+	ai	r5,r3,-71
+	b	__L4c0
+__L4bc:                                 # 0x000004bc (H.10.NO_SYMBOL+0x4bc)
+	ai	r5,r3,-65
+__L4c0:                                 # 0x000004c0 (H.10.NO_SYMBOL+0x4c0)
+	l	r3,T.64.value(RTOC)
+	ai	SP,SP,64
+	l	r4,T.48.last_token(RTOC)
+	st	r5,0(r3)
+	cal	r3,118(r0)
+	st	r3,0(r4)
+	bcr	BO_ALWAYS,CR0_LT
+__L4dc:                                 # 0x000004dc (H.10.NO_SYMBOL+0x4dc)
+	cmpi	6,r3,60
+	bc	BO_IF_NOT,CR1_VX,__L50c
+	lbz	r0,1(r5)
+	ai	r4,r5,2
+	cmpli	1,r0,0x003d
+	bc	BO_IF_NOT,CR1_VX,__L50c
+	st	r4,0(r6)
+	ai	SP,SP,64
+	l	r4,T.48.last_token(RTOC)
+	cal	r3,317(r0)
+	st	r3,0(r4)
+	bcr	BO_ALWAYS,CR0_LT
+__L50c:                                 # 0x0000050c (H.10.NO_SYMBOL+0x50c)
+	cmpi	1,r3,62
+	bc	BO_IF_NOT,CR0_EQ,__L53c
+	lbz	r4,1(r5)
+	ai	r0,r5,2
+	cmpli	0,r4,0x003d
+	bc	BO_IF_NOT,CR0_EQ,__L53c
+	ai	SP,SP,64
+	l	r4,T.48.last_token(RTOC)
+	cal	r3,289(r0)
+	st	r0,0(r6)
+	st	r3,0(r4)
+	bcr	BO_ALWAYS,CR0_LT
+__L53c:                                 # 0x0000053c (H.10.NO_SYMBOL+0x53c)
+	bc	BO_IF_NOT,CR6_EQ,__L568
+	lbz	r0,1(r5)
+	ai	r4,r5,2
+	cmpli	0,r0,0x003c
+	bc	BO_IF_NOT,CR0_EQ,__L568
+	st	r4,0(r6)
+	ai	SP,SP,64
+	l	r4,T.48.last_token(RTOC)
+	cal	r3,316(r0)
+	st	r3,0(r4)
+	bcr	BO_ALWAYS,CR0_LT
+__L568:                                 # 0x00000568 (H.10.NO_SYMBOL+0x568)
+	bc	BO_IF_NOT,CR1_VX,__L594
+	lbz	r4,1(r5)
+	ai	r5,r5,2
+	cmpli	0,r4,0x003e
+	bc	BO_IF_NOT,CR0_EQ,__L594
+	ai	SP,SP,64
+	l	r4,T.48.last_token(RTOC)
+	cal	r3,318(r0)
+	st	r5,0(r6)
+	st	r3,0(r4)
+	bcr	BO_ALWAYS,CR0_LT
+__L594:                                 # 0x00000594 (H.10.NO_SYMBOL+0x594)
+	l	r4,T.48.last_token(RTOC)
+	ai	SP,SP,64
+	st	r3,0(r4)
+	bcr	BO_ALWAYS,CR0_LT
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x41			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x00			# GPR_SAVED=0
+	.byte	0x00			# FIXEDPARMS=0
+	.byte	0x00			# FLOATPARMS=0,PARMSONSTK=0
+	.long	0x000004cc		# TB_OFFSET
+	.short	5			# NAME_LEN
+	.byte	"token"
+	.byte	0			# padding
+# End of traceback table
+.expr:                                  # 0x000005bc (H.10.NO_SYMBOL+0x5bc)
+	mfspr	r0,LR
+	stm	r27,-20(SP)
+	mfcr	r12
+	st	r0,8(SP)
+	l	r0,T.32._calc_c_(RTOC)
+	st	r12,4(SP)
+	stu	SP,-96(SP)
+	l	r30,T.72.lvalue(RTOC)
+	ai	r31,r0,64
+	l	r29,T.48.last_token(RTOC)
+	bl	.aexpr
+__L5e8:                                 # 0x000005e8 (H.10.NO_SYMBOL+0x5e8)
+	l	r0,0(r29)
+	cal	r28,0(r3)
+	cmpi	0,r0,-1
+	l	r27,0(r30)
+	bc	BO_IF,CR0_EQ,__L7a4
+	cmpi	0,r0,289
+	cmpi	7,r0,63
+	cmpi	1,r0,60
+	cmpi	4,r0,41
+__L60c:                                 # 0x0000060c (H.10.NO_SYMBOL+0x60c)
+	bc	BO_IF,CR7_EQ,__L730
+	cmpi	3,r0,317
+	cmpi	6,r0,61
+	cmpi	5,r0,316
+	bc	BO_IF,CR7_GT,__L6d4
+	bc	BO_IF,CR1_VX,__L6b4
+	cmpi	0,r0,62
+	cmpi	7,r0,58
+	bc	BO_IF,CR1_FEX,__L648
+	bc	BO_IF,CR4_EQ,__L638
+	bc	BO_IF_NOT,CR7_EQ,__L778
+__L638:                                 # 0x00000638 (H.10.NO_SYMBOL+0x638)
+	cal	r3,0(r28)
+	l	r0,104(SP)
+	l	r12,100(SP)
+	b	__L7b8
+__L648:                                 # 0x00000648 (H.10.NO_SYMBOL+0x648)
+	bc	BO_IF,CR6_EQ,__L674
+	bc	BO_IF_NOT,CR0_EQ,__L778
+	bl	.aexpr
+	cmp	0,r28,r3
+	cal	r28,1(r0)
+	bc	BO_IF,CR0_GT,__L784
+	cal	r28,0(r0)
+	l	r0,0(r29)
+	cmpi	0,r0,-1
+__L66c:                                 # 0x0000066c (H.10.NO_SYMBOL+0x66c)
+	bc	BO_IF,CR0_EQ,__L7a4
+	b	__L790
+__L674:                                 # 0x00000674 (H.10.NO_SYMBOL+0x674)
+	cmpi	0,r27,0
+	bc	BO_IF,CR0_LT,__L6a0
+	bl	.expr
+	l	r9,T.76.variable(RTOC)
+	rlinm	r10,r27,2,0,29
+	stx	r3,r9,r10
+	l	r0,104(SP)
+	l	r12,100(SP)
+	ai	SP,SP,96
+	mtcrf	24,r12
+	b	__L7c0
+__L6a0:                                 # 0x000006a0 (H.10.NO_SYMBOL+0x6a0)
+	l	r0,T.32._calc_c_(RTOC)
+	ai	r3,r0,48
+	bl	.error
+	cal	r3,0(r0)
+	b	__L7b0
+__L6b4:                                 # 0x000006b4 (H.10.NO_SYMBOL+0x6b4)
+	bl	.aexpr
+	cmp	0,r28,r3
+	cal	r28,1(r0)
+	bc	BO_IF,CR0_LT,__L784
+	cal	r28,0(r0)
+	l	r0,0(r29)
+	cmpi	0,r0,-1
+	b	__L66c
+__L6d4:                                 # 0x000006d4 (H.10.NO_SYMBOL+0x6d4)
+	cmpi	1,r0,318
+	bc	BO_IF,CR0_EQ,__L718
+	bc	BO_IF,CR5_EQ,__L70c
+	bc	BO_IF,CR3_EQ,__L6f8
+	bc	BO_IF_NOT,CR1_VX,__L778
+	bl	.aexpr
+	sra	r28,r28,r3
+	l	r0,0(r29)
+	b	__L788
+__L6f8:                                 # 0x000006f8 (H.10.NO_SYMBOL+0x6f8)
+	bl	.aexpr
+	sf	r0,r3,r28
+	cntlz	r0,r0
+	rlinm	r28,r0,27,5,31
+	b	__L784
+__L70c:                                 # 0x0000070c (H.10.NO_SYMBOL+0x70c)
+	bl	.aexpr
+	sl	r28,r28,r3
+	b	__L784
+__L718:                                 # 0x00000718 (H.10.NO_SYMBOL+0x718)
+	bl	.aexpr
+	sf	r0,r3,r28
+	cntlz	r0,r0
+	ai	r0,r0,-32
+	rlinm	r28,r0,1,31,31
+	b	__L784
+__L730:                                 # 0x00000730 (H.10.NO_SYMBOL+0x730)
+	bl	.expr
+	l	r0,0(r29)
+	cmpi	0,r28,0
+	cmpi	1,r0,58
+	st	r3,56(SP)
+	bc	BO_IF,CR1_VX,__L760
+	l	r0,T.32._calc_c_(RTOC)
+	ai	r3,r0,12
+	bl	.error
+	l	r3,56(SP)
+	l	r0,104(SP)
+	b	__L7b4
+__L760:                                 # 0x00000760 (H.10.NO_SYMBOL+0x760)
+	bc	BO_IF_NOT,CR0_EQ,__L76c
+	bl	.aexpr
+	b	__L5e8
+__L76c:                                 # 0x0000076c (H.10.NO_SYMBOL+0x76c)
+	bl	.expr
+	l	r3,56(SP)
+	b	__L7b0
+__L778:                                 # 0x00000778 (H.10.NO_SYMBOL+0x778)
+	cal	r3,0(r31)
+	bl	.error
+	bl	.token
+__L784:                                 # 0x00000784 (H.10.NO_SYMBOL+0x784)
+	l	r0,0(r29)
+__L788:                                 # 0x00000788 (H.10.NO_SYMBOL+0x788)
+	cmpi	0,r0,-1
+	bc	BO_IF,CR0_EQ,__L7a4
+__L790:                                 # 0x00000790 (H.10.NO_SYMBOL+0x790)
+	cmpi	0,r0,289
+	cmpi	7,r0,63
+	cmpi	1,r0,60
+	cmpi	4,r0,41
+	b	__L60c
+__L7a4:                                 # 0x000007a4 (H.10.NO_SYMBOL+0x7a4)
+	cal	r0,-1(r0)
+	cal	r3,0(r28)
+	st	r0,0(r29)
+__L7b0:                                 # 0x000007b0 (H.10.NO_SYMBOL+0x7b0)
+	l	r0,104(SP)
+__L7b4:                                 # 0x000007b4 (H.10.NO_SYMBOL+0x7b4)
+	l	r12,100(SP)
+__L7b8:                                 # 0x000007b8 (H.10.NO_SYMBOL+0x7b8)
+	ai	SP,SP,96
+	mtcrf	24,r12
+__L7c0:                                 # 0x000007c0 (H.10.NO_SYMBOL+0x7c0)
+	mtspr	LR,r0
+	lm	r27,-20(SP)
+	bcr	BO_ALWAYS,CR0_LT
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x43			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=1,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x05			# GPR_SAVED=5
+	.byte	0x00			# FIXEDPARMS=0
+	.byte	0x00			# FLOATPARMS=0,PARMSONSTK=0
+	.long	0x00000210		# TB_OFFSET
+	.short	4			# NAME_LEN
+	.byte	"expr"
+	.byte	0			# padding
+	.byte	0			# padding
+# End of traceback table
+.aexpr:                                 # 0x000007e4 (H.10.NO_SYMBOL+0x7e4)
+	mfspr	r0,LR
+	stm	r30,-8(SP)
+	st	r0,8(SP)
+	stu	SP,-80(SP)
+	bl	.mexpr
+	l	r31,T.48.last_token(RTOC)
+	cal	r30,0(r3)
+	l	r0,0(r31)
+	cmpi	0,r0,-1
+	bc	BO_IF,CR0_EQ,__L86c
+	cmpi	5,r0,45
+	cmpi	6,r0,38
+	cmpi	0,r0,94
+__L818:                                 # 0x00000818 (H.10.NO_SYMBOL+0x818)
+	bc	BO_IF,CR5_EQ,__L890
+	cmpi	1,r0,124
+	cmpi	7,r0,43
+	bc	BO_IF,CR5_GT,__L850
+	bc	BO_IF,CR6_EQ,__L844
+	bc	BO_IF_NOT,CR7_EQ,__L86c
+	bl	.mexpr
+	a	r30,r30,r3
+	l	r0,0(r31)
+	cmpi	0,r0,-1
+	b	__L8a0
+__L844:                                 # 0x00000844 (H.10.NO_SYMBOL+0x844)
+	bl	.mexpr
+	and	r30,r30,r3
+	b	__L898
+__L850:                                 # 0x00000850 (H.10.NO_SYMBOL+0x850)
+	bc	BO_IF,CR0_EQ,__L884
+	bc	BO_IF_NOT,CR1_VX,__L86c
+	bl	.mexpr
+	or	r30,r30,r3
+	l	r0,0(r31)
+	cmpi	0,r0,-1
+	bc	BO_IF_NOT,CR0_EQ,__L8a4
+__L86c:                                 # 0x0000086c (H.10.NO_SYMBOL+0x86c)
+	cal	r3,0(r30)
+	l	r12,88(SP)
+	ai	SP,SP,80
+	mtspr	LR,r12
+	lm	r30,-8(SP)
+	bcr	BO_ALWAYS,CR0_LT
+__L884:                                 # 0x00000884 (H.10.NO_SYMBOL+0x884)
+	bl	.mexpr
+	xor	r30,r3,r30
+	b	__L898
+__L890:                                 # 0x00000890 (H.10.NO_SYMBOL+0x890)
+	bl	.mexpr
+	sf	r30,r3,r30
+__L898:                                 # 0x00000898 (H.10.NO_SYMBOL+0x898)
+	l	r0,0(r31)
+	cmpi	0,r0,-1
+__L8a0:                                 # 0x000008a0 (H.10.NO_SYMBOL+0x8a0)
+	bc	BO_IF,CR0_EQ,__L86c
+__L8a4:                                 # 0x000008a4 (H.10.NO_SYMBOL+0x8a4)
+	cmpi	5,r0,45
+	cmpi	6,r0,38
+	cmpi	0,r0,94
+	b	__L818
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x41			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x02			# GPR_SAVED=2
+	.byte	0x00			# FIXEDPARMS=0
+	.byte	0x00			# FLOATPARMS=0,PARMSONSTK=0
+	.long	0x000000d0		# TB_OFFSET
+	.short	5			# NAME_LEN
+	.byte	"aexpr"
+	.byte	0			# padding
+# End of traceback table
+.mexpr:                                 # 0x000008cc (H.10.NO_SYMBOL+0x8cc)
+	mfspr	r0,LR
+	stm	r30,-8(SP)
+	st	r0,8(SP)
+	stu	SP,-80(SP)
+	bl	.term
+	l	r31,T.48.last_token(RTOC)
+	cal	r30,0(r3)
+	l	r0,0(r31)
+	cmpi	0,r0,-1
+	bc	BO_IF,CR0_EQ,__L940
+	cmpi	7,r0,37
+	cmpi	1,r0,94
+	cmpi	0,r0,42
+	cmpi	6,r0,47
+	bc	BO_IF,CR7_EQ,__L970
+__L908:                                 # 0x00000908 (H.10.NO_SYMBOL+0x908)
+	bc	BO_IF,CR0_EQ,__L964
+	bc	BO_IF,CR6_EQ,__L958
+	bc	BO_IF_NOT,CR1_VX,__L940
+	bl	.mexpr
+	xor	r30,r30,r3
+__L91c:                                 # 0x0000091c (H.10.NO_SYMBOL+0x91c)
+	l	r0,0(r31)
+	cmpi	0,r0,-1
+	bc	BO_IF,CR0_EQ,__L940
+	cmpi	7,r0,37
+	cmpi	1,r0,94
+	cmpi	0,r0,42
+	cmpi	6,r0,47
+	bc	BO_IF,CR7_EQ,__L970
+	b	__L908
+__L940:                                 # 0x00000940 (H.10.NO_SYMBOL+0x940)
+	cal	r3,0(r30)
+	l	r12,88(SP)
+	ai	SP,SP,80
+	mtspr	LR,r12
+	lm	r30,-8(SP)
+	bcr	BO_ALWAYS,CR0_LT
+__L958:                                 # 0x00000958 (H.10.NO_SYMBOL+0x958)
+	bl	.mexpr
+	divs	r30,r30,r3
+	b	__L91c
+__L964:                                 # 0x00000964 (H.10.NO_SYMBOL+0x964)
+	bl	.mexpr
+	muls	r30,r3,r30
+	b	__L91c
+__L970:                                 # 0x00000970 (H.10.NO_SYMBOL+0x970)
+	bl	.mexpr
+	divs	r0,r30,r3
+	mfspr	r30,MQ
+	b	__L91c
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x41			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x02			# GPR_SAVED=2
+	.byte	0x00			# FIXEDPARMS=0
+	.byte	0x00			# FLOATPARMS=0,PARMSONSTK=0
+	.long	0x000000b4		# TB_OFFSET
+	.short	5			# NAME_LEN
+	.byte	"mexpr"
+	.byte	0			# padding
+# End of traceback table
+.term:                                  # 0x00000998 (H.10.NO_SYMBOL+0x998)
+	mfspr	r0,LR
+	stm	r30,-8(SP)
+	l	r31,T.72.lvalue(RTOC)
+	st	r0,8(SP)
+	cal	r0,-1(r0)
+	stu	SP,-80(SP)
+	st	r0,0(r31)
+	bl	.token
+	l	r30,T.48.last_token(RTOC)
+	l	r3,T.32._calc_c_(RTOC)
+	l	r0,0(r30)
+	ai	r3,r3,80
+	cmpi	0,r0,-1
+	bc	BO_IF_NOT,CR0_EQ,__L9d8
+	bl	.error
+	l	r0,0(r30)
+__L9d8:                                 # 0x000009d8 (H.10.NO_SYMBOL+0x9d8)
+	cmpi	6,r0,45
+	cmpi	0,r0,33
+	cmpi	1,r0,48
+	bc	BO_IF,CR6_EQ,__La40
+	cmpi	5,r0,118
+	cmpi	7,r0,40
+	bc	BO_IF,CR6_GT,__La04
+	bc	BO_IF,CR0_EQ,__La4c
+	bc	BO_IF,CR7_EQ,__La5c
+	bl	.token
+	b	__La84
+__La04:                                 # 0x00000a04 (H.10.NO_SYMBOL+0xa04)
+	l	r3,T.64.value(RTOC)
+	l	r9,0(r3)
+	bc	BO_IF,CR1_VX,__La1c
+	bc	BO_IF,CR5_EQ,__La28
+	bl	.token
+	b	__La84
+__La1c:                                 # 0x00000a1c (H.10.NO_SYMBOL+0xa1c)
+	bl	.token
+	cal	r3,0(r9)
+	b	__La94
+__La28:                                 # 0x00000a28 (H.10.NO_SYMBOL+0xa28)
+	st	r9,0(r31)
+	bl	.token
+	l	r3,T.76.variable(RTOC)
+	rlinm	r4,r9,2,0,29
+	lx	r3,r3,r4
+	b	__La94
+__La40:                                 # 0x00000a40 (H.10.NO_SYMBOL+0xa40)
+	bl	.term
+	neg	r3,r3
+	b	__La94
+__La4c:                                 # 0x00000a4c (H.10.NO_SYMBOL+0xa4c)
+	bl	.term
+	cntlz	r0,r3
+	rlinm	r3,r0,27,5,31
+	b	__La94
+__La5c:                                 # 0x00000a5c (H.10.NO_SYMBOL+0xa5c)
+	bl	.expr
+	l	r0,0(r30)
+	st	r3,56(SP)
+	cmpi	0,r0,41
+	l	r0,T.32._calc_c_(RTOC)
+	ai	r3,r0,96
+	bcl	BO_IF_NOT,CR0_EQ,.error
+	bl	.token
+	l	r3,56(SP)
+	b	__La94
+__La84:                                 # 0x00000a84 (H.10.NO_SYMBOL+0xa84)
+	l	r0,T.32._calc_c_(RTOC)
+	ai	r3,r0,120
+	bl	.error
+	cal	r3,0(r0)
+__La94:                                 # 0x00000a94 (H.10.NO_SYMBOL+0xa94)
+	l	r12,88(SP)
+	ai	SP,SP,80
+	mtspr	LR,r12
+	lm	r30,-8(SP)
+	bcr	BO_ALWAYS,CR0_LT
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x41			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x02			# GPR_SAVED=2
+	.byte	0x00			# FIXEDPARMS=0
+	.byte	0x00			# FLOATPARMS=0,PARMSONSTK=0
+	.long	0x00000110		# TB_OFFSET
+	.short	4			# NAME_LEN
+	.byte	"term"
+	.byte	0			# padding
+	.byte	0			# padding
+# End of traceback table
+.main:                                  # 0x00000ac0 (H.10.NO_SYMBOL+0xac0)
+	mfspr	r0,LR
+	stm	r27,-20(SP)
+	l	r30,T.56._iob(RTOC)
+	st	r0,8(SP)
+	stu	SP,-4192(SP)
+	ai	r31,SP,56
+	cal	r5,0(r30)
+	cal	r3,0(r31)
+	cal	r4,4096(r0)
+	bl	.fgets{PR}
+	cror	CR3_SO,CR3_SO,CR3_SO
+	cmpi	0,r3,0
+	l	r0,T.32._calc_c_(RTOC)
+	l	r27,T.40.ptr(RTOC)
+	ai	r28,r0,136
+	bc	BO_IF,CR0_EQ,__Lb58
+	ai	r29,r30,32
+	st	r31,0(r27)
+	bl	.expr
+__Lb0c:                                 # 0x00000b0c (H.10.NO_SYMBOL+0xb0c)
+	cal	r6,0(r3)
+	cal	r5,0(r3)
+	cal	r3,0(r28)
+	ai	r4,SP,56
+	bl	.printf{PR}
+	cror	CR3_SO,CR3_SO,CR3_SO
+	cal	r3,0(r29)
+	bl	.fflush{PR}
+	cror	CR3_SO,CR3_SO,CR3_SO
+	ai	r3,SP,56
+	cal	r4,4096(r0)
+	cal	r5,0(r30)
+	bl	.fgets{PR}
+	cror	CR3_SO,CR3_SO,CR3_SO
+	cmpi	0,r3,0
+	bc	BO_IF,CR0_EQ,__Lb58
+	st	r31,0(r27)
+	bl	.expr
+	b	__Lb0c
+__Lb58:                                 # 0x00000b58 (H.10.NO_SYMBOL+0xb58)
+	cal	r3,0(r0)
+	l	r12,4200(SP)
+	ai	SP,SP,4192
+	mtspr	LR,r12
+	lm	r27,-20(SP)
+	bcr	BO_ALWAYS,CR0_LT
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x41			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x05			# GPR_SAVED=5
+	.byte	0x00			# FIXEDPARMS=0
+	.byte	0x00			# FLOATPARMS=0,PARMSONSTK=0
+	.long	0x000000b0		# TB_OFFSET
+	.short	4			# NAME_LEN
+	.byte	"main"
+	.byte	0			# padding
+	.byte	0			# padding
+# End of traceback table
+# End	csect	H.10.NO_SYMBOL{PR}
+
+# .data section
+
+
+	.toc	                        # 0x00000b88 
+T.36.line_skip:
+	.tc	H.36.line_skip{TC},line_skip{DS}
+T.40.ptr:
+	.tc	H.40.ptr{TC},ptr        
+T.44.last_ptr:
+	.tc	H.44.last_ptr{TC},last_ptr
+T.48.last_token:
+	.tc	H.48.last_token{TC},last_token
+T.52.error:
+	.tc	H.52.error{TC},error{DS}
+T.56._iob:
+	.tc	H.56._iob{TC},_iob{UA}  
+T.32._calc_c_:
+	.tc	H.32._calc_c_{TC},E.30._calc_c_{RW}
+T.60.token:
+	.tc	H.60.token{TC},token{DS}
+T.64.value:
+	.tc	H.64.value{TC},value    
+T.68.expr:
+	.tc	H.68.expr{TC},expr{DS}  
+T.72.lvalue:
+	.tc	H.72.lvalue{TC},lvalue  
+T.76.variable:
+	.tc	H.76.variable{TC},variable
+T.80.aexpr:
+	.tc	H.80.aexpr{TC},aexpr{DS}
+T.84.mexpr:
+	.tc	H.84.mexpr{TC},mexpr{DS}
+T.88.term:
+	.tc	H.88.term{TC},term{DS}  
+T.92.main:
+	.tc	H.92.main{TC},main{DS}  
+
+
+	.csect	line_skip{DS}           
+	.long	.line_skip              # "\0\0\0\0"
+	.long	TOC{TC0}                # "\0\0\v\210"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	line_skip{DS}
+
+
+	.csect	error{DS}               
+	.long	.error                  # "\0\0\0|"
+	.long	TOC{TC0}                # "\0\0\v\210"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	error{DS}
+
+
+	.csect	token{DS}               
+	.long	.token                  # "\0\0\0\330"
+	.long	TOC{TC0}                # "\0\0\v\210"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	token{DS}
+
+
+	.csect	expr{DS}                
+	.long	.expr                   # "\0\0\005\274"
+	.long	TOC{TC0}                # "\0\0\v\210"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	expr{DS}
+
+
+	.csect	aexpr{DS}               
+	.long	.aexpr                  # "\0\0\a\344"
+	.long	TOC{TC0}                # "\0\0\v\210"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	aexpr{DS}
+
+
+	.csect	mexpr{DS}               
+	.long	.mexpr                  # "\0\0\b\314"
+	.long	TOC{TC0}                # "\0\0\v\210"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	mexpr{DS}
+
+
+	.csect	term{DS}                
+	.long	.term                   # "\0\0\t\230"
+	.long	TOC{TC0}                # "\0\0\v\210"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	term{DS}
+
+
+	.csect	main{DS}                
+	.long	.main                   # "\0\0\n\300"
+	.long	TOC{TC0}                # "\0\0\v\210"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	main{DS}
+
+
+	.csect	E.30._calc_c_{RW}, 3    
+	.long	0x2573206f              # "%s o"
+	.long	0x6e202573              # "n %s"
+	.long	0x0a000000              # "\n\0\0\0"
+	.long	0x3f206578              # "? ex"
+	.long	0x70726573              # "pres"
+	.long	0x73696f6e              # "sion"
+	.long	0x206e6f74              # " not"
+	.long	0x20746572              # " ter"
+	.long	0x6d696e61              # "mina"
+	.long	0x74656420              # "ted "
+	.long	0x77697468              # "with"
+	.long	0x203a0000              # " :\0\0"
+	.long	0x42616420              # "Bad "
+	.long	0x61737369              # "assi"
+	.long	0x676e6d65              # "gnme"
+	.long	0x6e740000              # "nt\0\0"
+	.long	0x42616420              # "Bad "
+	.long	0x65787072              # "expr"
+	.long	0x65737369              # "essi"
+	.long	0x6f6e0000              # "on\0\0"
+	.long	0x5465726d              # "Term"
+	.long	0x20657870              # " exp"
+	.long	0x65637465              # "ecte"
+	.long	0x64000000              # "d\0\0\0"
+	.long	0x556e6261              # "Unba"
+	.long	0x6c616e63              # "lanc"
+	.long	0x65642070              # "ed p"
+	.long	0x6172656e              # "aren"
+	.long	0x74687369              # "thsi"
+	.long	0x73000000              # "s\0\0\0"
+	.long	0x556e6b6e              # "Unkn"
+	.long	0x6f776e20              # "own "
+	.long	0x7465726d              # "term"
+	.long	0x00000000              # "\0\0\0\0"
+	.long	0x2573203d              # "%s ="
+	.long	0x20307825              # " 0x%"
+	.long	0x30387820              # "08x "
+	.long	0x3d202564              # "= %d"
+# End	csect	E.30._calc_c_{RW}
+	.long	0x0a000000              # "\n\0\0\0"
+
+
+
+# .bss section
+	.comm	ptr, 4                  # 0x00000cc4 
+	.comm	last_ptr, 4             # 0x00000cc8 
+	.comm	last_token, 4           # 0x00000ccc 
+	.comm	value, 4                # 0x00000cd0 
+	.comm	lvalue, 4               # 0x00000cd4 
+	.comm	variable, 192, 3        # 0x00000cd8 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compile-m68k.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,576 @@
+/*
+    Simple Compiler
+	$Id$
+ */
+
+#include <stdio.h>
+
+char *ptr,*last_ptr,*before;
+int  value,lvalue;
+int  last_token;
+int  label;
+
+const int   T_EQUAL	= (0x100|'=');
+const int   T_NEQUAL	= (0x100|'!');
+const int   T_LSHIFT	= (0x100|'<');
+const int   T_RSHIFT	= (0x100|'>');
+
+enum opcode {
+  O_SUB  = 1;
+  O_ADD  = 2;
+  O_MUL  = 3;
+  O_DIV  = 4;
+  O_AND  = 5;
+  O_OR   = 6;
+  O_XOR  = 7;
+  O_ASL  = 8;
+  O_ASR  = 9;
+  O_MOD  = 10;
+  O_LT   = 11;
+  O_GT   = 12;
+  O_EQ   = 13;
+  O_NE   = 14;
+};
+
+static void error(char *);
+static void  expr();
+static void  aexpr();
+static void  mexpr();
+static void  term();
+static int  token();
+
+static void emit_push();
+static void emit_compare() ;
+static void emit_store(int);
+static void emit_push();
+static void emit_calc(enum opcode);
+static void emit_value(int) ;
+static void emit_load(int);
+static void emit_comment();
+static void emit_neg();
+static void emit_not();
+static void emit_label(int);
+static void emit_jump(int);
+static void emit_cond(int);
+
+
+static void
+line_skip()
+{
+    while(*ptr++);
+    ptr--;
+    last_ptr = ptr;  
+    last_token = EOF;
+}
+
+static void
+error(description)
+char *description;
+{
+    fprintf(stderr,"%s on %s\n",description,last_ptr);
+    line_skip();
+}
+
+static int
+token()
+{
+    int c,d;
+
+    last_ptr = ptr;  /* for error position */
+    c= *ptr;
+    while(c<=' ' && c) {
+	c = *++ptr;
+    }
+    if(!c) {
+	last_token = EOF;
+	return last_token;
+    }
+    ptr++;
+    if ('/'==c && ('/'== *ptr || '*'== *ptr)) {       /* comment */ 
+	line_skip();
+	return EOF;
+    }
+    if('1'<=c && c<='9') {     /* Decimal */
+	d = c-'0';
+	while(c= *ptr++) {
+	    if('0'<=c && c<='9') {
+		d = d*10 + (c - '0');
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if ('0'==c && 'x'== *ptr) {       /* Hex */
+	ptr++;
+	d = 0;
+	while(c= *ptr++) {
+	    if('0'<=c && c<='9') {
+		d = d*16 + (c - '0');
+	    } else if('a'<=c && c<='f') {
+		d = d*16 + (c - 'a' + 10);
+	    } else if('A'<=c && c<='F') {
+		d = d*16 + (c - 'a' + 10);
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if ('0'==c) {       /* Octal */
+	d = c-'0';
+	while(c= *ptr++) {
+	    if('0'<=c && c<='7') {
+		d = d*8 + (c - '0');
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if ('\''==c) {      /* Ascii */
+	d = 0;
+	while(c= *ptr++) {
+	    if('\''!=c && c<=0x7f) {
+		d = d*256 + c;
+	    } else if(c>=0x80 && *ptr) {
+		d = d*256*256 + c*256 + *ptr++;
+	    } else {
+		break;
+	    }
+	}
+	if(c!='\''|| c==0) { ptr--; }
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if (('a'<=c && c<='z')  ||   /* variable */
+		('A'<=c && c<='Z')) {
+	value = ((c>'Z')?c-'a'+'Z'-'A'+1:c-'A');
+	last_token = 'v';
+	return last_token;
+    } else if ('='==c && '='== *ptr) {       /* equal */
+	ptr++;
+	last_token = T_EQUAL;
+	return last_token;
+    } else if ('!'==c && '='== *ptr) {       /* equal */
+	ptr++;
+	last_token = T_NEQUAL;
+    } else if ('<'==c && '<'== *ptr) {       /* shift */
+	ptr++;
+	last_token = T_LSHIFT;
+	return last_token;
+    } else if ('>'==c && '>'== *ptr) {       /* shift */
+	ptr++;
+	last_token = T_RSHIFT;
+	return last_token;
+    } else {
+	last_token = c;
+	return last_token;
+	return c;
+    }
+}
+
+static void
+expr()
+{
+    int d,assign;
+
+    emit_comment();
+    aexpr();
+    assign = lvalue;
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '<': 
+            emit_push();
+	    aexpr(); 
+            emit_compare(O_LT);
+	    break;
+	case '>': 
+            emit_push();
+	    aexpr(); 
+            emit_compare(O_GT);
+	    break;
+	case T_EQUAL: 
+            emit_push();
+	    aexpr(); 
+            emit_compare(O_EQ);
+	    break;
+	case T_NEQUAL: 
+            emit_push();
+	    aexpr(); 
+            emit_compare(O_NE);
+	    break;
+	case T_LSHIFT: 
+            emit_push();
+	    aexpr(); 
+            emit_calc(O_ASL);
+	    break;
+	case T_RSHIFT: 
+            emit_push();
+	    aexpr(); 
+            emit_calc(O_ASR);
+	    break;
+	case '?': 
+	    {
+		int l_false,l_end;
+		l_false = label++;
+		l_end = label++;
+		emit_cond(l_false);
+		expr(); 
+		if(last_token != ':') {
+		    error("? expression not terminated with :");
+		    return;
+		} 
+		emit_jump(l_end);
+		emit_label(l_false);
+		expr(); 
+		emit_label(l_end);
+		return;
+	    }
+	    break;
+	case '=': 
+	    if(assign>=0) {
+		expr(); 
+		emit_store(assign);
+		return;
+	    } else {
+		error("Bad assignment");
+		return;
+	    }
+	    break;
+	case ':': 
+	case ')': 
+	    return;
+	default:
+	    error("Bad expression");
+	    token();
+	}
+    }
+    last_token = EOF;
+    return;
+}
+
+static void
+aexpr()
+{
+    int d;
+
+    emit_comment();
+    mexpr();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '^': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_XOR);
+	    break;
+	case '|': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_OR);
+	    break;
+	case '&': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_AND);
+	    break;
+	case '-': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_SUB);
+	    break;
+	case '+': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_ADD);
+	    break;
+	default:
+	    return;
+	}
+    }
+    return;
+}
+
+static void
+mexpr()
+{
+    int d;
+
+    emit_comment();
+    term();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '*': 
+	    emit_push();
+	    term();
+	    emit_calc(O_MUL);
+	    break;
+	case '/': 
+	    emit_push();
+	    term();
+	    emit_calc(O_DIV);
+	    break;
+	case '%': 
+	    emit_push();
+	    term();
+	    emit_calc(O_MOD);
+	    break;
+	default:
+	    return;
+	}
+    }
+    return;
+}
+
+static void
+term()
+{
+    int d;
+
+    lvalue= -1;
+    emit_comment();
+
+    token();
+    if(last_token==EOF) {
+	error("Term expected");
+    }
+    switch(last_token) {
+    case '0':
+	d = value;
+        emit_value(d);
+	token();
+	return;
+    case 'v':
+	d = lvalue = value;
+        emit_load(d);
+	token();
+	return;
+    case '-':
+	term();
+        emit_neg();
+	return;
+    case '!':
+	term();
+        emit_not();
+	return;
+    case '(':
+	expr();
+	if(last_token != ')') {
+	    error("Unbalanced parenthsis");
+	} 
+	token(); 
+	return;
+    default:
+	token();
+	error("Unknown term");
+	return;
+    }
+}
+
+static 
+char *intro[] = {
+    "#APP\n",    /* To process comments by GNU as */
+    "\t.file   \"output.s\"\n",
+    ".text\n",
+    "\t.align 1\n",
+    ".globl _main\n_main:\n",
+    "\tlink a6,#0\n",
+    NULL
+};
+
+static 
+char *ending[] = {
+    "\tunlk a6\n",
+    "\trts\n",
+    "_print:\n",
+    "\tlink a6,#0\n",
+    "\tmovel d0,sp@-\n",
+    "\tmovel d0,sp@-\n",
+    "\tpea _format\n",
+    "\tjbsr _printf\n",
+    "\taddqw #8,sp\n",
+    "\tunlk a6\n",
+    "\trts\n",
+    "_format:\n",
+    "\t.ascii \" = %08x %d\\12\\0\"\n",
+    "\t.align 2\n",
+    ".comm _variable,192\n",
+    NULL
+};
+
+static
+char *opcode[] = {
+    "",
+    "subl",
+    "addl",
+    "mulsl",
+    "divsl",
+    "andl",
+    "orl",
+    "eorl",
+    "asll",
+    "asrl",
+    "idiv",
+    "slt",
+    "sgt",
+    "seq",
+    "sne",
+};
+
+static void
+emit_push()
+{
+    printf("\tmovel d0,sp@-\n");
+}
+
+static void
+emit_not() 
+{
+    printf("\ttstl d0\n");
+    printf("\tsne d0\n");
+    printf("\textbl d0\n");
+}
+
+static void
+emit_compare(op) 
+enum opcode op;
+{
+    printf("\tmovel sp@,d1\n");
+    printf("\taddql #4,sp\n");
+    printf("\tcmpl d1,d0\n");
+    printf("\t%s d0\n",opcode[op]);
+    printf("\textbl d0\n");
+    printf("\tnegl d0\n");
+}
+
+static void
+emit_store(assign)
+int assign;
+{
+    printf("\tmovel d0,_variable+%d\n",assign*4);
+}
+
+
+static void
+emit_calc(op)
+int op;
+{
+    if(op==O_DIV) {
+	printf("\tmovel d0,d1\n");
+	printf("\tmovel sp@,d0\n");
+	printf("\taddql #4,sp\n");
+	printf("\tdivsl d1,d0\n");
+    } else if(op==O_MOD) {
+	printf("\tmovel d0,d2\n");
+	printf("\tmovel sp@,d0\n");
+	printf("\taddql #4,sp\n");
+	printf("\tdivsll d2,d0:d1\n");
+    } else if(op==O_ADD||op==O_MUL||op==O_AND||op==O_OR||op==O_XOR) {
+	/* commutable operator */
+	printf("\tmovel sp@,d1\n");
+	printf("\taddql #4,sp\n");
+	printf("\t%s d1,d0\n",opcode[op]);
+    } else {
+	printf("\tmovel d0,d1\n");
+	printf("\tmovel sp@,d0\n");
+	printf("\taddql #4,sp\n");
+	printf("\t%s d1,d0\n",opcode[op]);
+    }
+}
+
+static void
+emit_neg()
+{
+	printf("\tnegl d0\n");
+}
+
+static void
+emit_value(d) 
+int d;
+{
+    if(-127<=d && d<=127) {
+	printf("\tmoveq #%d,d0\n",d);
+    } else {
+	printf("\tmovel #%d,d0\n",d);
+    }
+}
+
+static void
+emit_load(d)
+int d;
+{
+    printf("\tmovel _variable+%d,d0\n",d*4);
+}
+
+static void
+emit_cond(lbl) 
+{
+    printf("\ttstl d0\n");
+    printf("\tjeq L%d\n",lbl);
+}
+
+static void
+emit_jump(lbl)
+{
+    printf("\tjra L%d\n",lbl);
+}
+
+static void
+emit_label(lbl)
+{
+    printf("L%d:\n",lbl);
+}
+
+static void
+emit_comment()
+{
+    if (before < ptr) {
+	putchar('#'); putchar('#'); putchar(' ');
+	while (before < ptr) {
+	    if(*before && *before!='\n') {
+		putchar(*before);
+	    }
+	    before++;
+	}
+	putchar('\n');
+    }
+}
+
+static void
+emit_print()
+{
+    printf("\tjbsr _print\n");
+}
+
+int
+main(int ac,char *av[]) 
+{
+    int d;
+    char **iptr,buf[BUFSIZ];
+
+    for(iptr=intro;*iptr;iptr++) {
+	printf("%s",*iptr);
+    }
+    while (fgets(buf,BUFSIZ,stdin)) {
+	ptr = buf;
+	before = buf;
+	printf("##### %s",buf);
+	fflush(stdout);
+	expr();
+	emit_print();
+	emit_comment();
+    }
+    for(iptr=ending;*iptr;iptr++) {
+	printf("%s",*iptr);
+    }
+    return 0;
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/compile.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,566 @@
+/*
+    Simple Compiler
+	$Id$
+ */
+
+#include <stdio.h>
+
+char *ptr,*last_ptr,*before;
+int  value,lvalue;
+int  last_token;
+int  label;
+
+#define   T_EQUAL	 (0x100|'=')
+#define   T_NEQUAL	 (0x100|'!')
+#define   T_LSHIFT	 (0x100|'<')
+#define   T_RSHIFT	 (0x100|'>')
+
+static void error(char *);
+static void  expr();
+static void  aexpr();
+static void  mexpr();
+static void  term();
+static int  token();
+
+enum opcode {
+  O_SUB  = 1,
+  O_ADD  = 2,
+  O_MUL  = 3,
+  O_DIV  = 4,
+  O_AND  = 5,
+  O_OR   = 6,
+  O_XOR  = 7,
+  O_ASL  = 8,
+  O_ASR  = 9,
+  O_MOD  = 10,
+  O_LT   = 11,
+  O_GT   = 12,
+  O_EQ   = 13,
+  O_NE   = 14,
+};
+
+static void emit_push();
+static void emit_compare() ;
+static void emit_store(int);
+static void emit_push();
+static void emit_calc(enum opcode);
+static void emit_value(int) ;
+static void emit_load(int);
+static void emit_comment();
+static void emit_neg();
+static void emit_not();
+static void emit_label(int);
+static void emit_jump(int);
+static void emit_cond(int);
+
+
+static void
+line_skip()
+{
+    while(*ptr++);
+    ptr--;
+    last_ptr = ptr;  
+    last_token = EOF;
+}
+
+static void
+error(description)
+char *description;
+{
+    fprintf(stderr,"%s on %s\n",description,last_ptr);
+    line_skip();
+}
+
+static int
+token()
+{
+    int c,d;
+
+    last_ptr = ptr;  /* for error position */
+    c= *ptr;
+    while(c<=' ' && c) {
+	c = *++ptr;
+    }
+    if(!c) {
+	last_token = EOF;
+	return last_token;
+    }
+    ptr++;
+    if ('/'==c && ('/'== *ptr || '*'== *ptr)) {       /* comment */ 
+	line_skip();
+	return EOF;
+    }
+    if('1'<=c && c<='9') {     /* Decimal */
+	d = c-'0';
+	while(c= *ptr++) {
+	    if('0'<=c && c<='9') {
+		d = d*10 + (c - '0');
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if ('0'==c && 'x'== *ptr) {       /* Hex */
+	ptr++;
+	d = 0;
+	while(c= *ptr++) {
+	    if('0'<=c && c<='9') {
+		d = d*16 + (c - '0');
+	    } else if('a'<=c && c<='f') {
+		d = d*16 + (c - 'a' + 10);
+	    } else if('A'<=c && c<='F') {
+		d = d*16 + (c - 'a' + 10);
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if ('0'==c) {       /* Octal */
+	d = c-'0';
+	while(c= *ptr++) {
+	    if('0'<=c && c<='7') {
+		d = d*8 + (c - '0');
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if ('\''==c) {      /* Ascii */
+	d = 0;
+	while(c= *ptr++) {
+	    if('\''!=c && c<=0x7f) {
+		d = d*256 + c;
+	    } else if(c>=0x80 && *ptr) {
+		d = d*256*256 + c*256 + *ptr++;
+	    } else {
+		break;
+	    }
+	}
+	if(c!='\''|| c==0) { ptr--; }
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if (('a'<=c && c<='z')  ||   /* variable */
+		('A'<=c && c<='Z')) {
+	value = ((c>'Z')?c-'a'+'Z'-'A'+1:c-'A');
+	last_token = 'v';
+	return last_token;
+    } else if ('='==c && '='== *ptr) {       /* equal */
+	ptr++;
+	last_token = T_EQUAL;
+	return last_token;
+    } else if ('!'==c && '='== *ptr) {       /* equal */
+	ptr++;
+	last_token = T_NEQUAL;
+    } else if ('<'==c && '<'== *ptr) {       /* shift */
+	ptr++;
+	last_token = T_LSHIFT;
+	return last_token;
+    } else if ('>'==c && '>'== *ptr) {       /* shift */
+	ptr++;
+	last_token = T_RSHIFT;
+	return last_token;
+    } else {
+	last_token = c;
+	return last_token;
+	return c;
+    }
+}
+
+static void
+expr()
+{
+    int d,assign;
+
+    emit_comment();
+    aexpr();
+    assign = lvalue;
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '<': 
+            emit_push();
+	    aexpr(); 
+            emit_compare(O_LT);
+	    break;
+	case '>': 
+            emit_push();
+	    aexpr(); 
+            emit_compare(O_GT);
+	    break;
+	case T_EQUAL: 
+            emit_push();
+	    aexpr(); 
+            emit_compare(O_EQ);
+	    break;
+	case T_NEQUAL: 
+            emit_push();
+	    aexpr(); 
+            emit_compare(O_NE);
+	    break;
+	case T_LSHIFT: 
+            emit_push();
+	    aexpr(); 
+            emit_calc(O_ASL);
+	    break;
+	case T_RSHIFT: 
+            emit_push();
+	    aexpr(); 
+            emit_calc(O_ASR);
+	    break;
+	case '?': 
+	    {
+		int l_false,l_end;
+		l_false = label++;
+		l_end = label++;
+		emit_cond(l_false);
+		expr(); 
+		if(last_token != ':') {
+		    error("? expression not terminated with :");
+		    return;
+		} 
+		emit_jump(l_end);
+		emit_label(l_false);
+		expr(); 
+		emit_label(l_end);
+		return;
+	    }
+	    break;
+	case '=': 
+	    if(assign>=0) {
+		expr(); 
+		emit_store(assign);
+		return;
+	    } else {
+		error("Bad assignment");
+		return;
+	    }
+	    break;
+	case ':': 
+	case ')': 
+	    return;
+	default:
+	    error("Bad expression");
+	    token();
+	}
+    }
+    last_token = EOF;
+    return;
+}
+
+static void
+aexpr()
+{
+    int d;
+
+    emit_comment();
+    mexpr();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '^': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_XOR);
+	    break;
+	case '|': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_OR);
+	    break;
+	case '&': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_AND);
+	    break;
+	case '-': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_SUB);
+	    break;
+	case '+': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_ADD);
+	    break;
+	default:
+	    return;
+	}
+    }
+    return;
+}
+
+static void
+mexpr()
+{
+    int d;
+
+    emit_comment();
+    term();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '*': 
+	    emit_push();
+	    term();
+	    emit_calc(O_MUL);
+	    break;
+	case '/': 
+	    emit_push();
+	    term();
+	    emit_calc(O_DIV);
+	    break;
+	case '%': 
+	    emit_push();
+	    term();
+	    emit_calc(O_MOD);
+	    break;
+	default:
+	    return;
+	}
+    }
+    return;
+}
+
+static void
+term()
+{
+    int d;
+
+    lvalue= -1;
+    emit_comment();
+
+    token();
+    if(last_token==EOF) {
+	error("Term expected");
+    }
+    switch(last_token) {
+    case '0':
+	d = value;
+        emit_value(d);
+	token();
+	return;
+    case 'v':
+	d = lvalue = value;
+        emit_load(d);
+	token();
+	return;
+    case '-':
+	term();
+        emit_neg();
+	return;
+    case '!':
+	term();
+        emit_not();
+	return;
+    case '(':
+	expr();
+	if(last_token != ')') {
+	    error("Unbalanced parenthsis");
+	} 
+	token(); 
+	return;
+    default:
+	token();
+	error("Unknown term");
+	return;
+    }
+}
+
+static 
+char *intro[] = {
+    "#APP\n",    /* To process comments by GNU as */
+    "\t.file   \"s-calc.c\"\n",
+    ".text\n",
+    "\t.align 2\n",
+    ".globl _main\n_main:\n",
+    "\tpushl %ebp\n",
+    "\tmovl %esp,%ebp\n",
+    "\tsubl $1028,%esp\n",
+    "\tcall ___main\n",
+    NULL
+};
+
+static 
+char *ending[] = {
+    "\tleave\n",
+    "\tret\n",
+    "_print:\n",
+    "\tpushl %ebp\n",
+    "\tmovl %esp,%ebp\n",
+    "\tpushl %eax\n",
+    "\tpushl %eax\n",
+    "\tpushl $_format\n",
+    "\tcall _printf\n",
+    "\tleave\n",
+    "\tret\n",
+    "_format:\n",
+    "\t.ascii \" = %08x %d\\12\\0\"\n",
+    "\t.align 2\n",
+    ".comm _variable,192\n",
+    NULL
+};
+
+static
+char *opcode[] = {
+    "",
+    "subl",
+    "addl",
+    "imull",
+    "idiv",
+    "andl",
+    "orl",
+    "xorl",
+    "sall",
+    "sarl",
+    "idiv",
+    "setl",
+    "setg",
+    "sete",
+    "setne",
+};
+
+static void
+emit_push()
+{
+    printf("\tpushl %%eax\n");
+}
+
+static void
+emit_not() 
+{
+    printf("\ttestl %%eax,%%eax\n");
+    printf("\tsete %%al\n");
+    printf("\tmovzbl %%al,%%edx\n");
+    printf("\tmovl %%edx,%%eax\n");
+}
+
+static void
+emit_compare(op) 
+int op;
+{
+    printf("\tcmpl %%eax,(%%esp)\n");
+    printf("\t%s %%al\n",opcode[op]);
+    printf("\tmovzbl %%al,%%eax\n");
+    printf("\taddl %%esp,4\n");
+}
+
+static void
+emit_store(assign)
+int assign;
+{
+    printf("\tmovl %%eax,_variable+%d\n",assign*4);
+}
+
+
+static void
+emit_calc(enum opcode op) {
+    if(op==O_DIV) {
+	printf("\tmovl %%eax,%%ebx\n");
+	printf("\tpopl %%eax\n");
+	printf("\tcltd\n");
+	printf("\tidiv %%ebx\n",op);
+    } else if(op==O_MOD) {
+	printf("\tmovl %%eax,%%ebx\n");
+	printf("\tpopl %%eax\n");
+	printf("\tcltd\n");
+	printf("\tidiv %%ebx\n",op);
+	printf("\tmovl %%edx,%%eax\n");
+    } else if(op==O_ASL||op==O_ASR) {
+	printf("\tmovl %%eax,%%ecx\n");
+	printf("\tpopl %%eax\n");
+	printf("\t%s %%cl,%%eax\n",opcode[op]);
+    } else {
+	printf("\tpopl %%ebx\n");
+	printf("\t%s %%ebx,%%eax\n",opcode[op]);
+    }
+}
+
+static void
+emit_neg()
+{
+	printf("\tnegl %%eax\n");
+}
+
+static void
+emit_value(int d) {
+    printf("\tmovl $%d,%%eax\n",d);
+}
+
+static void
+emit_load(int d) {
+    printf("\tmovl _variable+%d,%%eax\n",d*4);
+}
+
+static void
+emit_cond(int lbl) 
+{
+    printf("\ttestl %%ax,%%ax\n");
+    printf("\tje L%d\n",lbl);
+}
+
+static void
+emit_jump(int lbl)
+{
+    printf("\tjmp L%d\n",lbl);
+}
+
+static void
+emit_label(int lbl)
+{
+    printf("L%d:\n",lbl);
+}
+
+static void
+emit_comment()
+{
+    if (before < ptr) {
+	putchar('#'); putchar('#'); putchar(' ');
+	while (before < ptr) {
+	    if(*before && *before!='\n') {
+		putchar(*before);
+	    }
+	    before++;
+	}
+	putchar('\n');
+    }
+}
+
+static void
+emit_print()
+{
+    printf("\tcall _print\n");
+}
+
+int
+main() 
+{
+    int d;
+    char **iptr,buf[BUFSIZ];
+
+    for(iptr=intro;*iptr;iptr++) {
+	printf("%s",*iptr);
+    }
+    while (fgets(buf,BUFSIZ,stdin)) {
+	ptr = buf;
+	before = buf;
+	printf("##### %s",buf);
+	fflush(stdout);
+	expr();
+	emit_print();
+	emit_comment();
+    }
+    for(iptr=ending;*iptr;iptr++) {
+	printf("%s",*iptr);
+    }
+    return 0;
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ending.09	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,259 @@
+
+*
+* micro-C driver for v09 emulator
+*
+*	12-Dec-81	M.Ohta,H.Tezuka
+*                       Shinji Kono
+*
+
+___CONST
+	FCW    10000,1000
+	FCW    100,10
+        FCW    1,0 
+
+PRINT   PSHS   D,X,Y,U
+	LEAS   -10,S
+        LEAU   ,S
+        LEAX   2,S
+        STD    ,U
+        TSTA                Minus?
+        BPL    ___P0
+        LDA    #'-
+        STA    ,X+
+        LDA    10,S
+        NEGB                Negate
+        NEGA
+        SBCA   #0
+___P0
+        LEAY   ___CONST-___P5,PCR
+___P5
+        STD    ,U
+	BNE    ___P6
+	LDA    #'0          Zero case
+        STA    ,X+
+        BRA    ___P4
+___P6
+        CMPD   ,Y           Zero Suppress
+        BGE    ___P1
+	LEAY   2,Y
+	BRA    ___P6
+___P1
+        LDA    #'0          Outer loop
+        STA    ,X
+        LDD    ,U
+___P2
+        SUBD   ,Y           Digit loop
+        BLT    ___P3
+        INC    ,X
+        BRA    ___P2
+___P3
+	ADDD   ,Y           Recovery
+	STD    ,U
+        LEAX   1,X          Next char
+        LEAY   2,Y          Next divider
+        LDD    ,Y
+        BNE    ___P1
+___P4
+	LDA    #$0A
+        STA    ,X+
+        CLR    ,X           Line terminator
+	LEAX   2,S
+        TFR    X,D
+        BSR    PUTS
+        LEAS   10,S
+        PULS   D,X,Y,U,PC
+
+PUTS    PSHS   D,X,Y,U
+        TFR    D,X
+___LOOP
+        LDB    ,X+
+        BEQ     ___LAST
+        SWI2
+        BRA     ___LOOP
+___LAST
+        PULS   D,X,Y,U,PC
+
+*
+_MULTI	PSHS	D,X,Y		multiply
+	
+	LDA	,S
+	LDB	3,S
+	MUL
+	STB	4,S
+	
+	LDD	1,S
+	MUL
+	STB	5,S
+	
+	LDA	1,S
+	LDB	3,S
+	MUL
+	ADDA	4,S
+	ADDA	5,S
+	
+	LEAS	6,S
+	RTS
+*
+_DIVIDE	CLR	,-S		signed divide  D/X -> D?
+	
+	CMPX	#0
+	BPL	_02000
+	
+	COM	,S
+	
+	EXG	D,X
+	LBSR	_00020
+	EXG	D,X
+
+_02000	TSTA
+	BPL	_02001
+	
+	COM	,S
+	
+	LBSR	_00020
+	
+_02001	LBSR	_00010
+	TFR	X,D
+	TST	,S+
+	BPL	_02002
+	
+	LBSR	_00020
+	
+_02002	RTS
+*
+_00003	LBSR	_00010		unsigned divide
+	TFR	X,D
+	RTS
+*
+_00004	CLR	,-S		signed modulous
+	
+	CMPX	#0
+	BPL	_04000
+	
+	EXG	D,X
+	BSR	_00020
+	EXG	D,X
+
+_04000	TSTA
+	BPL	_04001
+	
+	COM	,S
+	BSR	_00020
+	
+_04001	BSR	_00010
+	
+	TST	,S+
+	BPL	_04002
+	
+	BSR	_00020
+	
+_04002	RTS
+*
+_00005	BSR	_00010		unsigned modulous
+
+	RTS
+*
+_00006	CMPX	#0		signed left shift
+	BMI	_06001
+ 
+_06000	BEQ	_06009
+	LSLB
+	ROLA
+	LEAX	-1,X
+	BRA	_06000
+	
+_06001	BEQ	_06009
+	ASRA
+	RORB
+	LEAX	1,X
+	BRA	_06001
+	
+_06009	RTS
+*
+_00007	CMPX	#0		unsined left shift
+	BMI	_07001
+	
+_07000	BEQ	_07009
+	LSLB
+	ROLA
+	LEAX	-1,X
+	BRA	_07000
+	
+_07001	BEQ	_07009
+	LSRA
+	RORB
+	LEAX	1,X
+	BRA	_07001
+	
+_07009	RTS
+*
+_00008	CMPX	#0		sined right shift
+	BMI	_08001
+	
+_08000	BEQ	_08009
+	ASRA
+	RORB
+	LEAX	-1,X
+	BRA	_08000
+	
+_08001	BEQ	_08009
+	LSLB
+	ROLA
+	LEAX	1,X
+	BRA	_08001
+	
+_08009	RTS
+*
+_00009	CMPX	#0		unsined right shift
+	BMI	_09001
+	
+_09000	BEQ	_09009
+	LSRA
+	RORB
+	LEAX	-1,X
+	BRA	_09000
+	
+_09001	BEQ	_09009
+	LSLB
+	ROLA
+	LEAX	1,X
+	BRA	_09001
+	
+_09009	RTS
+*
+_00020	NEGA			negate D reg
+	NEGB
+	SBCA	#0
+	RTS
+*
+_00010	PSHS	D,X		divide subroutine
+	
+	CLRA
+	CLRB
+	
+	LDX	#17
+	
+_00011	SUBD	2,S
+	BCC	_00012
+	
+	ADDD	2,S
+	
+_00012	ROL	1,S
+	ROL	,S
+	ROLB
+	ROLA
+	
+	LEAX	-1,X
+	BNE	_00011
+	
+	RORA
+	RORB
+	
+	COM	1,S
+	COM	,S
+	PULS	X
+	
+	LEAS	2,S
+	RTS
+
+        END
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ending.rs6k	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,105 @@
+	cal     r3,0(r0)
+	l	r31,76(SP)
+	l	r0,88(SP)
+	mtspr	LR,r0
+	ai	SP,SP,80
+	bcr	BO_ALWAYS,CR0_LT
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x41			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x01			# GPR_SAVED=1
+	.byte	0x00			# FIXEDPARMS=0
+	.byte	0x01			# FLOATPARMS=0,PARMSONSTK=1
+	.long	0x00000048		# TB_OFFSET
+	.short	4			# NAME_LEN
+	.byte	"main"
+	.byte	0			# padding
+	.byte	0			# padding
+# End of traceback table
+.print:                                 # 0x00000060 (H.10.NO_SYMBOL+0x60)
+	mfspr	r0,LR
+	st	r31,-4(SP)
+	st	r0,8(SP)
+	stu	SP,-80(SP)
+	l	r31,T.20._test0_c_(RTOC)
+	st	r3,104(SP)
+	cal	r3,0(r31)
+	l	r5,104(SP)
+	cal	r4,0(r5)
+	bl	.printf{PR}
+	cror	CR3_SO,CR3_SO,CR3_SO
+	l	r31,76(SP)
+	l	r0,88(SP)
+	mtspr	LR,r0
+	ai	SP,SP,80
+	bcr	BO_ALWAYS,CR0_LT
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x41			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x01			# GPR_SAVED=1
+	.byte	0x01			# FIXEDPARMS=1
+	.byte	0x01			# FLOATPARMS=0,PARMSONSTK=1
+	.long	0x00000000		# 
+	.long	0x00000040		# TB_OFFSET
+	.short	5			# NAME_LEN
+	.byte	"print"
+	.byte	0			# padding
+# End of traceback table
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	H.10.NO_SYMBOL{PR}
+
+# .data section
+
+
+	.toc	                        # 0x000000c0 
+T.24.main:
+	.tc	H.24.main{TC},main{DS}  
+T.28.variable:
+	.tc	H.28.variable{TC},variable
+T.32.print:
+	.tc	H.32.print{TC},print{DS}
+T.20._test0_c_:
+	.tc	H.20._test0_c_{TC},E.18._test0_c_{RW}
+
+
+	.csect	main{DS}                
+	.long	.main                   # "\0\0\0\0"
+	.long	TOC{TC0}                # "\0\0\0\300"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	main{DS}
+
+
+	.csect	print{DS}               
+	.long	.print                  # "\0\0\0`"
+	.long	TOC{TC0}                # "\0\0\0\300"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	print{DS}
+
+
+	.csect	E.18._test0_c_{RW}, 3   
+	.long	0x30782530              # "0x%0"
+	.long	0x3878203d              # "8x ="
+	.long	0x2025640a              # " %d\n"
+# End	csect	E.18._test0_c_{RW}
+	.long	0x00000000              # "\0\0\0\0"
+
+
+
+# .bss section
+	.comm	variable, 256, 3        # 0x000000f8 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/error.txt	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,1 @@
+!(b+1<a)?-a:b+1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/input.txt	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,21 @@
+1
+1+2			//  expr
+2*3			//  mexpr
+1+(2*3)			// term
+1+2*3			// expr order
+-1+0x10*010		// token
+(0xff&07)|0x100		// logical expression
+100/10
+a=1*3
+b=2*3
+a+b
+a=(b=3<<2)
+a>>1
+b
+1==1
+1==0x10
+b==a
+b==a?-a:b+1
+b!=a?-a:b+1
+!(b+1>a)?-a:b+1
+!(b+1<a)?-a:b+1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/intro.rs6k	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,66 @@
+.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
+.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
+.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
+.set r30,30; .set r31,31
+.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
+.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
+.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
+.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
+.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
+.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
+.set fp30,30; .set fp31,31
+.set MQ,0; .set XER,1; .set FROM_RTCU,4; .set FROM_RTCL,5; .set FROM_DEC,6
+.set LR,8; .set CTR,9; .set TID,17; .set DSISR,18; .set DAR,19; .set TO_RTCU,20
+.set TO_RTCL,21; .set TO_DEC,22; .set SDR_0,24; .set SDR_1,25; .set SRR_0,26
+.set SRR_1,27
+.set BO_dCTR_NZERO_AND_NOT,0; .set BO_dCTR_NZERO_AND_NOT_1,1
+.set BO_dCTR_ZERO_AND_NOT,2; .set BO_dCTR_ZERO_AND_NOT_1,3
+.set BO_IF_NOT,4; .set BO_IF_NOT_1,5; .set BO_IF_NOT_2,6
+.set BO_IF_NOT_3,7; .set BO_dCTR_NZERO_AND,8; .set BO_dCTR_NZERO_AND_1,9
+.set BO_dCTR_ZERO_AND,10; .set BO_dCTR_ZERO_AND_1,11; .set BO_IF,12
+.set BO_IF_1,13; .set BO_IF_2,14; .set BO_IF_3,15; .set BO_dCTR_NZERO,16
+.set BO_dCTR_NZERO_1,17; .set BO_dCTR_ZERO,18; .set BO_dCTR_ZERO_1,19
+.set BO_ALWAYS,20; .set BO_ALWAYS_1,21; .set BO_ALWAYS_2,22
+.set BO_ALWAYS_3,23; .set BO_dCTR_NZERO_8,24; .set BO_dCTR_NZERO_9,25
+.set BO_dCTR_ZERO_8,26; .set BO_dCTR_ZERO_9,27; .set BO_ALWAYS_8,28
+.set BO_ALWAYS_9,29; .set BO_ALWAYS_10,30; .set BO_ALWAYS_11,31
+.set CR0_LT,0; .set CR0_GT,1; .set CR0_EQ,2; .set CR0_SO,3
+.set CR1_FX,4; .set CR1_FEX,5; .set CR1_VX,6; .set CR1_OX,7
+.set CR2_LT,8; .set CR2_GT,9; .set CR2_EQ,10; .set CR2_SO,11
+.set CR3_LT,12; .set CR3_GT,13; .set CR3_EQ,14; .set CR3_SO,15
+.set CR4_LT,16; .set CR4_GT,17; .set CR4_EQ,18; .set CR4_SO,19
+.set CR5_LT,20; .set CR5_GT,21; .set CR5_EQ,22; .set CR5_SO,23
+.set CR6_LT,24; .set CR6_GT,25; .set CR6_EQ,26; .set CR6_SO,27
+.set CR7_LT,28; .set CR7_GT,29; .set CR7_EQ,30; .set CR7_SO,31
+.set TO_LT,16; .set TO_GT,8; .set TO_EQ,4; .set TO_LLT,2; .set TO_LGT,1
+
+	.rename	H.10.NO_SYMBOL{PR},""
+	.rename	E.18._test0_c_{RW},"_test0$c$"
+	.rename	H.20._test0_c_{TC},"_test0$c$"
+	.rename	H.24.main{TC},"main"
+	.rename	H.28.variable{TC},"variable"
+	.rename	H.32.print{TC},"print"
+
+#	.lglobl	H.10.NO_SYMBOL{PR}      
+	.globl	.main                   
+	.globl	.print                  
+#	.lglobl	E.18._test0_c_{RW}      
+	.globl	main{DS}                
+	.globl	variable{RW}            
+	.globl	print{DS}               
+	.extern	.printf{PR}             
+
+
+# .text section
+
+
+	.csect	H.10.NO_SYMBOL{PR}      
+.main:                                  # 0x00000000 (H.10.NO_SYMBOL)
+	.file	"test0.c"               
+	mfspr	r0,LR
+	st	r31,-4(SP)
+	st	r0,8(SP)
+	stu	SP,-80(SP)
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/output.s	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,289 @@
+.set r0,0; .set SP,1; .set RTOC,2; .set r3,3; .set r4,4
+.set r5,5; .set r6,6; .set r7,7; .set r8,8; .set r9,9
+.set r10,10; .set r11,11; .set r12,12; .set r13,13; .set r14,14
+.set r15,15; .set r16,16; .set r17,17; .set r18,18; .set r19,19
+.set r20,20; .set r21,21; .set r22,22; .set r23,23; .set r24,24
+.set r25,25; .set r26,26; .set r27,27; .set r28,28; .set r29,29
+.set r30,30; .set r31,31
+.set fp0,0; .set fp1,1; .set fp2,2; .set fp3,3; .set fp4,4
+.set fp5,5; .set fp6,6; .set fp7,7; .set fp8,8; .set fp9,9
+.set fp10,10; .set fp11,11; .set fp12,12; .set fp13,13; .set fp14,14
+.set fp15,15; .set fp16,16; .set fp17,17; .set fp18,18; .set fp19,19
+.set fp20,20; .set fp21,21; .set fp22,22; .set fp23,23; .set fp24,24
+.set fp25,25; .set fp26,26; .set fp27,27; .set fp28,28; .set fp29,29
+.set fp30,30; .set fp31,31
+.set MQ,0; .set XER,1; .set FROM_RTCU,4; .set FROM_RTCL,5; .set FROM_DEC,6
+.set LR,8; .set CTR,9; .set TID,17; .set DSISR,18; .set DAR,19; .set TO_RTCU,20
+.set TO_RTCL,21; .set TO_DEC,22; .set SDR_0,24; .set SDR_1,25; .set SRR_0,26
+.set SRR_1,27
+.set BO_dCTR_NZERO_AND_NOT,0; .set BO_dCTR_NZERO_AND_NOT_1,1
+.set BO_dCTR_ZERO_AND_NOT,2; .set BO_dCTR_ZERO_AND_NOT_1,3
+.set BO_IF_NOT,4; .set BO_IF_NOT_1,5; .set BO_IF_NOT_2,6
+.set BO_IF_NOT_3,7; .set BO_dCTR_NZERO_AND,8; .set BO_dCTR_NZERO_AND_1,9
+.set BO_dCTR_ZERO_AND,10; .set BO_dCTR_ZERO_AND_1,11; .set BO_IF,12
+.set BO_IF_1,13; .set BO_IF_2,14; .set BO_IF_3,15; .set BO_dCTR_NZERO,16
+.set BO_dCTR_NZERO_1,17; .set BO_dCTR_ZERO,18; .set BO_dCTR_ZERO_1,19
+.set BO_ALWAYS,20; .set BO_ALWAYS_1,21; .set BO_ALWAYS_2,22
+.set BO_ALWAYS_3,23; .set BO_dCTR_NZERO_8,24; .set BO_dCTR_NZERO_9,25
+.set BO_dCTR_ZERO_8,26; .set BO_dCTR_ZERO_9,27; .set BO_ALWAYS_8,28
+.set BO_ALWAYS_9,29; .set BO_ALWAYS_10,30; .set BO_ALWAYS_11,31
+.set CR0_LT,0; .set CR0_GT,1; .set CR0_EQ,2; .set CR0_SO,3
+.set CR1_FX,4; .set CR1_FEX,5; .set CR1_VX,6; .set CR1_OX,7
+.set CR2_LT,8; .set CR2_GT,9; .set CR2_EQ,10; .set CR2_SO,11
+.set CR3_LT,12; .set CR3_GT,13; .set CR3_EQ,14; .set CR3_SO,15
+.set CR4_LT,16; .set CR4_GT,17; .set CR4_EQ,18; .set CR4_SO,19
+.set CR5_LT,20; .set CR5_GT,21; .set CR5_EQ,22; .set CR5_SO,23
+.set CR6_LT,24; .set CR6_GT,25; .set CR6_EQ,26; .set CR6_SO,27
+.set CR7_LT,28; .set CR7_GT,29; .set CR7_EQ,30; .set CR7_SO,31
+.set TO_LT,16; .set TO_GT,8; .set TO_EQ,4; .set TO_LLT,2; .set TO_LGT,1
+
+	.rename	H.10.NO_SYMBOL{PR},""
+	.rename	E.18._test0_c_{RW},"_test0$c$"
+	.rename	H.20._test0_c_{TC},"_test0$c$"
+	.rename	H.24.main{TC},"main"
+	.rename	H.28.variable{TC},"variable"
+	.rename	H.32.print{TC},"print"
+
+#	.lglobl	H.10.NO_SYMBOL{PR}      
+	.globl	.main                   
+	.globl	.print                  
+#	.lglobl	E.18._test0_c_{RW}      
+	.globl	main{DS}                
+	.globl	variable{RW}            
+	.globl	print{DS}               
+	.extern	.printf{PR}             
+
+
+# .text section
+
+
+	.csect	H.10.NO_SYMBOL{PR}      
+.main:                                  # 0x00000000 (H.10.NO_SYMBOL)
+	.file	"test0.c"               
+	mfspr	r0,LR
+	st	r31,-4(SP)
+	st	r0,8(SP)
+	stu	SP,-80(SP)
+##### 1
+	cal   r3,1(r0)
+	bl  .print
+## 1
+##### 1+2			//  expr
+	cal   r3,3(r0)
+	bl  .print
+## 1+2			//  expr
+##### 2*3			//  mexpr
+	cal   r3,6(r0)
+	bl  .print
+## 2*3			//  mexpr
+##### 1+(2*3)			// term
+	cal   r3,7(r0)
+	bl  .print
+## 1+(2*3)			// term
+##### 1-(2-3)			// association
+	cal   r3,2(r0)
+	bl  .print
+## 1-(2-3)			// association
+##### 1-2-3			// association
+	cal   r3,65532(r0)
+	cau   r3,r3,65535
+	bl  .print
+## 1-2-3			// association
+##### 1+2*3			// expr order
+	cal   r3,7(r0)
+	bl  .print
+## 1+2*3			// expr order
+##### 3*2-3			// expr order
+	cal   r3,3(r0)
+	bl  .print
+## 3*2-3			// expr order
+##### 1+10*10			// token
+	cal   r3,101(r0)
+	bl  .print
+## 1+10*10			// token
+##### (2+1030/2)-2
+	cal   r3,515(r0)
+	bl  .print
+## (2+1030/2)-2
+##### (255*07)+256		// logical expression
+	cal   r3,2041(r0)
+	bl  .print
+## (255*07)+256		// logical expression
+##### 0+(1+(2+(3+(4+(5+(6+(7+8)))))))-(0+(1+(2+(3+(4+(5+(6+(7+8))))))))
+	cal   r3,0(r0)
+	bl  .print
+## 0+(1+(2+(3+(4+(5+(6+(7+8)))))))-(0+(1+(2+(3+(4+(5+(6+(7+8))))))))
+##### 100/10
+	cal   r3,10(r0)
+	bl  .print
+## 100/10
+##### a=1*3
+	cal   r3,3(r0)
+	l       r4,T.28.variable(RTOC)
+	st      r3,0(r4)
+	bl  .print
+## a=1*3
+##### b=2*3
+	cal   r3,6(r0)
+	l       r4,T.28.variable(RTOC)
+	st      r3,4(r4)
+	bl  .print
+## b=2*3
+##### a+b
+	l       r4,T.28.variable(RTOC)
+	l       r3,4(r4)
+	stu   r3,-4(SP)
+	l       r4,T.28.variable(RTOC)
+	l       r3,0(r4)
+	l       r4,0(SP)
+	ai      SP,SP,4
+	a  r3,r3,r4
+	bl  .print
+## a+b
+##### a=(b=3*2)
+	cal   r3,6(r0)
+	l       r4,T.28.variable(RTOC)
+	st      r3,4(r4)
+	l       r4,T.28.variable(RTOC)
+	st      r3,0(r4)
+	bl  .print
+## a=(b=3*2)
+##### a>1
+	l       r4,T.28.variable(RTOC)
+	l       r3,0(r4)
+	stu   r3,-4(SP)
+	cal   r3,1(r0)
+	l     r4,0(SP)
+	cmp   0,r4,r3
+	ai    SP,SP,4
+	cal   r3,1(r0)
+	bc    BO_IF,CR0_GT,__L0
+	cal   r3,0(r0)
+__L0:
+	bl  .print
+## a>1
+##### b
+	l       r4,T.28.variable(RTOC)
+	l       r3,4(r4)
+	bl  .print
+## b
+##### b>a
+	l       r4,T.28.variable(RTOC)
+	l       r3,4(r4)
+	stu   r3,-4(SP)
+	l       r4,T.28.variable(RTOC)
+	l       r3,0(r4)
+	l     r4,0(SP)
+	cmp   0,r4,r3
+	ai    SP,SP,4
+	cal   r3,1(r0)
+	bc    BO_IF,CR0_GT,__L1
+	cal   r3,0(r0)
+__L1:
+	bl  .print
+## b>a
+	cal     r3,0(r0)
+	l	r31,76(SP)
+	l	r0,88(SP)
+	mtspr	LR,r0
+	ai	SP,SP,80
+	bcr	BO_ALWAYS,CR0_LT
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x41			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x01			# GPR_SAVED=1
+	.byte	0x00			# FIXEDPARMS=0
+	.byte	0x01			# FLOATPARMS=0,PARMSONSTK=1
+	.long	0x00000048		# TB_OFFSET
+	.short	4			# NAME_LEN
+	.byte	"main"
+	.byte	0			# padding
+	.byte	0			# padding
+# End of traceback table
+.print:                                 # 0x00000060 (H.10.NO_SYMBOL+0x60)
+	mfspr	r0,LR
+	st	r31,-4(SP)
+	st	r0,8(SP)
+	stu	SP,-80(SP)
+	l	r31,T.20._test0_c_(RTOC)
+	st	r3,104(SP)
+	cal	r3,0(r31)
+	l	r5,104(SP)
+	cal	r4,0(r5)
+	bl	.printf{PR}
+	cror	CR3_SO,CR3_SO,CR3_SO
+	l	r31,76(SP)
+	l	r0,88(SP)
+	mtspr	LR,r0
+	ai	SP,SP,80
+	bcr	BO_ALWAYS,CR0_LT
+# traceback table
+	.long	0x00000000
+	.byte	0x00			# VERSION=0
+	.byte	0x00			# LANG=TB_C
+	.byte	0x20			# IS_GL=0,IS_EPROL=0,HAS_TBOFF=1
+					# INT_PROC=0,HAS_CTL=0,TOCLESS=0
+					# FP_PRESENT=0,LOG_ABORT=0
+	.byte	0x41			# INT_HNDL=0,NAME_PRESENT=1
+					# USES_ALLOCA=0,CL_DIS_INV=WALK_ONCOND
+					# SAVES_CR=0,SAVES_LR=1
+	.byte	0x80			# STORES_BC=1,FPR_SAVED=0
+	.byte	0x01			# GPR_SAVED=1
+	.byte	0x01			# FIXEDPARMS=1
+	.byte	0x01			# FLOATPARMS=0,PARMSONSTK=1
+	.long	0x00000000		# 
+	.long	0x00000040		# TB_OFFSET
+	.short	5			# NAME_LEN
+	.byte	"print"
+	.byte	0			# padding
+# End of traceback table
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	H.10.NO_SYMBOL{PR}
+
+# .data section
+
+
+	.toc	                        # 0x000000c0 
+T.24.main:
+	.tc	H.24.main{TC},main{DS}  
+T.28.variable:
+	.tc	H.28.variable{TC},variable
+T.32.print:
+	.tc	H.32.print{TC},print{DS}
+T.20._test0_c_:
+	.tc	H.20._test0_c_{TC},E.18._test0_c_{RW}
+
+
+	.csect	main{DS}                
+	.long	.main                   # "\0\0\0\0"
+	.long	TOC{TC0}                # "\0\0\0\300"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	main{DS}
+
+
+	.csect	print{DS}               
+	.long	.print                  # "\0\0\0`"
+	.long	TOC{TC0}                # "\0\0\0\300"
+	.long	0x00000000              # "\0\0\0\0"
+# End	csect	print{DS}
+
+
+	.csect	E.18._test0_c_{RW}, 3   
+	.long	0x30782530              # "0x%0"
+	.long	0x3878203d              # "8x ="
+	.long	0x2025640a              # " %d\n"
+# End	csect	E.18._test0_c_{RW}
+	.long	0x00000000              # "\0\0\0\0"
+
+
+
+# .bss section
+	.comm	variable, 256, 3        # 0x000000f8 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/project	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,26 @@
+Thu Oct  3 16:41:31 JST 1996
+
+Simple Interpreter
+    Label & Goto statement? (Using fseek)
+    While statement?
+    Function call?
+
+Simple Compiler
+    One path code generator
+    In core compile (Cache handling?)
+
+Semantic Dictionalry Generation ( for Runtime code generation )
+    For Object Oriented Language
+    For Reflective language
+
+Very long compile, Code refinement of Semantic dictionary
+    Keeping refinement information
+    Global optimization
+    Code size control
+
+Functional Unit
+    Array gaming ...
+
+Input type, Output type
+
+Aliasing
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-calc-r.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,177 @@
+/*
+    Very Simple Calculator
+	$Id$
+ */
+
+#include <stdio.h>
+
+static char *ptr,*last_ptr;
+static int  value,lvalue;
+static int  last_token;
+static int  variable[48];
+
+static int  expr();
+static int  aexpr();
+static int  mexpr();
+static int  term();
+static int  token();
+
+
+static int
+token()
+{
+    int c,d;
+
+    last_ptr = ptr;  /* for error position */
+    c= *ptr;
+    if(!c) {
+	last_token = EOF;
+	return last_token;
+    }
+    ptr++;
+    if (c<=' ') {       /* comment */ 
+	while(*ptr++);
+	ptr--;
+	last_token = EOF;
+	last_ptr = ptr;
+	return last_token;
+    }
+    if('0'<=c && c<='9') {     /* Decimal */
+	d = c-'0';
+	while(c= *ptr++) {
+	    if('0'<=c && c<='9') {
+		d = d*10 + (c - '0');
+	    } else {
+		break;
+	    }
+	}
+	c && ptr--;
+	value = d;
+	last_token = '0';
+	return last_token;
+    } else if ('a'<=c && c<='z') {    /* variable */
+	value = c-'a';                /* return variable reference */
+	last_token = 'v';
+	return last_token;
+    } else {
+	last_token = c;
+	return last_token;
+	return c;
+    }
+}
+
+static int
+expr()
+{
+    int d,assign;
+
+    d = aexpr();
+    assign = lvalue;
+    switch(last_token) {
+    case '>': 
+	d = (d > aexpr()); 
+	return d;
+    case '=': 
+	if(assign>=0) {
+	    d = expr(); 
+	    variable[assign] = d;
+	    return d;
+	} else {
+	    error("Bad assignment");
+	    return 0;
+	}
+    case ')': 
+	return d;
+    case EOF: 
+	return d;
+    default:
+	error("Bad expression");
+	return d;
+    }
+}
+
+static int
+aexpr()
+{
+    int d;
+
+    d = mexpr();
+    switch(last_token) {
+    case '-': 
+	d -= aexpr(); 
+	return d;
+    case '+': 
+	d += aexpr(); 
+	return d;
+    default:
+	return d;
+    }
+}
+
+static int
+mexpr()
+{
+    int d;
+
+    d = term();
+    switch(last_token) {
+    case '*': 
+	d *= mexpr(); 
+	return d;
+    case '/': 
+	d /= mexpr(); 
+	return d;
+    default:
+	return d;
+    }
+}
+
+static int 
+term()
+{
+    int d;
+
+    lvalue= -1;
+    token();
+    if(last_token==EOF) {
+	error("Term expected");
+    }
+    switch(last_token) {
+    case '0':
+	d = value;
+	token();
+	return d;
+    case 'v':
+	d = lvalue = value;
+	token();
+	return variable[d];
+    case '(':
+	d = expr();
+	if(last_token != ')') {
+	    error("Unbalanced parenthsis");
+	} 
+	token(); 
+	return d;
+    default:
+	token();
+	error("Unknown term");
+	return 0;
+    }
+}
+
+int
+main() 
+{
+    int d;
+    char buf[BUFSIZ];
+
+    while (fgets(buf,BUFSIZ,stdin)) {
+	ptr = buf;
+	d = expr();
+	printf("%s = 0x%08x = %d\n",buf,d,d);
+	fflush(stdout);
+    }
+    return 0;
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-calc.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,137 @@
+/*
+    Very Simple Calculator
+	$Id$
+ */
+
+#include "s-compile.h"
+
+int  variable[48];
+
+static int  expr();
+static int  aexpr();
+static int  mexpr();
+static int  term();
+
+
+static int
+expr()
+{
+    int d,assign;
+
+    d = aexpr();
+    assign = lvalue;
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '>': 
+	    d = (d > aexpr()); 
+	    break;
+	case '=': 
+	    if(assign>=0) {
+		d = expr(); 
+		variable[assign] = d;
+		break;
+	    } else {
+		error("Bad assignment");
+		break;
+	    }
+	case ')': 
+	    return d;
+	default:
+	    error("Bad expression");
+	    return d;
+	}
+    }
+    return d;
+}
+
+static int
+aexpr()
+{
+    int d;
+
+    d = mexpr();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '-': 
+	    d -= mexpr(); 
+	    break;
+	case '+': 
+	    d += mexpr(); 
+	    break;
+	default:
+	    return d;
+	}
+    }
+    return d;
+}
+
+static int
+mexpr()
+{
+    int d;
+
+    d = term();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '*': 
+	    d *= term(); 
+	    break;
+	case '/': 
+	    d /= term(); 
+	    break;
+	default:
+	    return d;
+	}
+    }
+    return d;
+}
+
+static int 
+term()
+{
+    int d;
+
+    lvalue= -1;
+    token();
+    if(last_token==EOF) {
+	error("Term expected");
+    }
+    switch(last_token) {
+    case '0':
+	d = value;
+	token();
+	return d;
+    case 'v':
+	d = lvalue = value;
+	token();
+	return variable[d];
+    case '(':
+	d = expr();
+	if(last_token != ')') {
+	    error("Unbalanced parenthsis");
+	} 
+	token(); 
+	return d;
+    default:
+	token();
+	error("Unknown term");
+	return 0;
+    }
+}
+
+int
+main() 
+{
+    int d;
+    char buf[BUFSIZ];
+
+    while (fgets(buf,BUFSIZ,stdin)) {
+	ptr = buf;
+	d = expr();
+	printf("%s = 0x%08x = %d\n",buf,d,d);
+	fflush(stdout);
+    }
+    return 0;
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-calc.s	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,431 @@
+gcc2_compiled.:
+___gnu_compiled_c:
+.text
+	.align 4
+	.global _token
+	.proc	04
+_token:
+	!#PROLOGUE# 0
+	!#PROLOGUE# 1
+	sethi %hi(_last_ptr),%g2
+	sethi %hi(_ptr),%g3
+	ld [%g3+%lo(_ptr)],%g3
+	st %g3,[%g2+%lo(_last_ptr)]
+	ldsb [%g3],%o0
+	cmp %o0,0
+	bne L2
+	sethi %hi(_ptr),%o1
+	sethi %hi(_last_token),%g3
+	mov -1,%g2
+	st %g2,[%g3+%lo(_last_token)]
+	b L19
+	mov -1,%o0
+L2:
+	ld [%o1+%lo(_ptr)],%g3
+	add %g3,1,%g2
+	cmp %o0,32
+	bg L3
+	st %g2,[%o1+%lo(_ptr)]
+	add %g3,2,%g2
+	st %g2,[%o1+%lo(_ptr)]
+	ldsb [%g3+1],%g2
+	cmp %g2,0
+	be L20
+	sethi %hi(_ptr),%g2
+	sethi %hi(_ptr),%o0
+	ld [%o0+%lo(_ptr)],%g2
+L21:
+	add %g2,1,%g3
+	st %g3,[%o0+%lo(_ptr)]
+	ldsb [%g2],%g2
+	cmp %g2,0
+	bne L21
+	ld [%o0+%lo(_ptr)],%g2
+	sethi %hi(_ptr),%g2
+L20:
+	ld [%g2+%lo(_ptr)],%g3
+	add %g3,-1,%g3
+	st %g3,[%g2+%lo(_ptr)]
+	sethi %hi(_last_token),%o0
+	mov -1,%g2
+	st %g2,[%o0+%lo(_last_token)]
+	sethi %hi(_last_ptr),%g2
+	st %g3,[%g2+%lo(_last_ptr)]
+	b L19
+	mov -1,%o0
+L3:
+	add %o0,-48,%g2
+	cmp %g2,9
+	bgu L8
+	mov %g2,%o1
+	sethi %hi(_ptr),%g2
+	ld [%g2+%lo(_ptr)],%o0
+	add %o0,1,%g3
+	st %g3,[%g2+%lo(_ptr)]
+	ldsb [%o0],%o0
+	cmp %o0,0
+	be L23
+	mov %g2,%o2
+	add %o0,-48,%g2
+L22:
+	cmp %g2,9
+	bgu L10
+	sll %o1,2,%g2
+	add %g2,%o1,%g2
+	sll %g2,1,%g2
+	add %g2,-48,%g2
+	add %g2,%o0,%o1
+	ld [%o2+%lo(_ptr)],%g3
+	add %g3,1,%g2
+	st %g2,[%o2+%lo(_ptr)]
+	ldsb [%g3],%o0
+	cmp %o0,0
+	bne L22
+	add %o0,-48,%g2
+L10:
+	cmp %o0,0
+L23:
+	be L15
+	sethi %hi(_ptr),%g3
+	ld [%g3+%lo(_ptr)],%g2
+	add %g2,-1,%g2
+	st %g2,[%g3+%lo(_ptr)]
+L15:
+	sethi %hi(_value),%g2
+	st %o1,[%g2+%lo(_value)]
+	sethi %hi(_last_token),%g3
+	mov 48,%g2
+	st %g2,[%g3+%lo(_last_token)]
+	b L19
+	mov 48,%o0
+L8:
+	add %o0,-97,%g2
+	cmp %g2,25
+	bleu L17
+	sethi %hi(_last_token),%g2
+	b L19
+	st %o0,[%g2+%lo(_last_token)]
+L17:
+	sethi %hi(_value),%g3
+	add %o0,-97,%g2
+	st %g2,[%g3+%lo(_value)]
+	sethi %hi(_last_token),%g3
+	mov 118,%g2
+	st %g2,[%g3+%lo(_last_token)]
+	mov 118,%o0
+L19:
+	retl
+	nop
+	.align 8
+LC0:
+	.ascii "Bad assignment\0"
+	.align 8
+LC1:
+	.ascii "Bad expression\0"
+	.align 4
+	.global _expr
+	.proc	04
+_expr:
+	!#PROLOGUE# 0
+	save %sp,-104,%sp
+	!#PROLOGUE# 1
+	call _aexpr,0
+	nop
+	mov %o0,%i0
+	sethi %hi(_lvalue),%o0
+	ld [%o0+%lo(_lvalue)],%l0
+	sethi %hi(_last_token),%o0
+	mov %o0,%o1
+	ld [%o0+%lo(_last_token)],%o0
+	cmp %o0,-1
+	be L26
+	sethi %hi(_variable),%o0
+	or %o0,%lo(_variable),%l4
+	sll %l0,2,%l1
+	sethi %hi(LC0),%l3
+	sethi %hi(LC1),%l2
+	ld [%o1+%lo(_last_token)],%o0
+	cmp %o0,61
+L40:
+	be,a L30
+	cmp %l0,0
+	bg L36
+	cmp %o0,62
+	cmp %o0,41
+	be L38
+	nop
+	b,a L34
+L36:
+	bne L34
+	nop
+	call _aexpr,0
+	nop
+	cmp %i0,%o0
+	bg,a L41
+	mov 1,%i0
+	mov 0,%i0
+L41:
+	b L39
+	sethi %hi(_last_token),%o1
+L30:
+	bl L31
+	nop
+	call _expr,0
+	nop
+	mov %o0,%i0
+	b L38
+	st %i0,[%l1+%l4]
+L31:
+	call _error,0
+	or %l3,%lo(LC0),%o0
+	b L38
+	mov 0,%i0
+L34:
+	call _error,0
+	or %l2,%lo(LC1),%o0
+	call _token,0
+	nop
+	sethi %hi(_last_token),%o1
+L39:
+	ld [%o1+%lo(_last_token)],%o0
+	cmp %o0,-1
+	bne L40
+	cmp %o0,61
+L26:
+	sethi %hi(_last_token),%o1
+	mov -1,%o0
+	st %o0,[%o1+%lo(_last_token)]
+L38:
+	ret
+	restore
+	.align 4
+	.global _aexpr
+	.proc	04
+_aexpr:
+	!#PROLOGUE# 0
+	save %sp,-104,%sp
+	!#PROLOGUE# 1
+	call _mexpr,0
+	nop
+	mov %o0,%i0
+	sethi %hi(_last_token),%o0
+	mov %o0,%o1
+	ld [%o0+%lo(_last_token)],%o0
+	cmp %o0,-1
+	be L52
+	ld [%o1+%lo(_last_token)],%o0
+	cmp %o0,43
+L53:
+	be L48
+	cmp %o0,45
+	bne L52
+	nop
+	call _mexpr,0
+	nop
+	b L43
+	sub %i0,%o0,%i0
+L48:
+	call _mexpr,0
+	nop
+	add %i0,%o0,%i0
+L43:
+	sethi %hi(_last_token),%o1
+	ld [%o1+%lo(_last_token)],%o0
+	cmp %o0,-1
+	bne L53
+	cmp %o0,43
+L52:
+	ret
+	restore
+	.align 4
+	.global _mexpr
+	.proc	04
+_mexpr:
+	!#PROLOGUE# 0
+	save %sp,-104,%sp
+	!#PROLOGUE# 1
+	call _term,0
+	nop
+	mov %o0,%i0
+	sethi %hi(_last_token),%o0
+	mov %o0,%o1
+	ld [%o0+%lo(_last_token)],%o0
+	cmp %o0,-1
+	be L64
+	ld [%o1+%lo(_last_token)],%o0
+	cmp %o0,42
+L67:
+	be L59
+	cmp %o0,47
+	be L60
+	nop
+	b,a L64
+L59:
+	call _mexpr,0
+	nop
+	mov %o0,%o1
+	call .umul,0
+	mov %i0,%o0
+	b L66
+	mov %o0,%i0
+L60:
+	call _mexpr,0
+	nop
+	mov %o0,%o1
+	call .div,0
+	mov %i0,%o0
+	mov %o0,%i0
+L66:
+	sethi %hi(_last_token),%o1
+	ld [%o1+%lo(_last_token)],%o0
+	cmp %o0,-1
+	bne L67
+	cmp %o0,42
+L64:
+	ret
+	restore
+	.align 8
+LC2:
+	.ascii "Term expected\0"
+	.align 8
+LC3:
+	.ascii "Unbalanced parenthsis\0"
+	.align 8
+LC4:
+	.ascii "Unknown term\0"
+	.align 4
+	.global _term
+	.proc	04
+_term:
+	!#PROLOGUE# 0
+	save %sp,-104,%sp
+	!#PROLOGUE# 1
+	sethi %hi(_lvalue),%o1
+	mov -1,%o0
+	call _token,0
+	st %o0,[%o1+%lo(_lvalue)]
+	sethi %hi(_last_token),%o0
+	ld [%o0+%lo(_last_token)],%o0
+	cmp %o0,-1
+	bne,a L80
+	sethi %hi(_last_token),%o0
+	sethi %hi(LC2),%o0
+	call _error,0
+	or %o0,%lo(LC2),%o0
+	sethi %hi(_last_token),%o0
+L80:
+	ld [%o0+%lo(_last_token)],%o0
+	cmp %o0,48
+	be,a L71
+	sethi %hi(_value),%o0
+	bg L77
+	cmp %o0,118
+	cmp %o0,40
+	be L73
+	nop
+	b,a L75
+L77:
+	be L72
+	sethi %hi(_lvalue),%o1
+	b,a L75
+L71:
+	ld [%o0+%lo(_value)],%i0
+L79:
+	call _token,0
+	add %o7,(L78-.-4),%o7
+L72:
+	sethi %hi(_value),%o0
+	ld [%o0+%lo(_value)],%o0
+	st %o0,[%o1+%lo(_lvalue)]
+	call _token,0
+	mov %o0,%i0
+	sethi %hi(_variable),%o0
+	or %o0,%lo(_variable),%o0
+	sll %i0,2,%o1
+	b L78
+	ld [%o1+%o0],%i0
+L73:
+	call _expr,0
+	nop
+	mov %o0,%i0
+	sethi %hi(_last_token),%o0
+	ld [%o0+%lo(_last_token)],%o0
+	cmp %o0,41
+	be L79
+	sethi %hi(LC3),%o0
+	call _error,0
+	or %o0,%lo(LC3),%o0
+	b,a L79
+L75:
+	call _token,0
+	mov 0,%i0
+	sethi %hi(LC4),%o0
+	call _error,0
+	or %o0,%lo(LC4),%o0
+L78:
+	ret
+	restore
+	.align 8
+LC5:
+	.ascii "%s = 0x%08x = %d\12\0"
+	.align 4
+	.global _main
+	.proc	04
+_main:
+	!#PROLOGUE# 0
+	save %sp,-1128,%sp
+	!#PROLOGUE# 1
+	call ___main,0
+	sethi %hi(_ptr),%l2
+	add %fp,-1032,%i0
+	sethi %hi(__iob),%o0
+	or %o0,%lo(__iob),%l0
+	sethi %hi(LC5),%l1
+	mov %i0,%o0
+L85:
+	mov 1024,%o1
+	call _fgets,0
+	mov %l0,%o2
+	cmp %o0,0
+	be L83
+	nop
+	call _expr,0
+	st %i0,[%l2+%lo(_ptr)]
+	mov %o0,%o3
+	or %l1,%lo(LC5),%o0
+	mov %i0,%o1
+	call _printf,0
+	mov %o3,%o2
+	call _fflush,0
+	add %l0,20,%o0
+	b L85
+	mov %i0,%o0
+L83:
+	ret
+	restore %g0,0,%o0
+	.align 8
+LC6:
+	.ascii "%s on %s\12\0"
+	.align 4
+	.global _error
+	.proc	020
+_error:
+	!#PROLOGUE# 0
+	save %sp,-104,%sp
+	!#PROLOGUE# 1
+	sethi %hi(_last_ptr),%o3
+	sethi %hi(__iob+40),%o0
+	or %o0,%lo(__iob+40),%o0
+	sethi %hi(LC6),%o1
+	or %o1,%lo(LC6),%o1
+	mov %i0,%o2
+	call _fprintf,0
+	ld [%o3+%lo(_last_ptr)],%o3
+	ret
+	restore
+	.common _ptr,4,"bss"
+	.common _last_ptr,4,"bss"
+	.common _value,4,"bss"
+	.common _lvalue,4,"bss"
+	.common _last_token,4,"bss"
+	.common _variable,192,"bss"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-code-09.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,149 @@
+/*
+    Very Simple Code Generator for Motolora MC-6809
+	$Id$
+ */
+
+#include "s-compile.h"
+
+int  label = 0;
+char *comments = "*****";
+
+static char *intro[] = {
+    "        ORG     $100\n",
+    "variable        EQU     0\n",
+    "main\n",
+    "        LDS     #$FF00\n",
+    "        LDY     #4096\n",
+    "        PSHS    U\n",
+    "        LEAU    ,S\n",
+    "        LDD     #3\n",
+    NULL
+};
+
+static
+char *ending[] = {
+    "	     SYNC\n",
+    "        LEAS    2,S\n",
+    "        PULS    U,PC\n",
+    "\n",
+    NULL
+};
+
+void
+emit_push()
+{
+    printf("\tPSHS    D\n");
+}
+
+void
+emit_compare() 
+{
+    printf("\tTFR     D,X\n");
+    printf("\tCLRA\n");
+    printf("\tCLRB\n");
+    printf("\tCMPX    ,S++\n");
+    printf("\tBGE     L%d\n",label);
+    printf("\tINCB\n");
+    printf("L%d\n",label);
+    label++;
+}
+
+void
+emit_store(assign)
+int assign;
+{
+    printf("\tSTD     %d,Y\n",assign*2);
+}
+
+static
+char *opcode[] = {
+    "",
+    "SUBD",
+    "ADDD",
+    "",   /* no multiply for 6809 */
+    ""    /* no division for 6809 */
+};
+
+void
+emit_calc(enum opcode op)
+{
+    if(op==O_SUB) {   
+	printf("\t%s ,S++\n",opcode[op]);
+	printf("\tNEGA\n");
+	printf("\tNEGB\n");
+	printf("\tSBCA #0\n");
+    } else if(op==O_ADD) {
+	printf("\t%s ,S++\n",opcode[op]);
+    } else if(op==O_SUB_R) {
+	printf("\tsubd ,S++\n");
+    } else if(op==O_MUL) {
+	printf("\tLDX ,S++\n",opcode[op]);
+	printf("\tLBSR  _MULTI\n");
+    } else if(op==O_DIV) {
+	printf("\tLDX ,S++\n",opcode[op]);
+	printf("\tEXG D,X\n");
+	printf("\tLBSR  _DIVIDE\n");
+    } else if(op==O_DIV_R) {
+	printf("\tLDX ,S++\n",opcode[op]);
+	printf("\tLBSR  _DIVIDE\n");
+    }
+}
+
+void
+emit_value(d) 
+int d;
+{
+    printf("\tLDD   #%d\n",d);
+}
+
+void
+emit_load(d)
+int d;
+{
+    printf("\tLDD    %d,Y\n",d*2);
+}
+
+void
+emit_comment()
+{
+    if (before < ptr) {
+	putchar('*'); putchar('*'); putchar(' ');
+	while (before < ptr) {
+	    if(*before && *before!='\n') {
+		putchar(*before);
+	    }
+	    before++;
+	}
+	putchar('\n');
+    }
+}
+
+void
+emit_print()
+{
+    printf("\tLBSR print\n");
+}
+
+
+void
+emit_intro()
+{
+    char **iptr;
+    for(iptr=intro;*iptr;iptr++) {
+        printf("%s",*iptr);
+    }
+}
+
+void
+emit_ending()
+{
+    char **iptr;
+    for(iptr=ending;*iptr;iptr++) {
+        printf("%s",*iptr);
+    }
+    fflush(stdout);
+    system("/bin/cat ending.09");
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-code-intel-r.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,320 @@
+/*
+    Very Simple Code Generator for Intel x86
+    Register Version
+	$Id$
+ */
+
+#include "s-compile.h"
+
+int  label = 0;
+char *comments = "#####";
+
+static
+char *intro[] = {
+    "#APP\n",    /* To process comments by GNU as */
+    "\t.file   \"s-calc.c\"\n",
+    ".text\n",
+    "\t.align 2\n",
+    ".globl main\nmain:\n",
+    "\tpushl %ebp\n",
+    "\tmovl %esp,%ebp\n",
+    "\tsubl $1028,%esp\n",
+/*
+#ifndef NEXTSTEP
+    "\tcall ___main\n",
+#endif
+ */
+    NULL
+};
+
+static
+char *ending[] = {
+    "\txorl %eax,%eax\n",
+    "\tleave\n",
+    "\tret\n",
+    "_print:\n",
+    "\tpushl %ebp\n",
+    "\tmovl %esp,%ebp\n",
+    "\tpushl %eax\n",
+    "\tpushl $_format\n",
+    "\tcall printf\n",
+    "\tleave\n",
+    "\tret\n",
+    "_format:\n",
+    "\t.ascii \" = %d\\12\\0\"\n",
+    "\t.align 2\n",
+    ".comm _variable,192\n",
+    NULL
+};
+
+
+static int  creg;     /* current register */
+static char *crn;     /* current register name */
+static int  lreg;     /* operand register */
+static char *lrn;     /* operand register name */
+static int  dreg;     /* temporary register */
+static char *drn;     /* temporary register name */
+static int  xreg;     /* operand register  */
+static char *xrn;     /* operand register name */
+static int  reg_sp;   /* REGister Stack-Pointer */
+
+
+const int REG_EAX    = 0;
+const int REG_EBX    = 1;
+const int REG_ECX    = 2;
+const int REG_EDX    = 3;
+const int REG_ESI    = 4;
+const int REG_EDI    = 5;
+const int REG_EBP    = 6;
+const int REG_ESP    = 7;
+
+
+const int DATA_REG  = 0    ;
+const int POINTER_REG  = 3    ;
+
+/*
+    creg   currrent register
+    lreg   operand  register
+    dreg   spare    register
+
+    regs[]          register usage
+
+    reg_name[creg]  register name
+ */
+
+#define MAX_MAX  20
+static int regs[MAX_MAX];       /* »È¤ï¤ì¤Æ¤¤¤ë¥ì¥¸¥¹¥¿¤ò¼¨¤¹¥Õ¥é¥° */
+static int reg_stack[MAX_MAX];  /* ¼ÂºÝ¤Î¥ì¥¸¥¹¥¿¤ÎÎΰè */
+
+const int	MAX_REGISTER=6;
+const int	MAX_DATA_REG=4;    
+const int	MAX_POINTER=3;    
+
+static char    *reg_name[] = {"%eax","%ebx","%ecx","%edx","%esi",
+		      "%edi","%ebp","%esp"};
+static char    *reg_name_l[] = {"%al","%bl","%cl","%dl"};
+
+static char *
+regster(i)
+int i;
+{
+    return reg_name[i];
+}
+
+static int 
+get_register() 
+{    /* »È¤ï¤ì¤Æ¤¤¤Ê¤¤¥ì¥¸¥¹¥¿¤òÄ´¤Ù¤ë */
+    int i;
+    for(i=0;i<MAX_REGISTER;i++) {
+	if (! regs[i]) {    /* »È¤ï¤ì¤Æ¤¤¤Ê¤¤¤Ê¤é */
+	    regs[i]=1;      /* ¤½¤Î¥ì¥¸¥¹¥¿¤ò»È¤¦¤³¤È¤òÀë¸À¤· */
+	    return i;       /* ¤½¤Î¾ì½ê¤òɽ¤¹ÈÖ¹æ¤òÊÖ¤¹ */
+	}
+    }
+    return -1;    /* ¶õ¤¤¤Æ¤¤¤ë¾ì½ê¤¬¤Ê¤¤¤Ê¤é¡¢¤½¤ì¤òɽ¤¹ -1 ¤òÊÖ¤¹ */
+}
+
+static void 
+free_register(i) {    /* ¤¤¤é¤Ê¤¯¤Ê¤Ã¤¿¥ì¥¸¥¹¥¿¤ò³«Êü */
+    regs[i]=0;
+}
+
+static int
+register_full()
+{
+    int i;
+    for(i=0;i<MAX_REGISTER;i++) {
+	if (! regs[i]) { 
+	    return 0;  
+	}
+    }
+    return 1;    
+}
+
+void 
+emit_init() 
+{
+    int i;
+    for(i=0;i<MAX_REGISTER;i++) regs[i]=0;
+    creg = get_register();
+    crn = reg_name[creg];
+    dreg = REG_EDX; /* ¤³¤ì¤Ï³ä»»¤Ê¤É¤ÇÆÃÊ̤˻Ȥï¤ì¤ë */
+    regs[dreg]=1;
+    drn = reg_name[dreg];
+    reg_sp = 0;
+}
+
+static int 
+pop_register() 
+{     /* ¥ì¥¸¥¹¥¿¤«¤éÃͤò¼è¤ê½Ð¤¹ */
+    int i,j;
+
+    j = creg;
+    i = reg_stack[--reg_sp];
+
+    if(i<0) {
+	return i;
+    } else {
+	lreg = i;
+	lrn = reg_name[lreg];
+	regs[i]=0;
+	return lreg;
+    }
+}
+
+void 
+emit_push()
+{
+    int new_reg;
+    new_reg = get_register();
+    if(new_reg<0) {                     /* ¤â¤¦¥ì¥¸¥¹¥¿¤¬¤Ê¤¤ */
+	if (reg_sp==MAX_MAX-1) {
+	    printf("Compilation error: too complex expression\n");
+	} else {
+	    reg_stack[reg_sp++] =  -1;
+	    printf("\tpushl %s\n",crn);
+	}
+    } else {
+	reg_stack[reg_sp++] = creg;     /* push ¤¹¤ë¤«¤ï¤ê¤Ë¥ì¥¸¥¹¥¿¤ò»È¤¦ */
+	creg = new_reg;
+	crn = reg_name[creg];
+    }
+}
+
+char *
+emit_pop()
+{
+    if (pop_register()==-1) {
+	printf("\tpopl %s\n",drn);
+	xrn = drn;
+	xreg = dreg;
+    } else {
+	xrn = lrn;
+	xreg = lreg;
+    }
+    return xrn;
+}
+
+
+void
+emit_compare() 
+{
+    char *orn;
+    orn = emit_pop();
+    printf("\tcmpl %s,%s\n",crn,orn);
+    printf("\t%s %%dl\n","setg");
+    printf("\tmovzbl %%dl,%s\n",crn);
+}
+
+void
+emit_store(assign)
+int assign;
+{
+    printf("\tmovl %s,_variable+%d\n",crn,assign*4);
+}
+
+static
+char *opcode[] = {
+    "",
+    "subl",
+    "addl",
+    "imull",
+    "idiv",
+    "",
+    "",
+    "",
+    "",
+    "subl",
+    "idiv",
+};
+
+void
+emit_calc(enum opcode op)
+{
+    char *orn;
+    orn = emit_pop();
+    if(op==O_DIV) {
+	if (xreg==REG_EAX) {
+	    printf("\tcltd\n");
+	    printf("\tdivl %s\n",crn);
+	    printf("\tmovl %s,%s\n",xrn,crn);
+	} else if (creg==REG_EAX) {
+	    printf("\txchg %s,%s\n",xrn,crn);
+	    printf("\tcltd\n");
+	    printf("\tdivl %s\n",xrn);
+	} else {
+	    if (regs[REG_EAX]) {
+		printf("\tpushl %%eax\n");
+	    }
+	    printf("\tmovl %s,%%eax\n",xrn);
+	    printf("\tcltd\n");
+	    printf("\tdivl %s\n",crn);
+	    printf("\tmovl %%eax,%s\n",crn);
+	    if (regs[REG_EAX]) {
+		printf("\tpopl %%eax\n");
+	    }
+	}
+    } else {
+	printf("\t%s %s,%s\n",opcode[op],orn,crn);
+    }
+}
+
+void
+emit_value(d) 
+int d;
+{
+    printf("\tmovl $%d,%s\n",d,crn);
+}
+
+void
+emit_load(d)
+int d;
+{
+    printf("\tmovl _variable+%d,%s\n",d*4,crn);
+}
+
+void
+emit_comment()
+{
+    if (before < ptr) {
+	putchar('#'); putchar('#'); putchar(' ');
+	while (before < ptr) {
+	    if(*before && *before!='\n') {
+		putchar(*before);
+	    }
+	    before++;
+	}
+	putchar('\n');
+    }
+}
+
+void
+emit_print()
+{
+    if (creg!=REG_EAX) {
+        printf("\tmovl %s,%%eax\n",crn);
+    }
+    printf("\tcall _print\n");
+}
+
+
+void
+emit_intro()
+{
+    char **iptr;
+    for(iptr=intro;*iptr;iptr++) {
+        printf("%s",*iptr);
+    }
+    emit_init() ;
+}
+
+void
+emit_ending()
+{
+    char **iptr;
+    for(iptr=ending;*iptr;iptr++) {
+        printf("%s",*iptr);
+    }
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-code-intel.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,158 @@
+/*
+    Very Simple Code Generator for Intel x86
+	$Id$
+ */
+
+#include "s-compile.h"
+
+int  label = 0;
+char *comments = "#####";
+
+static
+char *intro[] = {
+    "#APP\n",    /* To process comments by GNU as */
+    "\t.file   \"s-calc.c\"\n",
+    ".text\n",
+    "\t.align 2\n",
+    ".globl main\nmain:\n",
+    "\tpushl %ebp\n",
+    "\tmovl %esp,%ebp\n",
+    "\tsubl $1028,%esp\n",
+/*
+#ifndef NEXTSTEP
+    "\tcall ___main\n",
+#endif
+ */
+    NULL
+};
+
+static
+char *ending[] = {
+    "\txorl %eax,%eax\n",
+    "\tleave\n",
+    "\tret\n",
+    "_print:\n",
+    "\tpushl %ebp\n",
+    "\tmovl %esp,%ebp\n",
+    "\tpushl %eax\n",
+    "\tpushl $_format\n",
+    "\tcall printf\n",
+    "\tleave\n",
+    "\tret\n",
+    "_format:\n",
+    "\t.ascii \" = %d\\12\\0\"\n",
+    "\t.align 2\n",
+    ".comm _variable,192\n",
+    NULL
+};
+
+void
+emit_push()
+{
+    printf("\tpushl %%eax\n");
+}
+
+void
+emit_compare() 
+{
+    printf("\tcmpl %%eax,(%%esp)\n");
+    printf("\t%s %%al\n","setg");
+    printf("\tmovzbl %%al,%%eax\n");
+    printf("\taddl $4,%%esp\n");
+}
+
+void
+emit_store(assign)
+int assign;
+{
+    printf("\tmovl %%eax,_variable+%d\n",assign*4);
+}
+
+static
+char *opcode[] = {
+    "",
+    "subl",
+    "addl",
+    "imull",
+    "idiv",
+    "",
+    "",
+    "",
+    "",
+    "subl",
+    "idiv",
+};
+
+void
+emit_calc(enum opcode op)
+{
+    if(op==O_DIV) {
+	printf("\tmovl %%eax,%%ebx\n");
+	printf("\tpopl %%eax\n");
+	printf("\tcltd\n");
+	printf("\tidiv %%ebx\n",op);
+    } else if(op==O_SUB) {
+	printf("\tpopl %%ebx\n");
+	printf("\t%s %%ebx,%%eax\n",opcode[op]);
+	printf("\tnegl %%eax\n");
+    } else {
+	printf("\tpopl %%ebx\n");
+	printf("\t%s %%ebx,%%eax\n",opcode[op]);
+    }
+}
+
+void
+emit_value(d) 
+int d;
+{
+    printf("\tmovl $%d,%%eax\n",d);
+}
+
+void
+emit_load(d)
+int d;
+{
+    printf("\tmovl _variable+%d,%%eax\n",d*4);
+}
+
+void
+emit_comment()
+{
+    if (before < ptr) {
+	putchar('#'); putchar('#'); putchar(' ');
+	while (before < ptr) {
+	    if(*before && *before!='\n') {
+		putchar(*before);
+	    }
+	    before++;
+	}
+	putchar('\n');
+    }
+}
+
+void
+emit_print()
+{
+    printf("\tcall _print\n");
+}
+
+
+void
+emit_intro()
+{
+    char **iptr;
+    for(iptr=intro;*iptr;iptr++) {
+        printf("%s",*iptr);
+    }
+}
+
+void
+emit_ending()
+{
+    char **iptr;
+    for(iptr=ending;*iptr;iptr++) {
+        printf("%s",*iptr);
+    }
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-code-intel.c.3.1	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,156 @@
+/*
+    Very Simple Code Generator for Intel x86
+	$Id$
+ */
+
+#include "s-compile.h"
+
+int  label = 0;
+char *comments = "#####";
+
+
+char *intro[] = {
+    "#APP\n",    /* To process comments by GNU as */
+    "\t.file   \"s-calc.c\"\n",
+    ".text\n",
+    "\t.align 2\n",
+    ".globl _main\n_main:\n",
+    "\tpushl %ebp\n",
+    "\tmovl %esp,%ebp\n",
+    "\tsubl $1028,%esp\n",
+#ifndef NEXTSTEP
+    "\tcall ___main\n",
+#endif
+    NULL
+};
+
+char *ending[] = {
+    "\txorl %eax,%eax\n",
+    "\tleave\n",
+    "\tret\n",
+    "_print:\n",
+    "\tpushl %ebp\n",
+    "\tmovl %esp,%ebp\n",
+    "\tpushl %eax\n",
+    "\tpushl $_format\n",
+    "\tcall _printf\n",
+    "\tleave\n",
+    "\tret\n",
+    "_format:\n",
+    "\t.ascii \" = %d\\12\\0\"\n",
+    "\t.align 2\n",
+    ".comm _variable,192\n",
+    NULL
+};
+
+void
+emit_push()
+{
+    printf("\tpushl %%eax\n");
+}
+
+void
+emit_compare() 
+{
+    printf("\tcmpl %%eax,(%%esp)\n");
+    printf("\t%s %%al\n","setg");
+    printf("\tmovzbl %%al,%%eax\n");
+    printf("\taddl $4,%%esp\n");
+}
+
+void
+emit_store(assign)
+int assign;
+{
+    printf("\tmovl %%eax,_variable+%d\n",assign*4);
+}
+
+
+char *opcode[] = {
+    "",
+    "subl",
+    "addl",
+    "imull",
+    "idiv",
+    "",
+    "",
+    "",
+    "",
+    "subl",
+    "idiv",
+};
+
+void
+emit_calc(op)
+int op;
+{
+    if(op==O_DIV) {
+	printf("\tmovl %%eax,%%ebx\n");
+	printf("\tpopl %%eax\n");
+	printf("\tcltd\n");
+	printf("\tidiv %%ebx\n",op);
+    } else if(op==O_SUB) {
+	printf("\tpopl %%ebx\n");
+	printf("\t%s %%ebx,%%eax\n",opcode[op]);
+	printf("\tnegl %%eax\n");
+    } else {
+	printf("\tpopl %%ebx\n");
+	printf("\t%s %%ebx,%%eax\n",opcode[op]);
+    }
+}
+
+void
+emit_value(d) 
+int d;
+{
+    printf("\tmovl $%d,%%eax\n",d);
+}
+
+void
+emit_load(d)
+int d;
+{
+    printf("\tmovl _variable+%d,%%eax\n",d*4);
+}
+
+void
+emit_comment()
+{
+    if (before < ptr) {
+	putchar('#'); putchar('#'); putchar(' ');
+	while (before < ptr) {
+	    if(*before && *before!='\n') {
+		putchar(*before);
+	    }
+	    before++;
+	}
+	putchar('\n');
+    }
+}
+
+void
+emit_print()
+{
+    printf("\tcall _print\n");
+}
+
+
+void
+emit_intro()
+{
+    char **iptr;
+    for(iptr=intro;*iptr;iptr++) {
+        printf("%s",*iptr);
+    }
+}
+
+void
+emit_ending()
+{
+    char **iptr;
+    for(iptr=ending;*iptr;iptr++) {
+        printf("%s",*iptr);
+    }
+}
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-code-m68k.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,214 @@
+/*
+    Simple Code Generator for Motolora MC-68000
+	$Id$
+ */
+
+#include "s-compile.h"
+
+char *comments = "####";
+
+static
+char *intro[] = {
+    "#APP\n",    /* To process comments by GNU as */
+    "\t.file   \"output.s\"\n",
+    ".text\n",
+    "\t.align 1\n",
+    ".globl _main\n_main:\n",
+    "\tlink a6,#0\n",
+    NULL
+};
+
+static
+char *ending[] = {
+    "\tunlk a6\n",
+    "\trts\n",
+    "_print:\n",
+    "\tlink a6,#0\n",
+    "\tmovel d0,sp@-\n",
+    "\tmovel d0,sp@-\n",
+    "\tpea _format\n",
+    "\tjbsr _printf\n",
+    "\taddqw #8,sp\n",
+    "\tunlk a6\n",
+    "\trts\n",
+    "_format:\n",
+    "\t.ascii \" = %08x %d\\12\\0\"\n",
+    "\t.align 2\n",
+    ".comm _variable,192\n",
+    NULL
+};
+
+static
+char *opcode[] = {
+    "",
+    "subl",
+    "addl",
+    "mulsl",
+    "divsl",
+    "andl",
+    "orl",
+    "eorl",
+    "subl",
+    "divsl",
+/*
+    "asll",
+    "asrl",
+    "subl",
+    "divsl",
+    "slt",
+    "sgt",
+    "seq",
+    "sne",
+ */
+};
+
+void
+emit_push()
+{
+    printf("\tmovel d0,sp@-\n");
+}
+
+void
+emit_not() 
+{
+    printf("\ttstl d0\n");
+    printf("\tsne d0\n");
+    printf("\textbl d0\n");
+}
+
+void
+emit_compare() 
+{
+    printf("\tmovel sp@,d1\n");
+    printf("\taddql #4,sp\n");
+    printf("\tcmpl d1,d0\n");
+    printf("\tsetg d0\n");
+    printf("\textbl d0\n");
+    printf("\tnegl d0\n");
+}
+
+void
+emit_store(assign)
+int assign;
+{
+    printf("\tmovel d0,_variable+%d\n",assign*4);
+}
+
+
+void
+emit_calc(enum opcode op)
+{
+    if(op==O_DIV) {
+	printf("\tmovel d0,d1\n");
+	printf("\tmovel sp@,d0\n");
+	printf("\taddql #4,sp\n");
+	printf("\tdivsl d1,d0\n");
+    } else if(op==O_MOD) {
+	printf("\tmovel d0,d2\n");
+	printf("\tmovel sp@,d0\n");
+	printf("\taddql #4,sp\n");
+	printf("\tdivsll d2,d0:d1\n");
+    } else if(op==O_ADD||op==O_MUL||op==O_AND||op==O_OR
+	    ||op==O_XOR) {
+	/* commutable operator */
+	printf("\tmovel sp@,d1\n");
+	printf("\taddql #4,sp\n");
+	printf("\t%s d1,d0\n",opcode[op]);
+    } else if(op==O_SUB_R||op==O_DIV_R) {
+	printf("\tmovel sp@,d1\n");
+	printf("\taddql #4,sp\n");
+	printf("\t%s d0,d1\n",opcode[op]);
+	printf("\tmovel d1,d0\n");
+    } else {
+	printf("\tmovel d0,d1\n");
+	printf("\tmovel sp@,d0\n");
+	printf("\taddql #4,sp\n");
+	printf("\t%s d1,d0\n",opcode[op]);
+    }
+}
+
+void
+emit_neg()
+{
+	printf("\tnegl d0\n");
+}
+
+void
+emit_value(d) 
+int d;
+{
+    if(-127<=d && d<=127) {
+	printf("\tmoveq #%d,d0\n",d);
+    } else {
+	printf("\tmovel #%d,d0\n",d);
+    }
+}
+
+void
+emit_load(d)
+int d;
+{
+    printf("\tmovel _variable+%d,d0\n",d*4);
+}
+
+void
+emit_cond(lbl) 
+{
+    printf("\ttstl d0\n");
+    printf("\tjeq L%d\n",lbl);
+}
+
+void
+emit_jump(lbl)
+{
+    printf("\tjra L%d\n",lbl);
+}
+
+void
+emit_label(lbl)
+{
+    printf("L%d:\n",lbl);
+}
+
+void
+emit_comment()
+{
+    if (before < ptr) {
+	putchar('#'); putchar('#'); putchar(' ');
+	while (before < ptr) {
+	    if(*before && *before!='\n') {
+		putchar(*before);
+	    }
+	    before++;
+	}
+	putchar('\n');
+    }
+}
+
+void
+emit_print()
+{
+    printf("\tjbsr _print\n");
+}
+
+
+void
+emit_intro()
+{
+    char **iptr;
+    for(iptr=intro;*iptr;iptr++) {
+        printf("%s",*iptr);
+    }
+}
+
+void
+emit_ending()
+{
+    char **iptr;
+    for(iptr=ending;*iptr;iptr++) {
+        printf("%s",*iptr);
+    }
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-code-print.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,86 @@
+/*
+    Very Simple Code Generator for Reverse Polish Notation
+	$Id$
+ */
+
+#include "s-compile.h"
+
+char *comments = "#####";
+
+void
+emit_push()
+{
+}
+
+void
+emit_compare() 
+{
+    printf("> ");
+}
+
+void
+emit_store(assign)
+int assign;
+{
+    printf("->%c ",assign+'a');
+}
+
+
+char *opcode[] = {
+    "",
+    "-",
+    "+",
+    "*",   
+    "/",
+    "",
+    "",
+    "",
+    "",
+    "-(r)",
+    "/(r)",
+};
+
+void
+emit_calc(enum opcode op)
+{
+    printf("%s ",opcode[op]);
+}
+
+void
+emit_value(d) 
+int d;
+{
+    printf("%d ",d);
+}
+
+void
+emit_load(d)
+int d;
+{
+    printf("%c\n",d+'a');
+}
+
+void
+emit_comment()
+{
+}
+
+void
+emit_print()
+{
+    printf("print\n");
+}
+
+
+void
+emit_intro()
+{
+}
+
+void
+emit_ending()
+{
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-code-rs6k-r.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,181 @@
+/*
+    Very Simple Code Generator for IBM PowerPC (with register)
+	$Id$
+ */
+
+#include "s-compile.h"
+
+int  label = 0;
+char *comments = "#####";
+
+static int  current_register;
+static int  reg_sp;
+static char *crn;  /* current register name */
+static char *lrn;  /* last register name */
+
+static char *reg_name[] = {
+    "r0","r1","r2","r3","r4","r5","r6","r7",
+    "r8","r9","r10","r11","r12","r13","r14","r15",
+    "r16","r17","r18","r19","r20","r21","r22","r23",
+    "r24","r25","r26","r27","r28","r29","r30","r31"
+};
+#define MAX_REGISTER 32
+static char regs[MAX_REGISTER];
+static char reg_stack[MAX_REGISTER];
+
+static int
+get_register() {
+    int i;
+    for(i=0;i<MAX_REGISTER;i++) {
+	if (! regs[i]) {
+	    regs[i]=1;
+	    return i;
+	}
+    }
+    error("Expression too complex (register overflow)");
+    return -1;
+}
+
+static void
+free_register(i) {
+    regs[i]=0;
+}
+
+static char *
+pop_register() {
+    int i,j;
+
+    j = current_register;
+    i = reg_stack[--reg_sp];
+    lrn = reg_name[i];
+
+    regs[j]=0;
+
+    current_register = i;
+    crn = reg_name[i];
+    return reg_name[j];
+}
+
+
+void
+emit_push()
+{
+    reg_stack[reg_sp++] =  current_register;
+    lrn = reg_name[current_register];
+    current_register = get_register();
+    crn = reg_name[current_register];
+}
+
+void
+emit_compare() 
+{
+    char *orn;
+    orn = pop_register();
+    printf("\tcmp   0,%s,%s\n",lrn,orn);
+    printf("\tcal   %s,1(r0)\n",crn);
+    printf("\tbc    BO_IF,CR0_GT,__L%d\n",label);
+    printf("\tcal   %s,0(r0)\n",crn);
+    printf("__L%d:\n",label);
+    label++;
+}
+
+void
+emit_store(assign)
+int assign;
+{
+    printf("\tl       r4,T.28.variable(RTOC)\n");
+    printf("\tst      %s,%d(r4)\n",crn,assign*4);
+}
+
+static
+char *opcode[] = {
+    "",
+    "sf",
+    "a",
+    "muls",
+    "divs",
+    "",
+    "",
+    "",
+    "",
+    "sf",
+    "divs",
+};
+
+void
+emit_calc(enum opcode op)
+{
+    char *orn; 
+    orn = pop_register();
+    if(op==O_DIV || op==O_SUB_R) {
+	printf("\t%s  %s,%s,%s\n",opcode[op],crn,lrn,orn);
+    } else {
+	printf("\t%s %s,%s,%s\n", opcode[op], crn, orn, lrn);
+    }
+}
+
+void
+emit_value(d) 
+int d;
+{
+    printf("\tcal   %s,%d(r0)\n",crn,d&0xffff);
+    if(d&0xffff0000) {
+	printf("\tcau   %s,%s,%d\n",crn,crn,(d&0xffff0000)>>16);
+    }
+
+}
+
+void
+emit_load(assign)
+int assign;
+{
+    printf("\tl       r4,T.28.variable(RTOC)\n");
+    printf("\tl       %s,%d(r4)\n",crn,assign*4);
+}
+
+void
+emit_comment()
+{
+    if (before < ptr) {
+	putchar('#'); putchar('#'); putchar(' ');
+	while (before < ptr) {
+	    if(*before && *before!='\n') {
+		putchar(*before);
+	    }
+	    before++;
+	}
+	putchar('\n');
+    }
+}
+
+void
+emit_print()
+{
+    if(current_register!=3) {
+       printf("\tcal r3,0(%s)\n",crn);
+    }
+    printf("\tbl  .print\n");
+}
+
+void
+emit_intro()
+{
+    int i;
+
+    system("/bin/cat intro.rs6k");
+    for(i=0;i<MAX_REGISTER;i++) regs[i]=0;
+    regs[0]=regs[1]=regs[2]=regs[4]=1;   /* already used */
+    current_register = get_register();
+    crn = reg_name[current_register];
+    reg_sp = 0;
+}
+
+void
+emit_ending()
+{
+    fflush(stdout);	
+    system("/bin/cat ending.rs6k");
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-code-rs6k.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,119 @@
+/*
+    Very Simple Code Generator for IBM PowerPC (with stack)
+	$Id$
+ */
+
+#include "s-compile.h"
+
+int  label = 0;
+char *comments = "#####";
+
+
+void
+emit_push()
+{
+    printf("\tstu   r3,-4(SP)\n");
+}
+
+void
+emit_compare() 
+{
+    printf("\tl     r4,0(SP)\n");
+    printf("\tcmp   0,r4,r3\n");
+    printf("\tai    SP,SP,4\n");
+    printf("\tcal   r3,1(r0)\n");
+    printf("\tbc    BO_IF,CR0_GT,__L%d\n",label);
+    printf("\tcal   r3,0(r0)\n");
+    printf("__L%d:\n",label);
+    label++;
+}
+
+void
+emit_store(assign)
+int assign;
+{
+    printf("\tl       r4,T.28.variable(RTOC)\n");
+    printf("\tst      r3,%d(r4)\n",assign*4);
+}
+
+static
+char *opcode[] = {
+    "",
+    "sf",
+    "a",
+    "muls",
+    "divs",
+    "",
+    "",
+    "",
+    "",
+    "sf",
+    "divs",
+};
+
+void
+emit_calc(enum opcode op)
+{
+    printf("\tl       r4,0(SP)\n");
+    printf("\tai      SP,SP,4\n");
+    if(op==O_DIV || op==O_SUB_R) {
+	printf("\t%s  r3,r4,r3\n",opcode[op]);
+    } else {
+	printf("\t%s  r3,r3,r4\n",opcode[op]);
+    }
+}
+
+void
+emit_value(d) 
+int d;
+{
+    printf("\tcal   r3,%d(r0)\n",d&0xffff);
+    if(d&0xffff0000) {
+	printf("\tcau   r3,r3,%d\n",(d&0xffff0000)>>16);
+    }
+}
+
+void
+emit_load(d)
+int d;
+{
+    printf("\tl       r4,T.28.variable(RTOC)\n");
+    printf("\tl       r3,%d(r4)\n",d*4);
+}
+
+void
+emit_comment()
+{
+    if (before < ptr) {
+	putchar('#'); putchar('#'); putchar(' ');
+	while (before < ptr) {
+	    if(*before && *before!='\n') {
+		putchar(*before);
+	    }
+	    before++;
+	}
+	putchar('\n');
+    }
+}
+
+void
+emit_print()
+{
+    printf("\tbl  .print\n");
+}
+
+void 
+emit_intro()
+{
+    system("/bin/cat intro.rs6k");
+}
+
+void 
+emit_ending()
+{
+    fflush(stdout);	
+    system("/bin/cat ending.rs6k");
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-code-sparc.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,265 @@
+/*
+    Very Simple Code Generator for Sun SPARC
+	$Id$
+ */
+
+#include "s-compile.h"
+
+int  label = 0;
+char *comments = "#####";
+
+static
+char *reg_name[] = {
+    "%g0","%g1","%g2","%g3","%g4","%g5","%g6","%g7",
+    "%i0","%i1","%i2","%i3","%i4","%i5","%i6","%i7",
+    "%l0","%l1","%l2","%l3","%l4","%l5","%l6","%l7",
+    "%o0","%o1","%o2","%o3","%o4","%o5","%o6","%o7"
+};
+#define O0RN 24
+#define MAX_REGISTER 32
+
+static int  current_register;
+static char reg_stack[MAX_REGISTER];
+static int  reg_sp;
+static char *crn;  /* current register name */
+static char *lrn;  /* last register name */
+
+static char regs[MAX_REGISTER];
+
+static int
+get_register() {
+    int i;
+    for(i=0;i<MAX_REGISTER;i++) {
+	if (! regs[i]) {
+	    regs[i]=1;
+	    return i;
+	}
+    }
+    error("Expression too complex (register overflow)");
+    return -1;
+}
+
+static void
+free_register(i) {
+    regs[i]=0;
+}
+
+/* simple version
+static char *
+pop_register() {
+    int i;
+    i = reg_stack[--reg_sp];
+    regs[i]=0;
+    lrn = reg_name[i];
+    return crn;
+}
+ */
+
+static char *
+pop_register() {
+    int i,j;
+
+    j = current_register;
+    i = reg_stack[--reg_sp];
+    lrn = reg_name[i];
+
+    regs[j]=0;
+
+    current_register = i;
+    crn = reg_name[i];
+    return reg_name[j];
+}
+
+static
+char *intro[] = {
+    "gcc2_compiled.:\n",
+    "___gnu_compiled_c:\n",
+    ".text\n",
+    "        .align 4\n",
+    "        .global _main\n",
+    "        .proc   04\n",
+    "_main:\n",
+    "        !#PROLOGUE# 0\n",
+    "        save %sp,-104,%sp\n",
+    "        !#PROLOGUE# 1\n",
+    "        call ___main,0\n",
+    "        nop\n",
+    NULL
+};
+
+static
+char *ending[] = {
+    "        mov 0,%i0\n",
+    "L1:\n",
+    "        ret\n",
+    "        restore\n",
+    "        .align 8\n",
+    "LC0:\n",
+    "        .ascii \"0x%08x = %d\\12\\0\"\n",
+    "        .align 4\n",
+    "        .global _print\n",
+    "        .proc   04\n",
+    "_print:\n",
+    "        !#PROLOGUE# 0\n",
+    "        save %sp,-104,%sp\n",
+    "        !#PROLOGUE# 1\n",
+    "        st %i0,[%fp+68]\n",
+    "        sethi %hi(LC0),%o1\n",
+    "        or %o1,%lo(LC0),%o0\n",
+    "        ld [%fp+68],%o1\n",
+    "        ld [%fp+68],%o2\n",
+    "        call _printf,0\n",
+    "        nop\n",
+    "L2:\n",
+    "        ret\n",
+    "        restore\n",
+    "        .common _variable,256,\"bss\"\n",
+    NULL
+};
+
+void
+emit_push()
+{
+    reg_stack[reg_sp++] =  current_register;
+    lrn = reg_name[current_register];
+    current_register = get_register();
+    crn = reg_name[current_register];
+}
+
+void
+emit_compare() 
+{
+    char *orn;
+    orn = pop_register();
+    printf("\tcmp %s,%s\n",lrn,orn);
+    printf("\tbg,a LL%d\n",label);
+    printf("\tmov   1,%s\n",crn);
+    printf("\tmov   0,%s\n",crn);
+    printf("LL%d:\n",label);
+    label++;
+}
+
+void
+emit_store(assign)
+int assign;
+{
+    printf("\tsethi %%hi(_variable+%d),%%g2\n",assign*4);
+    printf("\tst %s,[%%g2+%%lo(_variable+%d)]\n",crn,assign*4);
+}
+
+static
+char *opcode[] = {
+    "",
+    "sub",
+    "add",
+    "mul",
+    "div",
+    "",
+    "",
+    "",
+    "",
+    "sub",
+    "div",
+};
+
+void
+emit_calc(enum opcode op)
+{
+    char *orn;
+    orn = pop_register();
+    if(op==O_MUL) {
+	printf("\tmov %s,%%o1\n",lrn);
+	printf("\tcall .umul,0\n");
+	printf("\tmov %s,%%o0\n",orn);
+	printf("\tmov %%o0,%s\n",crn);
+    } else if(op==O_DIV) {
+	printf("\tmov %s,%%o0\n",lrn);
+	printf("\tcall .div,0\n");
+	printf("\tmov %s,%%o1\n",orn);
+	printf("\tmov %%o0,%s\n",crn);
+    } else if(op==O_DIV_R) {
+	printf("\tmov %s,%%o0\n",orn);
+	printf("\tcall .div,0\n");
+	printf("\tmov %s,%%o1\n",lrn);
+	printf("\tmov %%o0,%s\n",crn);
+    } else if(op==O_SUB) {
+	printf("\t%s %s,%s,%s\n", opcode[op], lrn, orn, crn);
+    } else {
+	printf("\t%s %s,%s,%s\n", opcode[op], orn, lrn, crn);
+    }
+}
+
+void
+emit_value(d) 
+int d;
+{
+    if(-4096 < d && d < 4096) {
+	printf("\tmov %d,%s\n",d,crn);
+    } else {
+	printf("\tsethi %%hi(%d),%s\n",d,crn);
+	printf("\tor %s,%%lo(%d),%s\n",crn,d,crn);
+    }
+}
+
+void
+emit_load(assign)
+int assign;
+{
+    printf("\tsethi %%hi(_variable+%d),%%g2\n",assign*4);
+    printf("\tld [%%g2+%%lo(_variable+%d)],%s\n",assign*4,crn);
+}
+
+void
+emit_comment()
+{
+    if (before < ptr) {
+	putchar('#'); putchar('#'); putchar(' ');
+	while (before < ptr) {
+	    if(*before && *before!='\n') {
+		putchar(*before);
+	    }
+	    before++;
+	}
+	putchar('\n');
+    }
+}
+
+void
+emit_print()
+{
+    printf("\tcall _print,0\n");
+    if(current_register!=O0RN) {
+	printf("\tmov %s,%%o0\n",crn);
+    } else {
+	printf("\tnop\n");
+    }
+}
+
+void
+emit_intro()
+{
+    char **iptr;
+    int i;
+    for(iptr=intro;*iptr;iptr++) {
+	printf("%s",*iptr);
+    }
+    for(i=0;i<MAX_REGISTER;i++) regs[i]=0;
+    regs[0]=regs[1]=regs[2]=regs[24]=regs[25]=
+       regs[8+6]=regs[16+6]=1;   /* already used */
+    current_register = get_register();
+    regs[current_register] = 1;
+    crn = reg_name[current_register];
+    reg_sp = 0;
+}
+
+void
+emit_ending()
+{
+    char **iptr;
+    for(iptr=ending;*iptr;iptr++) {
+	printf("%s",*iptr);
+    }
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-compile.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,161 @@
+/*
+    Very Simple Compiler (Parser Part)
+    Parser part
+	$Id$
+ */
+
+#include "s-compile.h"
+
+static void  expr();
+static void  aexpr();
+static void  mexpr();
+static void  term();
+
+static void
+expr()
+{
+    int assign;
+
+    emit_comment();
+    aexpr();
+    assign = lvalue;
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '>': 
+	    emit_push();
+	    aexpr();
+	    emit_compare();
+	    break;
+	case '=': 
+	    if(assign>=0) {
+		expr(); 
+		emit_store(assign);
+		return;
+	    } else {
+		error("Bad assignment");
+		return;
+	    }
+	case ')': 
+	    return;
+	case EOF: 
+	    return;
+	default:
+	    error("Bad expression");
+	    token();
+	    return;
+	}
+    }
+    return;
+}
+
+static void
+aexpr()
+{
+
+    emit_comment();
+    mexpr();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '-': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_SUB);
+	    break;
+	case '+': 
+	    emit_push();
+	    mexpr(); 
+	    emit_calc(O_ADD);
+	    break;
+	default:
+	    return;
+	}
+    }
+    return;
+}
+
+static void
+mexpr()
+{
+    int d;
+
+    emit_comment();
+    term();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '*': 
+	    emit_push();
+	    term(); 
+/*###88 [cc] `O_MUL' undeclared (first use in this function)%%%*/
+	    emit_calc(O_MUL);
+	    break;
+	case '/': 
+	    emit_push();
+	    term(); 
+/*###93 [cc] `O_DIV' undeclared (first use in this function)%%%*/
+	    emit_calc(O_DIV); 
+	    break;
+	default:
+	    return;
+	}
+    }
+    return;
+}
+
+static void
+term()
+{
+    int d;
+
+    lvalue= -1;
+    emit_comment();
+    token();
+    if(last_token==EOF) {
+	error("Term expected");
+    }
+    switch(last_token) {
+    case '0':
+	d = value;
+	emit_value(d);
+	token();
+	return;
+    case 'v':
+	d = lvalue = value;
+	emit_load(d);
+	token();
+	return;
+    case '(':
+	expr();
+	if(last_token != ')') {
+	    error("Unbalanced parenthsis");
+	} 
+	token(); 
+	return;
+    default:
+	token();
+	error("Unknown term");
+	return;
+    }
+}
+
+
+int
+main() 
+{
+    int d;
+    char buf[BUFSIZ];
+
+    emit_intro();
+    while (fgets(buf,BUFSIZ,stdin)) {
+	ptr = buf;
+	before = buf;
+	printf("%s %s",comments,buf);
+	expr();
+	emit_print();
+	emit_comment();
+    }
+    emit_ending();
+    return 0;
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-compile.h	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,41 @@
+/*
+    Very Simple Compiler
+	$Id$
+ */
+
+#include <stdio.h>
+
+extern char *ptr,*last_ptr,*before;
+extern int  value,lvalue;
+extern int  last_token;
+extern int  label;
+extern char *comments;
+
+enum opcode {
+    O_SUB = 1,
+    O_ADD = 2,
+    O_MUL = 3,
+    O_DIV = 4,
+
+    O_MOD = 5,
+    O_AND = 6,
+    O_OR  = 7,
+    O_XOR = 8,
+
+    O_SUB_R = 9,
+    O_DIV_R = 10,
+} ;
+
+extern void error(char *);
+
+extern void emit_push();
+extern void emit_compare() ;
+extern void emit_store(int);
+extern void emit_push();
+extern void emit_calc(enum opcode);
+extern void emit_value(int) ;
+extern void emit_load(int);
+extern void emit_comment();
+extern void emit_intro();
+extern void emit_ending();
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-input.txt	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,20 @@
+1
+1+2			//  expr
+2*3			//  mexpr
+1+(2*3)			// term
+1-(2-3)			// association
+1-2-3			// association
+1+2*3			// expr order
+3*2-3			// expr order
+1+10*10			// token
+(2+1030/2)-2
+(255*07)+256		// logical expression
+0+(1+(2+(3+(4+(5+(6+(7+8)))))))-(0+(1+(2+(3+(4+(5+(6+(7+8))))))))
+100/10
+a=1*3
+b=2*3
+a+b
+a=(b=3*2)
+a>1
+b
+b>a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-prefix.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,152 @@
+/*
+    Very Simple Compiler (Prefix form generator)
+    Parser part
+	$Id$
+ */
+
+#include "s-compile.h"
+
+static void  expr();
+static void  aexpr();
+static void  mexpr();
+static void  term();
+
+static void
+expr()
+{
+    int assign;
+
+    emit_comment();
+    aexpr();
+    assign = lvalue;
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '>': 
+	    emit_compare();
+	    aexpr();
+	    break;
+	case '=': 
+	    if(assign>=0) {
+		expr(); 
+		emit_store(assign);
+		return;
+	    } else {
+		error("Bad assignment");
+		return;
+	    }
+	    break;
+	case ')': 
+	    return;
+	default:
+	    error("Bad expression");
+	    token();
+	}
+    }
+    last_token = EOF;
+}
+
+static void
+aexpr()
+{
+
+    emit_comment();
+    mexpr();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '-': 
+	    emit_calc(O_SUB);
+	    mexpr(); 
+	    break;
+	case '+': 
+	    emit_calc(O_ADD);
+	    mexpr(); 
+	    break;
+	default:
+	    return;
+	}
+    }
+    return;
+}
+
+static void
+mexpr()
+{
+    int d;
+
+    emit_comment();
+    term();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '*': 
+	    emit_calc(O_MUL);
+	    mexpr(); 
+	    break;
+	case '/': 
+	    emit_calc(O_DIV); 
+	    mexpr(); 
+	    break;
+	default:
+	    return;
+	}
+    }
+    return;
+}
+
+static void
+term()
+{
+    int d;
+
+    lvalue= -1;
+    emit_comment();
+    token();
+    if(last_token==EOF) {
+	error("Term expected");
+    }
+    switch(last_token) {
+    case '0':
+	d = value;
+	emit_value(d);
+	token();
+	return;
+    case 'v':
+	d = lvalue = value;
+	emit_load(d);
+	token();
+	return;
+    case '(':
+	expr();
+	if(last_token != ')') {
+	    error("Unbalanced parenthsis");
+	} 
+	token(); 
+	return;
+    default:
+	token();
+	error("Unknown term");
+	return;
+    }
+}
+
+
+int
+main() 
+{
+    int d;
+    char buf[BUFSIZ];
+
+    emit_intro();
+    while (fgets(buf,BUFSIZ,stdin)) {
+	ptr = buf;
+	before = buf;
+	printf("%s %s",comments,buf);
+	expr();
+	emit_print();
+	emit_comment();
+    }
+    emit_ending();
+    return 0;
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-token.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,67 @@
+/*
+    Very Simple Compiler (Tokenizer part)
+        $Id$
+ */
+
+#include "s-compile.h"
+
+void error(char *);
+int  token();
+
+char *ptr,*last_ptr,*before;
+int  value,lvalue;
+int  last_token;
+
+int
+token()
+{
+    int c,d;
+
+    last_ptr = ptr;  /* for error position */
+    c= *ptr;
+    if(!c) {
+        last_token = EOF;
+        return last_token;
+    }
+    ptr++;
+    if (c<=' ') {       /* comment */ 
+        while(*ptr++);
+        ptr--;
+        last_token = EOF;
+        last_ptr = ptr;
+        return last_token;
+    }
+    if('0'<=c && c<='9') {     /* Decimal */
+        d = c-'0';
+        while(c= *ptr++) {
+            if('0'<=c && c<='9') {
+                d = d*10 + (c - '0');
+            } else {
+                break;
+            }
+        }
+        c && ptr--;
+        value = d;
+        last_token = '0';
+        return last_token;
+    } else if ('a'<=c && c<='z') {    /* variable */
+        value = c-'a';                /* return variable reference */
+        last_token = 'v';
+        return last_token;
+    } else {
+        last_token = c;
+        return last_token;
+        return c;
+    }
+}
+
+void
+error(s)
+char *s;
+{
+    fprintf(stderr,"%s on %s\n",s,last_ptr);
+}
+
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-tree-compile.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,248 @@
+/*
+    Very Simple Compiler (Parser part, Tree Genertor)
+	$Id$
+ */
+
+#include "s-compile.h"
+
+static int  variable[48];
+
+typedef struct node {
+    struct node *left;
+    struct node *right;
+    int type;
+    int value;
+} node;
+
+static node *expr();
+static node *aexpr();
+static node *mexpr();
+static node *term();
+static node *new_node();
+static void print_node();
+
+static node *
+new_node(type,value,left,right) 
+int type;
+int value;
+node *left;
+node *right;
+{
+    node *d;
+    if ((left  &&  left->type =='0') &&
+        (right && right->type =='0')) {
+	switch(type) {
+	case '>':
+	    right->value = (left->value > right->value); 
+	    free(left); return right;
+	    break;
+	case '+':
+	    right->value = left->value + right->value; 
+	    free(left); return right;
+	    break;
+	case '-':
+	    right->value = left->value - right->value; 
+	    free(left); return right;
+	    break;
+	case '*':
+	    right->value = right->value * left->value;
+	    free(left); return right;
+	    break;
+	case '/':
+	    if(right->value==0) {
+		error("zero divide in compile time");
+	    } else {
+		right->value = left->value / right->value;
+	    }
+	    free(left); return right;
+	}
+    }
+    d =  (node *)malloc(sizeof(node));
+    d->type = type;
+    d->value = value;
+    d->left = left;
+    d->right = right;
+    return d;
+}
+
+static void
+free_node(d)
+node *d;
+{
+    if(d->left) {
+	free_node(d->left);
+    } 
+    if(d->right) {
+	free_node(d->right);
+    } 
+    free(d);
+}
+
+static void
+code_generate(d)
+node *d;
+{
+    int assign;
+    switch(d->type) {
+    case '0':
+	emit_value(d->value);
+	return;
+    case 'v':
+	emit_load(d->value);
+	return;
+    case '=':
+	if(!d->left || d->left->type != 'v') {
+	    error("Bad assignment");
+	    code_generate(d->right);
+	    return;
+	}
+	assign = d->left->value;
+	code_generate(d->right);
+	emit_store(assign);
+	return;
+    case '>': 
+	code_generate(d->left);
+	emit_push();
+	code_generate(d->right);
+	emit_compare(); 
+	break;
+    default:   /* calculation */
+	code_generate(d->right);
+	emit_push();
+	code_generate(d->left);
+	switch(d->type) {
+	case '+': emit_calc(O_ADD); break;
+	case '-': emit_calc(O_SUB_R); break;
+	case '/': emit_calc(O_DIV_R); break;
+	case '*': emit_calc(O_MUL); break;
+	default:
+	    error("Internal Error, unknown opecode");
+	}
+	return;
+    }
+}
+
+static node *
+expr()
+{
+    int assign;
+    node *d;
+
+    d = aexpr();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '>': 
+	    d = new_node('>',0,d,aexpr()); 
+	    break;
+	case '=': 
+	    d = new_node('=',0,d,aexpr()); 
+	    break;
+	case ')': 
+	    return d;
+	default:
+	    error("Bad expression");
+	    return d;
+	}
+    }
+    return d;
+}
+
+static node *
+aexpr()
+{
+    node *d;
+
+    d = mexpr();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '-': 
+	    d = new_node('-',0,d,mexpr());
+	    break;
+	case '+': 
+	    d = new_node('+',0,d,mexpr());
+	    break;
+	default:
+	    return d;
+	}
+    }
+    return d;
+}
+
+static node *
+mexpr()
+{
+    node *d;
+
+    d = term();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '*': 
+	    d = new_node('*',0,d,term());
+	    break;
+	case '/': 
+	    d = new_node('/',0,d,term());
+	    break;
+	default:
+	    return d;
+	}
+    }
+    return d;
+}
+
+static node * 
+term()
+{
+    node *d;
+
+    lvalue= -1;
+    token();
+    if(last_token==EOF) {
+	error("Term expected");
+    }
+    switch(last_token) {
+    case '0':
+	d = new_node('0',value,NULL,NULL);
+	token();
+	return d;
+    case 'v':
+	d = new_node('v',value,NULL,NULL);
+	token();
+	return d;
+    case '(':
+	d = expr();
+	if(last_token != ')') {
+	    error("Unbalanced parenthsis");
+	} 
+	token(); 
+	return d;
+    default:
+	token();
+	error("Unknown term");
+	return 0;
+    }
+}
+
+
+int
+main() 
+{
+    node *d;
+    char buf[BUFSIZ];
+
+    emit_intro();
+    while (fgets(buf,BUFSIZ,stdin)) {
+	ptr = buf;
+	before = buf;
+	printf("%s %s",comments,buf);
+	d = expr();
+	code_generate(d);
+	free_node(d);
+	emit_print();
+	emit_comment();
+    }
+    emit_ending();
+    return 0;
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-tree.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,192 @@
+/*
+    Very Simple Calculator (Parser Part, Tree Printer)
+	$Id$
+ */
+
+#include <stdio.h>
+
+int  variable[48];
+
+typedef struct node {
+    struct node *left;
+    struct node *right;
+    int type;
+    int value;
+} node;
+
+static node *free;
+
+static node *expr();
+static node *aexpr();
+static node *mexpr();
+static node *term();
+static node *new_node();
+static void print_node();
+
+static node *
+new_node(type,value,left,right) 
+int type;
+int value;
+node *left;
+node *right;
+{
+    node *d;
+    d =  (node *)malloc(sizeof(node));
+    d->type = type;
+    d->value = value;
+    d->left = left;
+    d->right = right;
+    return d;
+}
+
+static int tree_level = 0;
+
+static void
+print_node(d)
+node *d;
+{
+    int i;
+    for(i=0;i<tree_level;i++) { putchar(' '); }
+    switch(d->type) {
+    case '0':
+	printf("value(%d",d->value);
+	break;
+    case 'v':
+	printf("variable(%c",d->value+'a');
+	break;
+    default:
+	printf("node(%c",d->type);
+    }
+    if(d->left) {
+	tree_level++;
+	printf(",(\n"); print_node(d->left); printf(")");
+	tree_level--;
+    }
+    if(d->right) {
+	tree_level++;
+	printf(",(\n"); print_node(d->right); printf(")");
+	tree_level--;
+    }
+    printf(")");
+}
+
+static node *
+expr()
+{
+    int assign;
+    node *d;
+
+    d = aexpr();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '>': 
+	    d = new_node('>',0,d,aexpr()); 
+	    break;
+	case '=': 
+	    d = new_node('=',0,d,aexpr()); 
+	    break;
+	case ')': 
+	    return d;
+	default:
+	    error("Bad expression");
+	    return d;
+	}
+    }
+    return d;
+}
+
+static node *
+aexpr()
+{
+    node *d;
+
+    d = mexpr();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '-': 
+	    d = new_node('-',0,d,mexpr());
+	    break;
+	case '+': 
+	    d = new_node('+',0,d,mexpr());
+	    break;
+	default:
+	    return d;
+	}
+    }
+    return d;
+}
+
+static node *
+mexpr()
+{
+    node *d;
+
+    d = term();
+    while(last_token!=EOF) {
+	switch(last_token) {
+	case '*': 
+	    d = new_node('*',0,d,term());
+	    break;
+	case '/': 
+	    d = new_node('/',0,d,term());
+	    break;
+	default:
+	    return d;
+	}
+    }
+    return d;
+}
+
+static node * 
+term()
+{
+    node *d;
+
+    lvalue= -1;
+    token();
+    if(last_token==EOF) {
+	error("Term expected");
+    }
+    switch(last_token) {
+    case '0':
+	d = new_node('0',value,NULL,NULL);
+	token();
+	return d;
+    case 'v':
+	d = new_node('v',value,NULL,NULL);
+	token();
+	return d;
+    case '(':
+	d = expr();
+	if(last_token != ')') {
+	    error("Unbalanced parenthsis");
+	} 
+	token(); 
+	return d;
+    default:
+	token();
+	error("Unknown term");
+	return 0;
+    }
+}
+
+int
+main() 
+{
+    node *d;
+    char buf[BUFSIZ];
+
+    while (fgets(buf,BUFSIZ,stdin)) {
+	printf("%s\n",buf);
+	ptr = buf;
+	d = expr();
+	tree_level = 0;
+	print_node(d);
+	printf(".\n\n");
+	fflush(stdout);
+    }
+    return 0;
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s-yacc.y	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,191 @@
+/*
+    Very Simple Compiler (Parser Part)
+    Parser part
+	$Id$
+ */
+
+%{
+#include "s-compile.h"
+
+void yyerror(char *);
+
+typedef struct node {
+    struct node *left;
+    struct node *right;
+    int type;
+    int value;
+} node,*nodeptr;
+
+#define YYSTYPE nodeptr
+
+static node *new_node();
+%}
+
+%%
+
+top : expr { 
+	code_generate($1);
+	free_node($1);
+	emit_print();
+	emit_comment();
+    }
+    ;
+
+expr :  expr '>' aexpr  { $$ = new_node('>',0,$1,$3); }
+    |   expr '=' aexpr  { $$ = new_node('=',0,$1,$3); }
+    |   aexpr {$$ = $1; }
+    ;
+
+aexpr :  aexpr '+' mexpr { $$ = new_node('+',0,$1,$3); }
+    |    aexpr '-' mexpr { $$ = new_node('-',0,$1,$3); }
+    |    mexpr {$$ = $1; }
+    ;
+
+mexpr :  mexpr '*' term { $$ = new_node('*',0,$1,$3); }
+    |    mexpr '/' term { $$ = new_node('/',0,$1,$3); }
+    |    term {$$ = $1; }
+    ;
+
+term :  '0' { $$ = new_node('0',value,NULL,NULL); }
+    |   'v' { $$ = new_node('v',value,NULL,NULL); }
+    |   '(' expr ')'  {$$ = $2; }
+    ;
+
+%%
+
+static void print_node();
+int  variable[48];
+
+static node *
+new_node(type,value,left,right) 
+int type;
+int value;
+node *left;
+node *right;
+{
+    node *d;
+    if ((left  &&  left->type =='0') &&
+        (right && right->type =='0')) {
+	switch(type) {
+	case '>':
+	    right->value = (left->value > right->value); 
+	    free(left); return right;
+	    break;
+	case '+':
+	    right->value = left->value + right->value; 
+	    free(left); return right;
+	    break;
+	case '-':
+	    right->value = left->value - right->value; 
+	    free(left); return right;
+	    break;
+	case '*':
+	    right->value = right->value * left->value;
+	    free(left); return right;
+	    break;
+	case '/':
+	    if(right->value==0) {
+		error("zero divide in compile time");
+	    } else {
+		right->value = left->value / right->value;
+	    }
+	    free(left); return right;
+	}
+    }
+    d =  (node *)malloc(sizeof(node));
+    d->type = type;
+    d->value = value;
+    d->left = left;
+    d->right = right;
+    return d;
+}
+
+static void
+free_node(d)
+node *d;
+{
+    if(d->left) {
+	free_node(d->left);
+    } 
+    if(d->right) {
+	free_node(d->right);
+    } 
+    free(d);
+}
+
+static void
+code_generate(d)
+node *d;
+{
+    int assign;
+    if(!d) return; /* compiler internal error.. */
+    switch(d->type) {
+    case '0':
+	emit_value(d->value);
+	return;
+    case 'v':
+	emit_load(d->value);
+	return;
+    case '=':
+	if(!d->left || d->left->type != 'v') {
+	    error("Bad assignment");
+	    code_generate(d->right);
+	    return;
+	}
+	assign = d->left->value;
+	code_generate(d->right);
+	emit_store(assign);
+	return;
+    case '>': 
+	code_generate(d->left);
+	emit_push();
+	code_generate(d->right);
+	emit_compare(); 
+	break;
+    default:   /* calculation */
+	code_generate(d->right);
+	emit_push();
+	code_generate(d->left);
+	switch(d->type) {
+	case '+': emit_calc(O_ADD); break;
+	case '-': emit_calc(O_SUB_R); break;
+	case '/': emit_calc(O_DIV_R); break;
+	case '*': emit_calc(O_MUL); break;
+	default:
+	    error("Internal Error, unknown opecode");
+	}
+	return;
+    }
+}
+
+int
+yylex() {
+    return token();
+}
+
+int
+main() 
+{
+    nodeptr d;
+    char buf[BUFSIZ];
+
+    emit_intro();
+    while (fgets(buf,BUFSIZ,stdin)) {
+	ptr = buf;
+	before = buf;
+	printf("%s %s",comments,buf);
+	yyparse();
+    }
+    emit_ending();
+    return 0;
+}
+
+void 
+yyerror(s)
+char *s;
+{
+    error(s?s:"error");
+}
+
+
+/* end */
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test0.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,14 @@
+int variable[64];
+
+main() {
+     print(variable[20]=0x80000001);
+     print(1+variable[20]);
+    return 0;
+}
+
+print(i)
+int i;
+{
+     printf("0x%08x = %d\n",i,i);
+}
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test0.s	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,43 @@
+.text
+	.align 2,0x90
+.globl _main
+_main:
+	pushl %ebp
+	movl %esp,%ebp
+	movl $-2147483647,_variable+80
+	pushl $-2147483647
+	call _print
+	addl $4,%esp
+	movl _variable+80,%eax
+	incl %eax
+	pushl %eax
+	call _print
+	addl $4,%esp
+	xorl %eax,%eax
+	jmp L1
+	.align 2,0x90
+L1:
+	movl %ebp,%esp
+	popl %ebp
+	ret
+.cstring
+LC0:
+	.ascii "0x%08x = %d\12\0"
+.text
+	.align 2,0x90
+.globl _print
+_print:
+	pushl %ebp
+	movl %esp,%ebp
+	movl 8(%ebp),%edx
+	pushl %edx
+	movl 8(%ebp),%edx
+	pushl %edx
+	pushl $LC0
+	call _printf
+	addl $12,%esp
+L2:
+	movl %ebp,%esp
+	popl %ebp
+	ret
+.comm _variable,256
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tmp.pl	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,12 @@
+
+while(<>) {
+   s/([\200-\376])(.)/sprintf("\\%o\\%o",ord($1),ord($2))/ego;
+   s/\033\$.[^\033]*\033\(./&convert($&)/ego;
+   print;
+}
+
+sub convert {
+   $tmp = $_[0];
+   $tmp=~s/./sprintf("\\%o",ord($&))/ego;
+   return $tmp;
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/tmptmp	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,2 @@
+a=1
+(2+1030/a)-2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/token.c	Fri Nov 05 14:07:59 2004 +0900
@@ -0,0 +1,41 @@
+/*
+    Very Simple Compiler
+    Tokenizer Tester 
+	$Id$
+ */
+
+#include "s-compile.h"
+
+int
+main() 
+{
+    int d;
+    char buf[BUFSIZ];
+
+    while (fgets(buf,BUFSIZ,stdin)) {
+	ptr = buf;
+	before = buf;
+	printf("#### %s",buf);
+	do {
+	    token();
+	    switch(last_token) {
+	    case '0':
+		printf("%d\tvalue\n",value);
+		break;
+	    case 'v':
+		printf("%c\tvariable\n",value+'a');
+		break;
+	    case EOF:
+		break;
+	    default:
+		printf("%c\ttoken\n",last_token);
+		break;
+	    }
+	} while(last_token!=EOF);
+    }
+    return 0;
+}
+
+
+
+/* end */