annotate os9/mc09/mc.c @ 106:6566b9f47f4a

asm macro fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Sat, 29 Dec 2018 18:29:06 +0900
parents 6eef99bb4771
children c5dd5c363d43
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2 #define DEBUG error(-1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
3
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
4 /*#include "CCLIB.TXT"
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
5 */
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
6 #include <stdio.h>
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
7
100
990add11e9f8 add micro-c stuff
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
8 /* to avoid conflict with stdio.h */
990add11e9f8 add micro-c stuff
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
9 #define getline getline1
990add11e9f8 add micro-c stuff
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
10 #define index index1
990add11e9f8 add micro-c stuff
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
11
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
12 #define INT (-1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
13 #define CHAR (-2)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
14 #define UNSIGNED (-3)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
15 #define POINTER (-4)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
16 #define ARRAY (-5)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
17 #define STRUCT (-6)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
18 #define UNION (-7)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
19 #define FUNCTION (-8)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
20 #define EMPTY (-9)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
21
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
22 #define STATIC (-10)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
23 #define GOTO (-11)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
24 #define RETURN (-12)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
25 #define BREAK (-13)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
26 #define CONTINUE (-14)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
27 #define IF (-15)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
28 #define ELSE (-16)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
29 #define FOR (-17)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
30 #define DO (-18)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
31 #define WHILE (-19)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
32 #define SWITCH (-20)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
33 #define CASE (-21)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
34 #define DEFAULT (-22)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
35 #define RESERVE (-23)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
36 #define TAG (-24)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
37 #define FIELD (-25)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
38 #define IDENT (-26)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
39 #define STRING (-27)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
40 #define MACRO (-28)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
41 #define BLABEL (-29)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
42 #define FLABEL (-30)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
43 #define TYPEDEF (-31)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
44 #define SIZEOF (-32)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
45 #define TYPE (-33)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
46 #define LONG (-34)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
47 #define SHORT (-35)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
48
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
49 #define TOP 0
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
50 #define GDECL 1
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
51 #define GSDECL 2
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
52 #define GUDECL 3
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
53 #define ADECL 4
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
54 #define LDECL 5
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
55 #define LSDECL 6
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
56 #define LUDECL 7
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
57 #define STADECL 8
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
58 #define STAT 9
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
59 #define GTDECL 10
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
60 #define LTDECL 11
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
61
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
62 #define GVAR 1
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
63 #define RGVAR 2
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
64 #define CRGVAR 3
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
65 #define LVAR 4
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
66 #define RLVAR 5
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
67 #define CRLVAR 6
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
68 #define CONST 7
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
69 #define FNAME 8
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
70 #define INDIRECT 9
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
71 #define RINDIRECT 10
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
72 #define CRINDIRECT 11
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
73 #define ADDRESS 12
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
74 #define MINUS 13
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
75 #define LNOT 14
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
76 #define BNOT 15
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
77 #define INC 16
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
78 #define POSTINC 17
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
79 #define PREINC 18
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
80 #define CPOSTINC 19
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
81 #define CPREINC 20
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
82 #define DEC 21
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
83 #define CPOSTDEC 22
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
84 #define CPREDEC 23
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
85 #define MUL 24
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
86 #define UMUL 25
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
87 #define DIV 26
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
88 #define UDIV 27
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
89 #define MOD 28
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
90 #define UMOD 29
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
91 #define ADD 30
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
92 #define SUB 31
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
93 #define RSHIFT 32
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
94 #define URSHIFT 33
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
95 #define LSHIFT 34
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
96 #define ULSHIFT 35
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
97 #define GT 36
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
98 #define UGT 37
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
99 #define GE 38
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
100 #define UGE 39
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
101 #define LT 40
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
102 #define ULT 41
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
103 #define LE 42
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
104 #define ULE 43
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
105 #define EQ 44
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
106 #define NEQ 45
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
107 #define BAND 46
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
108 #define EOR 47
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
109 #define BOR 48
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
110 #define LAND 49
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
111 #define LOR 50
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
112 #define COND 51
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
113 #define ASS 52
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
114 #define CASS 53
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
115 #define ASSOP 54
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
116 #define CASSOP 55
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
117 #define COMMA 56
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
118 #define LPAR 57
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
119 #define RPAR 58
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
120 #define LBRA 59
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
121 #define RBRA 60
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
122 #define LC 61
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
123 #define RC 62
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
124 #define COLON 63
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
125 #define SM 64
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
126 #define PERIOD 65
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
127 #define ARROW 66
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
128
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
129 #define US 1
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
130 #define AS 100
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
131
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
132 #define FILERR 1
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
133 #define DCERR 2
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
134 #define STERR 3
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
135 #define EXERR 4
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
136 #define CNERR 5
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
137 #define CHERR 6
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
138 #define GSERR 7
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
139 #define LSERR 8
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
140 #define STRERR 9
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
141 #define LNERR 10
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
142 #define EOFERR 11
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
143 #define MCERR 12
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
144 #define INCERR 13
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
145 #define HPERR 14
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
146 #define TYERR 15
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
147 #define LVERR 16
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
148 #define UDERR 17
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
149 #define OPTION 18
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
150
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
151 #define GSYMS 450
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
152 #define LSYMS 50
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
153
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
154 #define HEAPSIZE 1000
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
155 #define CHEAPSIZE 3000
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
156 #define LBUFSIZE 256
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
157
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
158 #define FILES 3
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
159
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
160 int sym,ch,chsave,type,mode,gfree,lfree,mflag,lineno,glineno;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
161 int labelno,gpc,lvar,disp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
162 int symval,args,heap[HEAPSIZE];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
163 int blabel,clabel,dlabel,cslabel,ilabel,control,ac,ac2,lsrc,chk,asmf;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
164
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
165 unsigned hash;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
166
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
167 char linebuf[LBUFSIZE],cheap[CHEAPSIZE],*chptr,*chptrsave;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
168 char name[9],*cheapp,**av,/*obuf[320],*/*sptr,escape();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
169
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
170 FILE *obuf;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
171
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
172 typedef struct nametable {
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
173 char nm[9];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
174 int sc,ty,dsp; } NMTBL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
175
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
176 NMTBL ntable[GSYMS+LSYMS],*nptr,*gnptr,*decl0(),*decl1(),*lsearch(),*gsearch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
177
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
178 struct {int fd,ln;/*char fcb[320]*/FILE *fcb;} *filep,filestack[FILES];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
179
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
180 main(argc,argv)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
181 int argc;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
182 char **argv;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
183 {NMTBL *nptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
184 int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
185 char *ccout;
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
186 char *modname;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
187 if(argc==1) exit(1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
188 lsrc = chk = asmf = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
189 ccout = "c.out";
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
190 modname = "aout";
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
191 ac=argc;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
192 av=argv;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
193 for (ac2=1; (ac2 < ac) && (*av[ac2] == '-'); ++ac2)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
194 switch (*(av[ac2]+1))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
195 {case 'S': case 's':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
196 lsrc = 1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
197 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
198 case 'O': case 'o':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
199 ccout = av[ac2]+2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
200 break;
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
201 case 'M': case 'm':
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
202 modname = av[ac2]+2;
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
203 break;
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
204 case 'C': case 'c':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
205 chk = 1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
206 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
207 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
208 error(OPTION);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
209 exit(1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
210 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
211 fclose(stdout);
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
212 if (!chk) {
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
213 if ( (obuf = fopen(ccout,"w")) == NULL ) error(FILERR);
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
214 else {
105
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
215 /* we'l resize data area later */
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
216 printf("\tmod _eom,_name,_tylg,_atrv,_start,16384\n"); /* os9 module header */
104
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 101
diff changeset
217 printf("_name fcs /%s/\n\tfcb 0\n",modname);
101
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
218 }
15569aa4098e micro c continue
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 100
diff changeset
219 }
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
220 init();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
221 while(1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
222 { for (nptr = &ntable[GSYMS],i=LSYMS; i--;)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
223 (nptr++)->sc = EMPTY;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
224 mode=TOP;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
225 while(getsym()==SM);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
226 mode=GDECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
227 args=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
228 decl();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
229 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
230 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
231 error(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
232 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
233 { if(n == EOFERR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
234 if(filep!=filestack)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
235 { lineno=filep->ln;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
236 fclose(filep->fcb);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
237 fprintf(stderr,"End of inclusion.\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
238 --filep;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
239 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
240 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
241 else if(ac2!=ac)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
242 { fclose(filep->fcb);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
243 newfile();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
244 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
245 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
246 else if(mode == TOP)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
247 { fprintf(stderr,"\nCompiled %u lines.\n",glineno-1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
248 if (!chk) fprintf(stderr,
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
249 "Total internal labels : %u.\n",labelno-1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
250 fprintf(stderr,
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
251 "Total global variables : %u bytes.\n\n",gpc);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
252 printf("_%d\tRTS\n_INITIALIZE\tEQU\t_1\n",ilabel);
100
990add11e9f8 add micro-c stuff
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 99
diff changeset
253 printf("_GLOBALS\tEQU\t%u\n",gpc);
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
254 exit(0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
255 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
256 fprintf(stderr,"%5d:%s.\n",lineno,
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
257 (n==FILERR) ? "Can't open specified file" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
258 (n==DCERR) ? "Declaration syntax" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
259 (n==STERR) ? "Statement syntax" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
260 (n==EXERR) ? "Expression syntax" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
261 (n==CNERR) ? "Constant required" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
262 (n==CHERR) ? "Illegal character" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
263 (n==GSERR) ? "Too many global symbols" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
264 (n==LSERR) ? "Too many local symbols" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
265 (n==STRERR) ? "Too many strings or macros" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
266 (n==LNERR) ? "Line too long" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
267 (n==EOFERR) ? "Unexpected end of file" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
268 (n==MCERR) ? "Macro syntax" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
269 (n==INCERR) ? "Include syntax" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
270 (n==HPERR) ? "Too long expression" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
271 (n==TYERR) ? "Type mismatch" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
272 (n==LVERR) ? "Lvalue required" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
273 (n==UDERR) ? "Undeclared identifier" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
274 (n==OPTION) ? "Illegal option" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
275 "Bug of compiler");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
276 errmsg();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
277 exit(1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
278 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
279 errmsg()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
280 {char *p,*lim;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
281 if(lineno==0) return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
282 fprintf(stderr,"%s",linebuf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
283 lim=(mflag?chptrsave:chptr);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
284 for (p=linebuf; p < lim;)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
285 fprintf(stderr,(*p++ == '\t') ? "\t" : " ");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
286 fprintf (stderr,"^\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
287 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
288 checksym(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
289 int s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
290 {char *p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
291 if (sym != s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
292 { p=(s==RPAR) ? "')'": (s==RBRA) ? "']'": (s==SM) ? "';'":
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
293 (s==LPAR) ? "'('": (s==WHILE) ? "'while'":
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
294 (s==COLON) ? "':'": "Identifier";
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
295 fprintf(stderr,"%d:%s expected.\n",lineno,p);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
296 errmsg();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
297 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
298 else getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
299 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
300 init()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
301 {NMTBL *nptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
302 int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
303 for(nptr = ntable,i = GSYMS; i--;) (nptr++)->sc = EMPTY;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
304 reserve("int",INT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
305 reserve("void",INT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
306 reserve("char",CHAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
307 reserve("struct",STRUCT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
308 reserve("union",UNION);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
309 reserve("unsigned",UNSIGNED);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
310 reserve("static",STATIC);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
311 reserve("goto",GOTO);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
312 reserve("return",RETURN);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
313 reserve("break",BREAK);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
314 reserve("continue",CONTINUE);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
315 reserve("if",IF);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
316 reserve("else",ELSE);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
317 reserve("for",FOR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
318 reserve("do",DO);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
319 reserve("while",WHILE);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
320 reserve("switch",SWITCH);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
321 reserve("case",CASE);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
322 reserve("default",DEFAULT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
323 reserve("typedef",TYPEDEF);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
324 reserve("sizeof",SIZEOF);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
325 reserve("long",LONG);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
326 reserve("short",SHORT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
327 gpc=glineno=mflag=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
328 gfree=ilabel=1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
329 labelno=2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
330 cheapp=cheap;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
331 lfree=HEAPSIZE;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
332 filep=filestack;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
333 newfile();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
334 getline();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
335 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
336 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
337 newfile()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
338 { lineno=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
339 fprintf(stderr,"%s:\n",av[ac2]);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
340 if ( (filep->fcb = fopen(av[ac2++],"r")) == NULL ) error(FILERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
341 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
342 reserve(s,d)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
343 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
344 int d;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
345 {NMTBL *nptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
346 char *t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
347 hash=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
348 t=name;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
349 while(*t++ = *s) hash=7*(hash+*s++);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
350 (nptr = gsearch())->sc = RESERVE;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
351 nptr->dsp = d;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
352 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
353
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
354 decl()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
355 {NMTBL *n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
356 int t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
357 if(sym==STATIC)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
358 if(mode==LDECL)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
359 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
360 mode=STADECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
361 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
362 else error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
363 else if(sym==TYPEDEF)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
364 if(mode==GDECL)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
365 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
366 mode=GTDECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
367 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
368 else if(mode==LDECL)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
369 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
370 mode=LTDECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
371 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
372 else error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
373 if((t=typespec())==0) return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
374 if(sym==SM) return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
375 type=t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
376 n=decl0();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
377 reverse(t);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
378 if(args||sym==LC) {fdecl(n);return;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
379 def(n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
380 while(sym==COMMA)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
381 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
382 type=t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
383 n=decl0();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
384 reverse(t);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
385 if(args) error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
386 def(n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
387 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
388 if(sym!=SM) error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
389 if(mode==GTDECL) mode=GDECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
390 if(mode==STADECL||mode==LTDECL) mode=LDECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
391 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
392 typespec()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
393 {int t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
394 switch(sym)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
395 {case INT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
396 case CHAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
397 t= sym;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
398 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
399 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
400 case STRUCT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
401 case UNION:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
402 t=sdecl(sym);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
403 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
404 case UNSIGNED:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
405 t = UNSIGNED;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
406 if(getsym()==INT) getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
407 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
408 case SHORT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
409 t=CHAR;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
410 if(getsym()==INT) getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
411 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
412 case LONG:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
413 t=INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
414 if(getsym()==INT) getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
415 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
416 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
417 if(sym==IDENT)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
418 if(nptr->sc==TYPE)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
419 { t=nptr->ty;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
420 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
421 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
422 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
423 else if(nptr->sc==EMPTY && gnptr->sc==TYPE)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
424 { t=gnptr->ty;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
425 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
426 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
427 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
428 if(mode==LDECL) return 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
429 t= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
430 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
431 return t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
432 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
433 struct nametable *decl0()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
434 {NMTBL *n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
435 if(sym==MUL)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
436 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
437 n=decl0();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
438 type=list2(POINTER,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
439 return n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
440 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
441 return decl1();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
442 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
443 NMTBL *decl1()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
444 {NMTBL *n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
445 int i,t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
446 if(sym==LPAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
447 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
448 n=decl0();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
449 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
450 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
451 else if (sym == IDENT)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
452 { n=nptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
453 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
454 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
455 else error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
456 while(1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
457 if(sym==LBRA)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
458 if(getsym()==RBRA)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
459 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
460 if(mode!=ADECL) error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
461 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
462 type=list2(POINTER,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
463 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
464 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
465 { t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
466 i=cexpr(expr());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
467 checksym(RBRA);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
468 type=list3(ARRAY,t,i);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
469 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
470 else if(sym==LPAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
471 { if(mode==GDECL) {mode=ADECL;getsym();mode=GDECL;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
472 else getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
473 if(sym==RPAR) getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
474 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
475 { n->sc=FUNCTION;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
476 adecl();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
477 n->sc=EMPTY;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
478 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
479 type=list2(FUNCTION,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
480 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
481 else return n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
482 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
483 adecl()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
484 { if(mode!=GDECL) error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
485 mode=ADECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
486 args= 2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
487 while(1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
488 { if(sym!=IDENT) error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
489 nptr->ty = INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
490 nptr->sc = LVAR;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
491 nptr->dsp = (args += 2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
492 if(getsym()!=COMMA) break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
493 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
494 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
495 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
496 mode=GDECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
497 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
498 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
499 reverse(t1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
500 int t1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
501 {int t2,t3;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
502 t2=t1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
503 while(type!=t1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
504 { t3=cadr(type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
505 rplacad(type,t2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
506 t2=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
507 type=t3;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
508 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
509 type=t2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
510 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
511 size(t)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
512 int t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
513 { if(t==CHAR) return 1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
514 if(scalar(t)) return 2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
515 if(car(t)==STRUCT||car(t)==UNION)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
516 { if(cadr(t)==-1) error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
517 return(cadr(t));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
518 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
519 if(car(t)==ARRAY) return(size(cadr(t))*caddr(t));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
520 else error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
521 /*NOTREACHED*/
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
522 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
523 def(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
524 NMTBL *n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
525 {int sz,nsc,ndsp,slfree,l,t,e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
526 if(car(type)==FUNCTION)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
527 { fcheck(n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
528 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
529 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
530 if (n->sc!=EMPTY &&
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
531 (mode!=ADECL || n->sc!=LVAR || n->ty!=INT) &&
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
532 (mode!=GSDECL&&mode!=LSDECL || n->sc!=FIELD || n->dsp!=disp) &&
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
533 (mode!=GUDECL&&mode!=LUDECL || n->sc!=FIELD || n->dsp!=0) )
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
534 error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
535 sz = size(n->ty = type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
536 switch(mode)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
537 {case GDECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
538 printf("%s\tEQU\t%u\n",n->nm,gpc);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
539 case STADECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
540 nsc = GVAR;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
541 ndsp = gpc;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
542 if(sym==ASS)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
543 { t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
544 if(!scalar(t))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
545 error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
546 if(mode==STADECL) printf("\tBRA\t_%d\n",l=fwdlabel());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
547 fwddef(ilabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
548 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
549 slfree=lfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
550 e=expr1();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
551 if(car(e)==CONST)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
552 { lddim(cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
553 indexy(t==CHAR?"STB":"STD",gpc);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
554 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
555 else if(t!=CHAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
556 { if(car(e)==ADDRESS&&car(cadr(e))==GVAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
557 leaxy(cadr(cadr(e)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
558 else if(car(e)==FNAME)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
559 leaxpcr((NMTBL *)cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
560 else error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
561 stxy(gpc);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
562 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
563 else error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
564 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
565 jmp(ilabel=fwdlabel());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
566 if(mode==STADECL) fwddef(l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
567 type=t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
568 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
569 gpc +=sz;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
570 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
571 case GSDECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
572 nsc = FIELD;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
573 ndsp = disp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
574 disp += sz;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
575 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
576 case GUDECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
577 nsc = FIELD;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
578 ndsp = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
579 if (disp < sz) disp = sz;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
580 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
581 case GTDECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
582 nsc = TYPE;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
583 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
584 case ADECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
585 if(type==CHAR) ++(n->dsp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
586 else if (!scalar(type)) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
587 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
588 case LDECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
589 nsc = LVAR;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
590 ndsp = (disp -= sz);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
591 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
592 case LSDECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
593 nsc = FIELD;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
594 ndsp = disp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
595 disp += sz;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
596 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
597 case LUDECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
598 nsc = FIELD;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
599 ndsp = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
600 if (disp < sz) disp = sz;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
601 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
602 case LTDECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
603 nsc = TYPE;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
604 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
605 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
606 error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
607 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
608 n->sc = nsc;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
609 n->dsp = ndsp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
610 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
611 sdecl(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
612 int s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
613 {int smode,sdisp,type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
614 NMTBL *nptr0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
615 smode=mode;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
616 if (mode==GDECL || mode==GSDECL || mode==GUDECL || mode==GTDECL)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
617 mode=(s==STRUCT?GSDECL:GUDECL);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
618 else mode=(s==STRUCT?LSDECL:LUDECL);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
619 sdisp=disp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
620 disp=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
621 if (getsym() == IDENT)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
622 { nptr0 = nptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
623 if (getsym() == LC)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
624 { if (nptr0->sc != EMPTY) error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
625 nptr0->sc = TAG;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
626 nptr0->ty = list2(s,-1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
627 while (getsym() != RC) decl();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
628 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
629 rplacad(type = nptr0->ty,disp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
630 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
631 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
632 { if(nptr0->sc == EMPTY) nptr0=gnptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
633 if(nptr0->sc == EMPTY) error(UDERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
634 if(nptr0->sc != TAG) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
635 type = nptr0->ty;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
636 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
637 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
638 else if(sym==LC)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
639 { while(getsym() != RC) decl();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
640 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
641 type = list2(s,disp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
642 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
643 else error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
644 disp=sdisp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
645 mode=smode;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
646 return type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
647 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
648 fdecl(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
649 NMTBL *n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
650 { args=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
651 fcheck(n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
652 mode=ADECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
653 lfree= HEAPSIZE;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
654 while (sym!=LC) {decl(); getsym();}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
655 disp=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
656 mode=STAT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
657 while (typeid(getsym()) || sym==STATIC || sym==TYPEDEF)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
658 { mode=LDECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
659 decl();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
660 mode=STAT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
661 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
662 control=1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
663 printf("%s\n\tPSHS\tU\n\tLEAU\t,S\n",n->nm);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
664 if(disp) printf("\tLEAS\t%d,S\n",disp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
665 lvar= -disp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
666 while(sym!=RC) statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
667 if (control) return2();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
668 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
669 fcheck(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
670 NMTBL *n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
671 { if(mode!=GDECL||car(type)!=FUNCTION) error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
672 if(n->sc==FUNCTION) compatible(n->ty,cadr(type));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
673 else if(n->sc!=EMPTY) error(DCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
674 n->sc=FUNCTION;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
675 n->ty=cadr(type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
676 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
677 compatible(t1,t2)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
678 int t1,t2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
679 { if(integral(t1))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
680 { if(t1!=t2) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
681 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
682 else if(car(t1)!=car(t2)) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
683 else if((car(t1)==STRUCT || car(t1)==UNION) && cadr(t1)!=cadr(t2))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
684 error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
685 else if(car(t1)==POINTER || car(t1)==ARRAY ||car(t1)==FUNCTION)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
686 compatible(cadr(t1),cadr(t2));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
687 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
688 scalar(t)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
689 int t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
690 { return(integral(t)||car(t)==POINTER);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
691 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
692 integral(t)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
693 int t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
694 { return(t==INT||t==CHAR||t==UNSIGNED);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
695 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
696
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
697 statement()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
698 {int slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
699 switch(sym)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
700 {case IF:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
701 doif();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
702 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
703 case WHILE:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
704 dowhile();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
705 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
706 case DO:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
707 dodo();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
708 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
709 case FOR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
710 dofor();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
711 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
712 case SWITCH:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
713 doswitch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
714 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
715 case LC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
716 docomp();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
717 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
718 case BREAK:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
719 jmp(blabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
720 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
721 checksym(SM);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
722 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
723 case CONTINUE:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
724 jmp(clabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
725 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
726 checksym(SM);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
727 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
728 case CASE:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
729 docase();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
730 statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
731 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
732 case DEFAULT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
733 dodefault();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
734 statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
735 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
736 case RETURN:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
737 doreturn();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
738 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
739 case GOTO:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
740 dogoto();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
741 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
742 case SM:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
743 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
744 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
745 default:if(sym==IDENT&&skipspc()==':')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
746 { dolabel();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
747 statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
748 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
749 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
750 { slfree=lfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
751 gexpr(expr());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
752 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
753 checksym(SM);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
754 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
755 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
756 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
757 doif()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
758 {int l1,l2,slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
759 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
760 checksym(LPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
761 slfree=lfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
762 bexpr(expr(),0,l1=fwdlabel());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
763 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
764 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
765 statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
766 if(sym==ELSE)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
767 { if (l2 = control) jmp(l2=fwdlabel());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
768 fwddef(l1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
769 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
770 statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
771 if (l2) fwddef(l2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
772 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
773 else fwddef(l1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
774 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
775 dowhile()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
776 {int sbreak,scontinue,slfree,e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
777 sbreak=blabel;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
778 scontinue=clabel;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
779 blabel=fwdlabel();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
780 clabel=backdef();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
781 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
782 checksym(LPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
783 slfree=lfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
784 e=expr();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
785 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
786 if(sym==SM)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
787 { bexpr(e,1,clabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
788 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
789 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
790 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
791 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
792 { bexpr(e,0,blabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
793 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
794 statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
795 jmp(clabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
796 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
797 fwddef(blabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
798 clabel=scontinue;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
799 blabel=sbreak;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
800 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
801 dodo()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
802 {int sbreak,scontinue,l,slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
803 sbreak=blabel;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
804 scontinue=clabel;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
805 blabel=fwdlabel();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
806 clabel=fwdlabel();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
807 l=backdef();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
808 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
809 statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
810 fwddef(clabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
811 checksym(WHILE);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
812 checksym(LPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
813 slfree=lfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
814 bexpr(expr(),1,l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
815 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
816 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
817 checksym(SM);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
818 fwddef(blabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
819 clabel=scontinue;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
820 blabel=sbreak;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
821 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
822 dofor()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
823 {int sbreak,scontinue,l,e,slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
824 sbreak=blabel;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
825 scontinue=clabel;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
826 blabel=fwdlabel();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
827 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
828 checksym(LPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
829 slfree=lfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
830 if(sym!=SM)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
831 { gexpr(expr());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
832 checksym(SM);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
833 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
834 else getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
835 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
836 l=backdef();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
837 if(sym!=SM)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
838 { bexpr(expr(),0,blabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
839 checksym(SM);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
840 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
841 else getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
842 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
843 if(sym==RPAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
844 { clabel=l;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
845 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
846 statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
847 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
848 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
849 { clabel=fwdlabel();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
850 e=expr();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
851 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
852 statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
853 fwddef(clabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
854 gexpr(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
855 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
856 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
857 jmp(l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
858 fwddef(blabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
859 clabel=scontinue;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
860 blabel=sbreak;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
861 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
862 doswitch()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
863 {int sbreak,scase,sdefault,slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
864 sbreak=blabel;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
865 blabel=fwdlabel();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
866 sdefault=dlabel;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
867 dlabel=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
868 scase=cslabel;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
869 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
870 checksym(LPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
871 slfree=lfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
872 gexpr(expr());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
873 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
874 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
875 cslabel = control = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
876 statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
877 if(dlabel) printf("_%d\tEQU\t_%d\n",cslabel,dlabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
878 else fwddef(cslabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
879 cslabel=scase;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
880 dlabel=sdefault;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
881 fwddef(blabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
882 blabel=sbreak;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
883 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
884 docomp()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
885 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
886 while(sym!=RC) statement();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
887 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
888 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
889 docase()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
890 {int c,n,l,slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
891 c=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
892 n=2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
893 slfree=lfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
894 while(sym==CASE)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
895 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
896 c=list2(cexpr(expr()),c);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
897 n+=6;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
898 checksym(COLON);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
899 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
900 l=fwdlabel();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
901 if (control)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
902 { control=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
903 if (n>127) jmp(l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
904 else printf("\tBRA\t_%d\n",l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
905 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
906 if (cslabel) fwddef(cslabel);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
907 while(cadr(c))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
908 { cmpdimm(car(c));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
909 if((n-=6)>127) jcond(l,0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
910 else printf("\tBEQ\t_%d\n",l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
911 c=cadr(c);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
912 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
913 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
914 cmpdimm(car(c));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
915 jcond(cslabel=fwdlabel(),1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
916 fwddef(l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
917 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
918 dodefault()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
919 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
920 checksym(COLON);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
921 if (dlabel) error(STERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
922 if (!cslabel) jmp(cslabel = fwdlabel());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
923 dlabel = backdef();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
924 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
925 doreturn()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
926 {int slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
927 if(getsym()==SM)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
928 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
929 return2();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
930 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
931 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
932 slfree=lfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
933 gexpr(expr());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
934 lfree=slfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
935 checksym(SM);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
936 control=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
937 switch(lvar)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
938 {case 0:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
939 ret("");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
940 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
941 case 2:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
942 ret("X,");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
943 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
944 default:unlink();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
945 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
946 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
947 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
948 return2()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
949 { control=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
950 switch(lvar)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
951 {case 0:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
952 ret("");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
953 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
954 case 1:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
955 ret("A,");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
956 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
957 case 2:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
958 ret("D,");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
959 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
960 case 3:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
961 ret("A,X,");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
962 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
963 case 4:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
964 ret("D,X,");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
965 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
966 default:unlink();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
967 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
968 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
969 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
970 ret(reg)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
971 char *reg;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
972 { printf("\tPULS\t%sU,PC\n",reg);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
973 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
974 unlink()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
975 { printf("\tLEAS\t,U\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
976 ret("");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
977 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
978 dogoto()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
979 {NMTBL *nptr0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
980 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
981 nptr0=nptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
982 checksym(IDENT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
983 if(nptr0->sc == BLABEL || nptr0->sc == FLABEL) jmp(nptr0->dsp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
984 else if(nptr0->sc == EMPTY)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
985 { nptr0->sc = FLABEL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
986 jmp(nptr0->dsp = fwdlabel());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
987 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
988 else error(STERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
989 checksym(SM);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
990 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
991 dolabel()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
992 { if(nptr->sc == FLABEL) fwddef(nptr->dsp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
993 else if(nptr->sc != EMPTY) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
994 nptr->sc = BLABEL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
995 nptr->dsp = backdef();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
996 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
997 checksym(COLON);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
998 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
999
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1000 expr()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1001 { return(rvalue(expr0()));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1002 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1003 expr0()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1004 {int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1005 e=expr1();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1006 while(sym==COMMA) {getsym();e=list3(COMMA,e,rvalue(expr1()));}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1007 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1008 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1009 expr1()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1010 {int e1,e2,t,op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1011 e1=expr2();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1012 switch (sym)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1013 {case ASS:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1014 lcheck(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1015 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1016 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1017 e2=rvalue(expr1());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1018 if(t==CHAR) {type= INT;return(list3(CASS,e1,e2));}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1019 type=t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1020 return(list3(ASS,e1,e2));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1021 case ADD+AS: case SUB+AS: case MUL+AS: case DIV+AS: case MOD+AS:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1022 case RSHIFT+AS: case LSHIFT+AS: case BAND+AS: case EOR+AS: case BOR+AS:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1023 op = sym-AS;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1024 lcheck(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1025 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1026 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1027 e2=rvalue(expr1());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1028 if(!integral(type)) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1029 if((t==UNSIGNED||type==UNSIGNED)&&
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1030 (op==MUL||op==DIV||op==MOD||op==RSHIFT||op==LSHIFT))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1031 op=op+US;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1032 if(t==CHAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1033 { type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1034 return(list4(CASSOP,e1,e2,op));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1035 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1036 type=t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1037 if(integral(t)) return(list4(ASSOP,e1,e2,op));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1038 if((op!=ADD&&op!=SUB)||car(t)!=POINTER) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1039 e2=binop(MUL,e2,list2(CONST,size(cadr(t))),INT,UNSIGNED);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1040 type=t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1041 return list4(ASSOP,e1,e2,op);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1042 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1043 return(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1044 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1045 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1046 expr2()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1047 {int e1,e2,e3,t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1048 e1=expr3();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1049 if(sym==COND)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1050 { e1=rvalue(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1051 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1052 e2=rvalue(expr2());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1053 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1054 checksym(COLON);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1055 e3=rvalue(expr2());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1056 if(car(e1)==CONST)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1057 if(cadr(e1)) {type=t;return e2;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1058 else return e3;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1059 if(type==INT||t!=INT&&type==UNSIGNED) type=t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1060 return(list4(COND,e1,e2,e3));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1061 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1062 return(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1063 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1064 expr3()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1065 {int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1066 e=expr4();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1067 while(sym==LOR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1068 { e=rvalue(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1069 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1070 e=list3(LOR,e,rvalue(expr4()));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1071 type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1072 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1073 return(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1074 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1075 expr4()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1076 {int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1077 e=expr5();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1078 while(sym==LAND)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1079 { e=rvalue(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1080 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1081 e=list3(LAND,e,rvalue(expr5()));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1082 type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1083 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1084 return(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1085 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1086 expr5()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1087 {int e1,e2,t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1088 e1=expr6();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1089 while(sym==BOR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1090 { e1=rvalue(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1091 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1092 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1093 e2=rvalue(expr6());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1094 e1=binop(BOR,e1,e2,t,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1095 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1096 return(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1097 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1098 expr6()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1099 {int e1,e2,t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1100 e1=expr7();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1101 while(sym==EOR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1102 { e1=rvalue(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1103 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1104 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1105 e2=rvalue(expr7());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1106 e1=binop(EOR,e1,e2,t,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1107 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1108 return(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1109 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1110 expr7()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1111 {int e1,e2,t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1112 e1=expr8();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1113 while(sym==BAND)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1114 { e1=rvalue(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1115 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1116 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1117 e2=rvalue(expr8());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1118 e1=binop(BAND,e1,e2,t,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1119 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1120 return(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1121 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1122 expr8()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1123 {int e,op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1124 e=expr9();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1125 while((op=sym)==EQ||op==NEQ)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1126 { e=rvalue(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1127 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1128 e=list3(op,e,rvalue(expr9()));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1129 type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1130 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1131 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1132 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1133 expr9()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1134 {int e1,e2,t,op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1135 e1=expr10();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1136 while((op=sym)==GT||op==GE||op==LT||op==LE)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1137 { e1=rvalue(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1138 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1139 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1140 e2=rvalue(expr10());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1141 if(t==INT&&type==INT) e1=list3(op,e1,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1142 else e1=list3(op+US,e1,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1143 type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1144 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1145 return e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1146 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1147 expr10()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1148 {int e1,e2,t,op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1149 e1=expr11();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1150 while((op=sym)==RSHIFT||op==LSHIFT)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1151 { e1=rvalue(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1152 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1153 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1154 e2=rvalue(expr11());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1155 e1=binop(op,e1,e2,t,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1156 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1157 return e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1158 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1159 expr11()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1160 {int e1,e2,t,op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1161 e1=expr12();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1162 while((op=sym)==ADD||op==SUB)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1163 { e1=rvalue(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1164 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1165 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1166 e2=rvalue(expr12());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1167 e1=binop(op,e1,e2,t,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1168 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1169 return e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1170 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1171 expr12()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1172 {int e1,e2,t,op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1173 e1=expr13();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1174 while((op=sym)==MUL||op==DIV||op==MOD)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1175 { e1=rvalue(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1176 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1177 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1178 e2=rvalue(expr13());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1179 e1=binop(op,e1,e2,t,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1180 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1181 return e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1182 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1183 expr13()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1184 {int e,op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1185 switch (op = sym)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1186 {case INC: case DEC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1187 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1188 lcheck(e=expr13());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1189 if(type==CHAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1190 { type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1191 return(list2(op==INC?CPREINC:CPREDEC,e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1192 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1193 if(integral(type))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1194 return(list3(PREINC,e,op==INC?1:-1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1195 if(car(type)!=POINTER) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1196 return(list3(PREINC,e,
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1197 op==INC?size(cadr(type)):-size(cadr(type)) ));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1198 case MUL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1199 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1200 e=rvalue(expr13());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1201 return(indop(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1202 case BAND:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1203 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1204 switch(car(e=expr13()))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1205 {case INDIRECT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1206 e=cadr(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1207 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1208 case GVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1209 case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1210 e=list2(ADDRESS,e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1211 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1212 case FNAME:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1213 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1214 default:error(LVERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1215 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1216 type=list2(POINTER,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1217 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1218 case SUB:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1219 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1220 e=rvalue(expr13());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1221 if(!integral(type)) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1222 return(car(e)==CONST?list2(CONST,-cadr(e)):list2(MINUS,e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1223 case BNOT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1224 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1225 e=rvalue(expr13());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1226 if(!integral(type)) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1227 return(car(e)==CONST?list2(CONST,~cadr(e)):list2(BNOT,e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1228 case LNOT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1229 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1230 return(list2(LNOT,rvalue(expr13())));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1231 case SIZEOF:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1232 if(getsym()==LPAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1233 if(typeid(getsym()))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1234 { e=list2(CONST,size(typename()));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1235 type=INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1236 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1237 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1238 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1239 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1240 { e=expr0();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1241 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1242 expr16(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1243 if(sym==INC||sym==DEC)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1244 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1245 if(type==CHAR) type=INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1246 else if(!scalar(type))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1247 error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1248 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1249 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1250 else expr13();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1251 e=list2(CONST,size(type));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1252 type=INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1253 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1254 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1255 e=expr14();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1256 if((op=sym)==INC||op==DEC)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1257 { lcheck(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1258 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1259 if(type==CHAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1260 { type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1261 return(list2(op==INC?CPOSTINC:CPOSTDEC,e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1262 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1263 if(integral(type))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1264 return(list3(POSTINC,e,op==INC?1:-1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1265 if(car(type)!=POINTER) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1266 return (list3(POSTINC,e,
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1267 op == INC ? size(cadr(type)): -size(cadr(type)) ));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1268 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1269 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1270 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1271 expr14()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1272 {int e1,t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1273 switch(sym)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1274 {case IDENT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1275 switch(nptr->sc)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1276 {case GVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1277 e1=list2(GVAR,nptr->dsp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1278 type=nptr->ty;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1279 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1280 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1281 case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1282 e1=list2(LVAR,nptr->dsp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1283 type=nptr->ty;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1284 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1285 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1286 case FUNCTION:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1287 e1=list2(FNAME,(int)nptr);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1288 type=list2(FUNCTION,nptr->ty);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1289 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1290 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1291 case EMPTY:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1292 if(getsym()==LPAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1293 { nptr->sc = FUNCTION;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1294 nptr->ty= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1295 type= list2(FUNCTION,INT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1296 e1=expr15(list2(FNAME,(int)nptr));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1297 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1298 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1299 default:error(UDERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1300 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1301 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1302 case STRING:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1303 e1=list3(STRING,(int)sptr,symval);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1304 type=list3(ARRAY,CHAR,symval);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1305 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1306 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1307 case CONST:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1308 type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1309 e1=list2(CONST,symval);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1310 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1311 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1312 case LPAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1313 if(typeid(getsym()))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1314 { t=typename();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1315 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1316 e1=expr13();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1317 type=t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1318 return e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1319 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1320 e1=expr0();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1321 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1322 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1323 default:error(EXERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1324 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1325 return expr16(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1326 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1327 expr16(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1328 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1329 {int e2,t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1330 while(1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1331 if(sym==LBRA)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1332 { e1=rvalue(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1333 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1334 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1335 e2=rvalue(expr0());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1336 checksym(RBRA);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1337 e1=binop(ADD,e1,e2,t,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1338 e1=indop(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1339 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1340 else if(sym==LPAR) e1=expr15(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1341 else if(sym==PERIOD) e1=strop(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1342 else if(sym==ARROW) e1=strop(indop(rvalue(e1)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1343 else break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1344 if(car(e1)==FNAME) type=list2(POINTER,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1345 return e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1346 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1347 rvalue(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1348 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1349 { if(type==CHAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1350 { type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1351 switch(car(e))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1352 {case GVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1353 return(list2(CRGVAR,cadr(e)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1354 case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1355 return(list2(CRLVAR,cadr(e)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1356 case INDIRECT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1357 return(list2(CRINDIRECT,cadr(e)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1358 default:return(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1359 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1360 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1361 if(!integral(type))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1362 if(car(type)==ARRAY)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1363 { type=list2(POINTER,cadr(type));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1364 if(car(e)==INDIRECT) return cadr(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1365 return list2(ADDRESS,e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1366 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1367 else if(car(type)!=POINTER) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1368 switch(car(e))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1369 {case GVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1370 return(list2(RGVAR,cadr(e)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1371 case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1372 return(list2(RLVAR,cadr(e)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1373 case INDIRECT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1374 return(list2(RINDIRECT,cadr(e)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1375 default:return(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1376 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1377 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1378 lcheck(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1379 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1380 { if(!scalar(type)||car(e)!=GVAR&&car(e)!=LVAR&&car(e)!=INDIRECT)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1381 error(LVERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1382 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1383 indop(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1384 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1385 { if(type!=INT&&type!=UNSIGNED)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1386 if(car(type)==POINTER) type=cadr(type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1387 else error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1388 else type= CHAR;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1389 if(car(e)==ADDRESS) return(cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1390 return(list2(INDIRECT,e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1391 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1392 strop(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1393 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1394 if (sym!=IDENT||nptr->sc!=FIELD) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1395 if (integral(type)||car(type)!=STRUCT && car(type)!=UNION)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1396 e=rvalue(e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1397 type = nptr->ty;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1398 switch(car(e))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1399 {case GVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1400 case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1401 e=list2(car(e),cadr(e) + nptr->dsp);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1402 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1403 case INDIRECT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1404 if(!nptr->dsp) break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1405 e=list2(INDIRECT,list3(ADD,cadr(e),list2(CONST,nptr->dsp)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1406 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1407 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1408 e=list2(INDIRECT,list3(ADD,e,list2(CONST,nptr->dsp)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1409 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1410 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1411 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1412 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1413 binop(op,e1,e2,t1,t2)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1414 int op,e1,e2,t1,t2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1415 {int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1416 if(car(e1)==CONST&&car(e2)==CONST)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1417 { e1=cadr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1418 e2=cadr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1419 type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1420 switch(op)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1421 {case BOR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1422 e=e1|e2;break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1423 case EOR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1424 e=e1^e2;break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1425 case BAND:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1426 e=e1&e2;break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1427 case ADD:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1428 if(integral(t1))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1429 { if(integral(t2))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1430 e=e1+e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1431 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1432 { if(car(t2)!=POINTER) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1433 e=size(cadr(t2))*e1+e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1434 type=t2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1435 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1436 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1437 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1438 { if(car(t1)!=POINTER) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1439 e=e1+size(cadr(t1))*e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1440 type=t1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1441 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1442 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1443 case SUB:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1444 if(integral(t1))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1445 e=e1-e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1446 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1447 { if(car(t1)!=POINTER) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1448 e=e1-size(cadr(t1))*e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1449 type=t1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1450 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1451 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1452 case MUL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1453 e=e1*e2;break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1454 case DIV:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1455 if(!e2) error(EXERR);e=e1/e2;break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1456 case MOD:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1457 if(!e2) error(EXERR);e=e1%e2;break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1458 case RSHIFT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1459 e=e1>>e2;break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1460 case LSHIFT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1461 e=e1<<e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1462 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1463 return list2(CONST,e);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1464 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1465 if((op==ADD||op==MUL||op==BOR||op==EOR||op==BAND)&&
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1466 (car(e1)==CONST||car(e2)!=CONST&&
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1467 (car(e1)==RGVAR||car(e1)==RLVAR)))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1468 {e=e1;e1=e2;e2=e;e=t1;t1=t2;t2=e;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1469 if(op==ADD)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1470 { if(integral(t1))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1471 { if(integral(t2))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1472 { if(t1==INT) type=t2;else type=t1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1473 return(list3(ADD,e1,e2));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1474 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1475 if(car(t2)!=POINTER) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1476 e=binop(MUL,e1,list2(CONST,size(cadr(t2))),t1,INT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1477 type=t2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1478 return(list3(ADD,e,e2));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1479 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1480 if(car(t1)!=POINTER||!integral(t2)) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1481 e=binop(MUL,e2,list2(CONST,size(cadr(t1))),t2,INT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1482 type=t1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1483 if(car(e1)==ADDRESS&&car(e)==CONST)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1484 return(list2(ADDRESS,list2(car(cadr(e1)),
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1485 cadr(cadr(e1))+cadr(e))));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1486 return(list3(ADD,e1,e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1487 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1488 if(op==SUB)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1489 { if(integral(t1))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1490 { if(!integral(t2)) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1491 if(t1==INT) type=t2;else type=t1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1492 return(list3(SUB,e1,e2));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1493 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1494 if(car(t1)!=POINTER) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1495 if(integral(t2))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1496 { e=binop(MUL,e2,list2(CONST,size(cadr(t1))),t2,INT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1497 type=t1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1498 return(list3(SUB,e1,e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1499 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1500 if(car(t2)!=POINTER)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1501 error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1502 compatible(t1,t2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1503 e=list3(SUB,e1,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1504 e=binop(DIV,e,list2(CONST,size(cadr(t1))),UNSIGNED,INT);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1505 type= INT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1506 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1507 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1508 if(!integral(t1)||!integral(t2)) error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1509 if(t1==INT) type=t2;else type=t1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1510 if((op==MUL||op==DIV)&&car(e2)==CONST&&cadr(e2)==1) return e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1511 if(op==BOR||op==EOR||op==BAND) return(list3(op,e1,e2));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1512 return(list3(type==UNSIGNED?op+US:op,e1,e2));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1513 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1514 expr15(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1515 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1516 {int t,args;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1517 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1518 if(integral(t)||car(t)!=FUNCTION)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1519 error(TYERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1520 t=cadr(t);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1521 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1522 args=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1523 while(sym!=RPAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1524 { args=list2(rvalue(expr1()),args);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1525 if(sym!=COMMA) break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1526 getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1527 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1528 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1529 if(t==CHAR) type= INT;else type=t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1530 return list3(FUNCTION,e1,args);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1531 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1532 typeid(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1533 int s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1534 { return (integral(s) || s==SHORT || s==LONG || s==STRUCT || s==UNION ||
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1535 (s==IDENT && nptr->sc==TYPE));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1536 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1537 typename()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1538 {int t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1539 type=t=typespec();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1540 ndecl0();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1541 reverse(t);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1542 return type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1543 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1544 ndecl0()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1545 { if(sym==MUL)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1546 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1547 return type=list2(POINTER,ndecl0());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1548 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1549 return ndecl1();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1550 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1551 ndecl1()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1552 {int i,t;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1553 if(sym==LPAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1554 if(getsym()==RPAR) {type=list2(FUNCTION,type); getsym();}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1555 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1556 { ndecl0();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1557 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1558 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1559 while(1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1560 if(sym==LBRA)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1561 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1562 t=type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1563 i=cexpr(expr());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1564 checksym(RBRA);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1565 type=list3(ARRAY,t,i);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1566 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1567 else if(sym==LPAR)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1568 { getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1569 checksym(RPAR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1570 type=list2(FUNCTION,type);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1571 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1572 else return type;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1573 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1574
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1575 bexpr(e1,cond,l1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1576 int e1,l1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1577 char cond;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1578 {int e2,l2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1579 if (chk) return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1580 e2=cadr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1581 switch(car(e1))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1582 {case LNOT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1583 bexpr(e2,!cond,l1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1584 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1585 case GT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1586 rexpr(e1,l1,cond?"GT":"LE");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1587 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1588 case UGT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1589 rexpr(e1,l1,cond?"HI":"LS");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1590 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1591 case GE:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1592 rexpr(e1,l1,cond?"GE":"LT");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1593 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1594 case UGE:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1595 rexpr(e1,l1,cond?"HS":"LO");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1596 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1597 case LT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1598 rexpr(e1,l1,cond?"LT":"GE");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1599 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1600 case ULT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1601 rexpr(e1,l1,cond?"LO":"HS");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1602 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1603 case LE:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1604 rexpr(e1,l1,cond?"LE":"GT");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1605 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1606 case ULE:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1607 rexpr(e1,l1,cond?"LS":"HI");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1608 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1609 case EQ:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1610 rexpr(e1,l1,cond?"EQ":"NE");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1611 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1612 case NEQ:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1613 rexpr(e1,l1,cond?"NE":"EQ");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1614 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1615 case LAND:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1616 bexpr(e2,0,cond?(l2=fwdlabel()):l1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1617 bexpr(caddr(e1),cond,l1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1618 if(cond) fwddef(l2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1619 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1620 case LOR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1621 bexpr(e2,1,cond?l1:(l2=fwdlabel()));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1622 bexpr(caddr(e1),cond,l1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1623 if(!cond) fwddef(l2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1624 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1625 case CRGVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1626 ldby(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1627 jcond(l1,cond);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1628 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1629 case CRLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1630 ldbu(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1631 jcond(l1,cond);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1632 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1633 case CONST:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1634 if(cond&&e2||!cond&&!e2) jmp(l1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1635 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1636 case RGVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1637 case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1638 case CRINDIRECT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1639 gexpr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1640 jcond(l1,cond);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1641 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1642 default:gexpr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1643 subdim(0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1644 jcond(l1,cond);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1645 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1646 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1647 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1648 rexpr(e1,l1,s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1649 int e1,l1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1650 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1651 { gexpr(list3(SUB,cadr(e1),caddr(e1)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1652 printf("\tLB%s\t_%d\n",s,l1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1653 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1654 jcond(l,cond)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1655 int l;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1656 char cond;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1657 { printf("\tLB%s\t_%d\n",cond?"NE":"EQ",l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1658 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1659 jmp(l)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1660 int l;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1661 { control=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1662 printf("\tLBRA\t_%d\n",l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1663 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1664 fwdlabel()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1665 { return labelno++;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1666 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1667 fwddef(l)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1668 int l;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1669 { control=1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1670 printf("_%d\n",l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1671 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1672 backdef()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1673 { control=1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1674 printf("_%d\n",labelno);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1675 return labelno++;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1676 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1677
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1678 gexpr(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1679 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1680 {int e2,e3;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1681 if (chk) return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1682 e2 = cadr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1683 switch (car(e1))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1684 {case GVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1685 leaxy(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1686 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1687 case RGVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1688 lddy(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1689 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1690 case CRGVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1691 ldby(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1692 sex();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1693 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1694 case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1695 leaxu(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1696 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1697 case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1698 lddu(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1699 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1700 case CRLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1701 ldbu(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1702 sex();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1703 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1704 case FNAME:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1705 leaxpcr((NMTBL *)e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1706 tfrxd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1707 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1708 case CONST:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1709 if (e2) lddim(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1710 else clrd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1711 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1712 case STRING:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1713 string(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1714 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1715 case FUNCTION:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1716 function(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1717 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1718 case INDIRECT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1719 indirect(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1720 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1721 case RINDIRECT: case CRINDIRECT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1722 rindirect(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1723 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1724 case ADDRESS:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1725 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1726 tfrxd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1727 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1728 case MINUS:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1729 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1730 printf("\tNEGA\n\tNEGB\n\tSBCA\t#0\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1731 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1732 case BNOT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1733 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1734 printf("\tCOMA\n\tCOMB\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1735 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1736 case PREINC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1737 switch (car(e2))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1738 {case GVAR: case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1739 ldd(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1740 adddim(caddr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1741 std(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1742 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1743 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1744 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1745 lddx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1746 adddim(caddr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1747 stdx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1748 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1749 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1750 case POSTINC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1751 switch (car(e2))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1752 {case GVAR: case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1753 ldd(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1754 adddim(e3 = caddr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1755 std(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1756 subdim(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1757 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1758 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1759 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1760 lddx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1761 adddim(e3=caddr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1762 stdx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1763 subdim(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1764 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1765 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1766 case CPOSTINC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1767 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1768 ldbx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1769 incx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1770 sex();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1771 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1772 case CPREINC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1773 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1774 incx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1775 ldbx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1776 sex();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1777 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1778 case CPOSTDEC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1779 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1780 ldbx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1781 decx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1782 sex();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1783 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1784 case CPREDEC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1785 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1786 decx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1787 ldbx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1788 sex();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1789 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1790 case MUL: case UMUL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1791 if (car(e3=caddr(e1)) == CONST)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1792 { if (0 < (e3 = cadr(e3)) && e3 <= 10)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1793 { gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1794 switch (e3)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1795 {case 8:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1796 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1797 case 4:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1798 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1799 case 2:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1800 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1801 case 1:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1802 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1803 case 10:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1804 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1805 case 5:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1806 pushd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1807 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1808 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1809 addds();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1810 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1811 case 6:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1812 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1813 case 3:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1814 pushd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1815 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1816 addds();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1817 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1818 case 9: case 7:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1819 pushd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1820 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1821 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1822 asld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1823 if (e3 == 9) addds(); else subds();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1824 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1825 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1826 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1827 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1828 case DIV: case UDIV: case MOD: case UMOD:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1829 case LSHIFT: case ULSHIFT: case RSHIFT: case URSHIFT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1830 binexpr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1831 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1832 case ADD: case SUB: case BAND: case EOR: case BOR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1833 machinop(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1834 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1835 case COND:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1836 e2=fwdlabel();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1837 bexpr(cadr(e1),0,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1838 gexpr(caddr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1839 jmp(e3=fwdlabel());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1840 fwddef(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1841 gexpr(cadddr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1842 fwddef(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1843 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1844 case ASS: case CASS:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1845 assign(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1846 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1847 case ASSOP: case CASSOP:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1848 assop(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1849 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1850 case COMMA:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1851 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1852 gexpr(caddr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1853 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1854 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1855 bexpr(e1,1,e2=fwdlabel());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1856 clrd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1857 printf("\tBRA\t*+5\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1858 fwddef(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1859 lddim(1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1860 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1861 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1862 string(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1863 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1864 {char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1865 int i,l,lb;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1866 s=(char *)cadr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1867 lb=fwdlabel();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1868 if ((l = caddr(e1)) < 128)
105
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
1869 printf("\tLEAX\t*+5,PCR\n\tBRA\t_%d\n",lb);
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1870 else
105
6eef99bb4771 fix runtime
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 104
diff changeset
1871 printf("\tLEAX\t*+6,PCR\n\tLBRA\t_%d\n",lb);
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1872 do
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1873 { printf("\tFCB\t%d",*s++);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1874 for (i=8; --l && --i;) printf(",%d",*s++);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1875 printf("\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1876 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1877 while (l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1878 fwddef(lb);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1879 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1880 function(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1881 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1882 {int e2,e3,e4,e5,nargs;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1883 NMTBL *n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1884 e2 = cadr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1885 nargs = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1886 for (e3 = caddr(e1); e3; e3 = cadr(e3))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1887 { n=(NMTBL *)(e5=(cadr(e4 = car(e3))));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1888 switch(car(e4))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1889 {case FNAME:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1890 leaxpcr(n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1891 pushx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1892 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1893 case ADDRESS:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1894 gexpr(e5);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1895 pushx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1896 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1897 default:gexpr(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1898 pushd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1899 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1900 ++nargs;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1901 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1902 if (car(e2) == FNAME)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1903 { n=(NMTBL *)cadr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1904 printf("\tLBSR\t%s\n",n->nm);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1905 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1906 else
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1907 { gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1908 printf("\tJSR\t,X\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1909 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1910 if (nargs) printf("\tLEAS\t%d,S\n",2*nargs);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1911 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1912 indirect(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1913 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1914 {int e2,e3,e4;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1915 e3 = cadr(e2 = cadr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1916 switch(car(e2))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1917 {case RGVAR: case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1918 ldx(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1919 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1920 case ADD:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1921 if(car(e3)==ADDRESS)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1922 { gexpr(caddr(e2));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1923 gexpr(cadr(e3));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1924 opdx("LEAX");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1925 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1926 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1927 switch(car(e4 = caddr(e2)))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1928 {case RGVAR: case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1929 gexpr(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1930 ldx(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1931 opdx("LEAX");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1932 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1933 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1934 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1935 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1936 tfrdx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1937 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1938 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1939
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1940 machinop(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1941 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1942 {int e2,e3;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1943 e2 = cadr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1944 switch (car(e3 = caddr(e1)))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1945 {case RGVAR: case RLVAR: case CONST:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1946 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1947 oprt(car(e1),e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1948 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1949 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1950 gexpr(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1951 pushd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1952 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1953 tosop(car(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1954 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1955 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1956 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1957
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1958 rindirect(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1959 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1960 {char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1961 int e2,e3,e4,byte,l;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1962 op = ((byte = (car(e1) == CRINDIRECT)) ? "LDB" : "LDD");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1963 e3 = cadr(e2 = cadr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1964 switch (car(e2))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1965 {case RGVAR: case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1966 indir(op,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1967 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1968 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1969 case ADD:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1970 if(car(e3)==ADDRESS)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1971 { gexpr(caddr(e2));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1972 gexpr(cadr(e3));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1973 opdx(op);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1974 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1975 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1976 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1977 switch(car(e4=caddr(e2)))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1978 {case RGVAR: case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1979 gexpr(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1980 ldx(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1981 opdx(op);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1982 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1983 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1984 case CONST:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1985 switch (car(e3))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1986 {case RGVAR: case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1987 ldx(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1988 indexx(op,cadr(e4));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1989 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1990 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1991 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1992 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1993 gexpr(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1994 pushd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1995 gexpr(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1996 pulx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1997 opdx(op);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1998 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
1999 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2000 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2001 case PREINC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2002 if ((l = caddr(e2)) == -1 || l == -2)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2003 switch (car(e3))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2004 {case GVAR: case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2005 ldx(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2006 predecx(op,l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2007 stx(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2008 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2009 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2010 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2011 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2012 case POSTINC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2013 if ((l = caddr(e2)) == 1 || l == 2)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2014 switch (car(e3))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2015 {case GVAR: case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2016 ldx(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2017 postincx(op,l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2018 stx(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2019 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2020 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2021 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2022 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2023 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2024 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2025 tfrdx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2026 indexx(op,0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2027 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2028 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2029 assign(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2030 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2031 {char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2032 int e2,e3,e4,e5,l;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2033 op = (car(e1) == CASS ? "STB" : "STD");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2034 e3 = cadr(e2 = cadr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2035 e4 = caddr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2036 switch(car(e2))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2037 {case GVAR: case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2038 gexpr(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2039 index(op,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2040 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2041 case INDIRECT:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2042 switch(car(e3))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2043 {case RGVAR: case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2044 gexpr(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2045 indir(op,e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2046 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2047 case ADD:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2048 if (car(caddr(e3)) == CONST)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2049 switch (car(e5=cadr(e3)))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2050 {case RGVAR: case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2051 gexpr(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2052 ldx(e5);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2053 indexx(op,cadr(caddr(e3)));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2054 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2055 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2056 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2057 case PREINC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2058 if ((l = caddr(e3)) == -1 || l == -2)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2059 switch (car(e5=cadr(e3)))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2060 {case GVAR: case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2061 gexpr(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2062 ldx(e5);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2063 predecx(op,l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2064 stx(e5);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2065 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2066 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2067 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2068 case POSTINC:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2069 if ((l = caddr(e3)) == 1 || l == 2)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2070 switch (car(e5=cadr(e3)))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2071 {case GVAR: case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2072 gexpr(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2073 ldx(e5);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2074 postincx(op,l);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2075 stx(e5);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2076 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2077 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2078 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2079 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2080 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2081 switch (car(e4))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2082 {case RGVAR: case CRGVAR: case RLVAR: case CRLVAR: case CONST:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2083 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2084 gexpr(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2085 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2086 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2087 gexpr(e4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2088 pushd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2089 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2090 pulld();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2091 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2092 indexx(op,0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2093 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2094 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2095 assop(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2096 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2097 {int e2,e3,byte,op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2098 char *ldop,*stop;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2099 ldop = ((byte = (car(e1) == CASSOP)) ? "LDB" : "LDD");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2100 stop = (byte ? "STB" : "STD");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2101 e2 = cadr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2102 e3 = caddr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2103 op = cadddr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2104 switch (car(e2))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2105 {case GVAR: case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2106 switch (car(e3))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2107 {case RGVAR: case RLVAR: case CONST:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2108 if (simpop(op))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2109 { index(ldop,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2110 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2111 oprt(op,e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2112 index(stop,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2113 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2114 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2115 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2116 gexpr(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2117 pushd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2118 index(ldop,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2119 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2120 tosop(op);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2121 index(stop,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2122 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2123 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2124 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2125 switch (car(e3))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2126 {case RGVAR: case RLVAR: case CONST:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2127 if (simpop(op))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2128 { gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2129 indexx(ldop,0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2130 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2131 oprt(op,e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2132 indexx(stop,0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2133 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2134 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2135 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2136 gexpr(e3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2137 pushd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2138 gexpr(e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2139 indexx(ldop,0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2140 sextend(byte);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2141 tosop(op);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2142 indexx(stop,0);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2143 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2144 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2145 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2146 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2147 simpop(op)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2148 int op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2149 { return (op == ADD || op == SUB ||
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2150 op == BAND || op == EOR || op == BOR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2151 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2152 oprt(op,e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2153 int op,e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2154 {int e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2155 e2 = cadr(e1);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2156 switch (car(e1))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2157 {case RGVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2158 oprt1(op,"Y",e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2159 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2160 case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2161 oprt1(op,"U",e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2162 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2163 case CONST:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2164 oprtc(op,e2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2165 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2166 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2167 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2168 oprt1(op,index,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2169 int op,n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2170 char *index;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2171 { switch (op)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2172 {case ADD:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2173 printf("\tADDD\t%d,%s\n",n,index);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2174 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2175 case SUB:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2176 printf("\tSUBD\t%d,%s\n",n,index);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2177 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2178 case BAND: case EOR: case BOR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2179 dualop(op,index,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2180 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2181 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2182 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2183 dualop(op,index,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2184 int op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2185 char *index;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2186 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2187 {char *ops;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2188 ops = ((op == BAND) ? "AND" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2189 (op == EOR) ? "EOR" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2190 (op == BOR) ? "OR" : (char *)DEBUG);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2191 printf("\t%sA\t%d,%s\n\t%sB\t%d+1,%s\n",ops,n,index,ops,n,index);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2192 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2193
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2194 oprtc(op,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2195 int op,n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2196 { switch (op)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2197 {case ADD:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2198 adddim(n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2199 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2200 case SUB:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2201 subdim(n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2202 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2203 case BAND: case EOR: case BOR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2204 dualc(op,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2205 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2206 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2207 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2208 dualc(op,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2209 int op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2210 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2211 {char *ops;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2212 ops = ((op == BAND) ? "AND" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2213 (op == EOR) ? "EOR" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2214 (op == BOR) ? "OR" : (char *)DEBUG);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2215 printf("\t%sA\t#%d\n\t%sB\t#%d\n",ops,(n >> 8) & 0xff,ops,n & 0xff);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2216 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2217 tosop(op)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2218 int op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2219 { switch (op)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2220 {case ADD:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2221 addds();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2222 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2223 case SUB:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2224 subds();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2225 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2226 case BAND: case EOR: case BOR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2227 dualtosop(op);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2228 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2229 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2230 pulx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2231 library(op);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2232 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2233 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2234 dualtosop(op)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2235 int op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2236 {char *ops;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2237 ops = ((op == BAND) ? "AND" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2238 (op == EOR) ? "EOR" :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2239 (op == BOR) ? "OR" : (char *)DEBUG);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2240 printf("\t%sA\t,S+\n\t%sB\t,S+\n",ops,ops);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2241 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2242 pushd()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2243 { printf("\tPSHS\tD\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2244 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2245 pushx()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2246 { printf("\tPSHS\tX\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2247 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2248 pulld()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2249 { printf("\tPULS\tD\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2250 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2251 pulx()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2252 { printf("\tPULS\tX\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2253 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2254 tfrdx()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2255 { printf("\tTFR\tD,X\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2256 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2257 tfrxd()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2258 { printf("\tTFR\tX,D\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2259 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2260 /*
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2261 exgdx()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2262 { printf("\tEXG\tD,X\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2263 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2264 */
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2265 asld()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2266 { printf("\tASLB\n\tROLA\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2267 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2268 adddim(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2269 { printf("\tADDD\t#%d\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2270 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2271 subdim(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2272 { printf("\tSUBD\t#%d\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2273 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2274 cmpdimm(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2275 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2276 { printf("\tCMPD\t#%d\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2277 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2278 addds()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2279 { printf("\tADDD\t,S++\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2280 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2281 subds()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2282 { printf("\tSUBD\t,S++\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2283 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2284 clrd()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2285 { printf("\tCLRA\n\tCLRB\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2286 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2287 lddim(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2288 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2289 { printf("\tLDD\t#%d\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2290 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2291
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2292 ldd(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2293 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2294 { switch (car(e))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2295 {case GVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2296 lddy(cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2297 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2298 case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2299 lddu(cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2300 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2301 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2302 DEBUG;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2303 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2304 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2305
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2306 lddx()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2307 { printf("\tLDD\t,X\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2308 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2309 lddy(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2310 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2311 { printf("\tLDD\t%d,Y\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2312 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2313 lddu(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2314 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2315 { printf("\tLDD\t%d,U\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2316 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2317
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2318 std(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2319 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2320 { switch (car(e))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2321 {case GVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2322 stdy(cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2323 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2324 case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2325 stdu(cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2326 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2327 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2328 DEBUG;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2329 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2330 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2331 stdx()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2332 { printf("\tSTD\t,X\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2333 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2334 stdy(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2335 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2336 { printf("\tSTD\t%d,Y\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2337 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2338 stdu(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2339 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2340 { printf("\tSTD\t%d,U\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2341 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2342
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2343 ldbx()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2344 { printf("\tLDB\t,X\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2345 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2346 /*
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2347 stbx()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2348 { printf("\tSTB\t,X\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2349 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2350 */
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2351 ldby(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2352 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2353 { printf("\tLDB\t%d,Y\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2354 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2355 ldbu(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2356 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2357 { printf("\tLDB\t%d,U\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2358 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2359 predecx(op,l)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2360 char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2361 int l;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2362 { printf("\t%s\t,%sX\n",op,(l == -1 ? "-" : "--"));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2363 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2364 postincx(op,l)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2365 char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2366 int l;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2367 { printf("\t%s\t,X%s\n",op,(l == 1 ? "+" : "++"));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2368 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2369 leaxy(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2370 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2371 { printf("\tLEAX\t%d,Y\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2372 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2373 leaxu(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2374 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2375 { printf("\tLEAX\t%d,U\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2376 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2377 leaxpcr(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2378 NMTBL *n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2379 { printf("\tLEAX\t%s,PCR\n",n->nm);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2380 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2381
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2382 ldx(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2383 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2384 { switch (car(e))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2385 {case GVAR: case RGVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2386 ldxy(cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2387 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2388 case LVAR: case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2389 ldxu(cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2390 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2391 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2392 DEBUG;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2393 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2394 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2395
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2396 ldxy(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2397 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2398 { printf("\tLDX\t%d,Y\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2399 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2400 ldxu(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2401 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2402 { printf("\tLDX\t%d,U\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2403 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2404 /*
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2405 ldxi(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2406 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2407 { printf("\tLDX\t#%d\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2408 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2409 */
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2410 stx(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2411 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2412 { switch (car(e))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2413 {case GVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2414 stxy(cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2415 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2416 case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2417 stxu(cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2418 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2419 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2420 DEBUG;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2421 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2422 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2423
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2424 stxy(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2425 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2426 { printf("\tSTX\t%d,Y\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2427 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2428 stxu(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2429 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2430 { printf("\tSTX\t%d,U\n",n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2431 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2432
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2433 sex()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2434 { printf("\tSEX\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2435 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2436 incx()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2437 { printf("\tINC\t,X\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2438 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2439 decx()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2440 { printf("\tDEC\t,X\n");
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2441 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2442 opdx(op)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2443 char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2444 { printf("\t%s\tD,X\n",op);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2445 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2446 indexx(op,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2447 char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2448 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2449 { printf("\t%s\t%d,X\n",op,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2450 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2451
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2452 index(op,e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2453 char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2454 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2455 { switch (car(e))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2456 {case GVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2457 indexy(op,cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2458 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2459 case LVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2460 indexu(op,cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2461 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2462 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2463 DEBUG;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2464 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2465 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2466
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2467 indexy(op,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2468 char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2469 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2470 { printf("\t%s\t%d,Y\n",op,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2471 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2472 indexu(op,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2473 char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2474 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2475 { printf("\t%s\t%d,U\n",op,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2476 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2477
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2478
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2479 indir(op,e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2480 char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2481 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2482 { switch (car(e))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2483 {case RGVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2484 indiry(op,cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2485 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2486 case RLVAR:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2487 indiru(op,cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2488 return;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2489 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2490 DEBUG;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2491 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2492 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2493
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2494 indiry(op,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2495 char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2496 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2497 { printf("\t%s\t[%d,Y]\n",op,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2498 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2499 indiru(op,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2500 char *op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2501 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2502 { printf("\t%s\t[%d,U]\n",op,n);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2503 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2504 sextend(byte)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2505 int byte;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2506 { if (byte) sex();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2507 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2508 binexpr(e1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2509 int e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2510 { gexpr(caddr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2511 pushd();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2512 gexpr(cadr(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2513 pulx();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2514 library(car(e1));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2515 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2516 library(op)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2517 int op;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2518 { printf("\tLBSR\t_0000%d\n",
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2519 ((op == MUL || op == UMUL) ? 1 :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2520 (op == DIV) ? 2 :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2521 (op == UDIV) ? 3 :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2522 (op == MOD) ? 4 :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2523 (op == UMOD) ? 5 :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2524 (op == LSHIFT) ? 6 :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2525 (op == ULSHIFT) ? 7 :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2526 (op == RSHIFT) ? 8 :
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2527 (op == URSHIFT) ? 9 : DEBUG));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2528 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2529 cexpr(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2530 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2531 { if (car(e) != CONST) error(CNERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2532 return (cadr(e));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2533 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2534
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2535 getsym()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2536 {NMTBL *nptr0,*nptr1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2537 int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2538 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2539 if (alpha(skipspc()))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2540 { i = hash = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2541 while (alpha(ch) || digit(ch))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2542 { if (i <= 7) hash=7*(hash+(name[i++]=ch));
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2543 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2544 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2545 name[i] = '\0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2546 nptr0 = gsearch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2547 if (nptr0->sc == RESERVE) return sym = nptr0->dsp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2548 if (nptr0->sc == MACRO && !mflag)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2549 { mflag++;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2550 chsave = ch;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2551 chptrsave = chptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2552 chptr = (char *)nptr0->dsp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2553 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2554 return getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2555 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2556 sym = IDENT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2557 gnptr=nptr=nptr0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2558 if (mode==GDECL || mode==GSDECL || mode==GUDECL ||
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2559 mode==GTDECL || mode==TOP)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2560 return sym;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2561 nptr1=lsearch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2562 if (mode==STAT)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2563 if (nptr1->sc == EMPTY) return sym;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2564 else { nptr=nptr1; return sym;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2565 nptr=nptr1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2566 return sym;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2567 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2568 else if (digit(ch))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2569 { symval=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2570 if (ch == '0')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2571 { if (getch() == 'x' || ch == 'X')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2572 while(1)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2573 if(digit(getch()))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2574 symval=symval*16+ch-'0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2575 else if('a'<=ch&&ch<='f')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2576 symval=symval*16+ch-'a'+10;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2577 else if('A'<=ch&&ch<='F')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2578 symval=symval*16+ch-'A'+10;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2579 else break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2580 else while (digit(ch)) {symval=symval*8+ch-'0';getch();}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2581 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2582 else while(digit(ch)) {symval=symval*10+ch-'0';getch();}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2583 return sym=CONST;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2584 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2585 else if(ch=='\'')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2586 { getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2587 symval=escape();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2588 if(ch!='\'') error(CHERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2589 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2590 return sym=CONST;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2591 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2592 else if(ch=='"')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2593 { getstring();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2594 return sym= STRING;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2595 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2596 c=ch;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2597 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2598 switch(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2599 {case '*':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2600 return postequ(MUL,MUL+AS);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2601 case '&':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2602 if(ch=='&') {getch();return sym=LAND;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2603 return postequ(BAND,BAND+AS);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2604 case '-':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2605 if(ch=='>') {getch();return sym=ARROW;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2606 if(ch=='-') {getch();return sym=DEC;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2607 return postequ(SUB,SUB+AS);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2608 case '!':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2609 return postequ(LNOT,NEQ);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2610 case '~':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2611 return sym=BNOT;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2612 case '+':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2613 if(ch=='+') {getch();return sym=INC;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2614 return postequ(ADD,ADD+AS);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2615 case '%':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2616 return postequ(MOD,MOD+AS);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2617 case '^':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2618 return postequ(EOR,EOR+AS);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2619 case '|':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2620 if(ch=='|') {getch();return sym=LOR;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2621 return postequ(BOR,BOR+AS);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2622 case '=':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2623 return postequ(ASS,EQ);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2624 case '>':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2625 if(ch=='>') {getch();return postequ(RSHIFT,RSHIFT+AS);}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2626 return postequ(GT,GE);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2627 case '<':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2628 if(ch=='<') {getch();return postequ(LSHIFT,LSHIFT+AS);}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2629 return postequ(LT,LE);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2630 case '(':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2631 return sym=LPAR;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2632 case ')':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2633 return sym=RPAR;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2634 case '[':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2635 return sym=LBRA;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2636 case ']':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2637 return sym=RBRA;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2638 case '{':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2639 return sym=LC;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2640 case '}':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2641 return sym=RC;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2642 case ',':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2643 return sym=COMMA;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2644 case ';':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2645 return sym=SM;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2646 case ':':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2647 return sym=COLON;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2648 case '?':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2649 return sym=COND;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2650 case '.':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2651 return sym=PERIOD;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2652 case '/':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2653 if(ch!='*') return postequ(DIV,DIV+AS);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2654 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2655 while(ch=='*'?getch()!='/':getch());
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2656 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2657 return getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2658 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2659 error(CHERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2660 return getsym();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2661 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2662 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2663 postequ(s1,s2)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2664 int s1,s2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2665 { if(ch=='=') {getch();return sym=s2;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2666 return sym=s1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2667 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2668 alpha(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2669 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2670 { return('a'<=c&&c<='z'||'A'<=c&&c<='Z'||c=='_');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2671 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2672 digit(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2673 char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2674 { return('0'<=c&&c<='9');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2675 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2676 NMTBL *gsearch()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2677 {NMTBL *nptr,*iptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2678 iptr=nptr= &ntable[hash % GSYMS];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2679 while(nptr->sc!=EMPTY && neqname(nptr->nm))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2680 { if (++nptr== &ntable[GSYMS]) nptr=ntable;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2681 if (nptr==iptr) error(GSERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2682 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2683 if (nptr->sc == EMPTY) copy(nptr->nm);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2684 return nptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2685 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2686 NMTBL *lsearch()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2687 {NMTBL *nptr,*iptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2688 iptr=nptr= &ntable[hash%LSYMS+GSYMS];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2689 while(nptr->sc!=EMPTY && neqname(nptr->nm))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2690 { if (++nptr== &ntable[LSYMS+GSYMS]) nptr= &ntable[GSYMS];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2691 if (nptr==iptr) error(LSERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2692 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2693 if (nptr->sc == EMPTY) copy(nptr->nm);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2694 return nptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2695 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2696 neqname(p)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2697 char *p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2698 {char *q;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2699 q=name;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2700 while(*p) if(*p++ != *q++) return 1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2701 return *q!=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2702 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2703 copy(p)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2704 char *p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2705 {char *q;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2706 q=name;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2707 while(*p++= *q++);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2708 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2709 getstring()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2710 { getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2711 symval = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2712 sptr = cheapp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2713 while (ch != '"')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2714 { *cheapp++ = escape();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2715 symval++;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2716 if (cheapp >= cheap+CHEAPSIZE) error(STRERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2717 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2718 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2719 *cheapp++ = '\0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2720 symval++;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2721 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2722 skipspc()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2723 { while(ch=='\t'||ch=='\n'||ch==' '||ch=='\r') getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2724 return ch;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2725 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2726 getch()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2727 { if(*chptr) return ch= *chptr++;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2728 if(mflag) {mflag=0;chptr=chptrsave;return ch=chsave;}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2729 getline();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2730 return getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2731 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2732 char escape()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2733 {char c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2734 if ((c=ch) == '\\')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2735 { if (digit(c=getch()))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2736 { c = ch-'0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2737 if (digit(getch()))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2738 { c = c*8+ch-'0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2739 if (digit(getch())) {c=c*8+ch-'0';getch();}
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2740 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2741 return c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2742 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2743 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2744 switch(c)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2745 {case 'n':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2746 return '\n';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2747 case 't':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2748 return '\t';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2749 case 'b':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2750 return '\b';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2751 case 'r':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2752 return '\r';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2753 case 'f':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2754 return '\f';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2755 case '\n':
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2756 return escape();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2757 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2758 return c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2759 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2760 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2761 if (c == '\n') error(EXERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2762 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2763 return c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2764 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2765 FILE *getfname()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2766 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2767 char name[LBUFSIZE];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2768 getch();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2769 if(skipspc()!='"') error(INCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2770 for(i=0;(getch()!='"' && ch!='\n');)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2771 if(i<LBUFSIZE-1) name[i++]=ch;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2772 if(ch=='\n') error(INCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2773 name[i]=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2774 return ( (filep+1)->fcb = fopen(name,"r") );
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2775 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2776 getline()
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2777 {int i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2778 int c;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2779 lineno++;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2780 glineno++;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2781 chptr=linebuf;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2782 i=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2783 while ((*chptr++ = c = getc(filep->fcb)) != '\n')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2784 { if (++i > LBUFSIZE-2) error(LNERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2785 if (c==EOF)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2786 { error(EOFERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2787 --chptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2788 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2789 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2790 *chptr = '\0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2791 if (lsrc && !asmf) printf("* %s",linebuf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2792 if (*(chptr = linebuf) == '#')
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2793 { ++chptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2794 if (macroeq("define"))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2795 { i=mode;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2796 mode=GDECL;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2797 ch= *chptr;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2798 if (getsym() == IDENT)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2799 { if (nptr->sc == EMPTY)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2800 { nptr->sc = MACRO;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2801 nptr->dsp = (int)cheapp;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2802 while ((*cheapp++ = c = *chptr++)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2803 && c != '\n');
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2804 *cheapp++ = '\0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2805 if (cheapp >= cheap+CHEAPSIZE)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2806 error(STRERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2807 if (!c) error(EOFERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2808 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2809 else error(MCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2810 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2811 else error(MCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2812 mode=i;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2813 *(chptr = linebuf) = '\0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2814 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2815 else if (macroeq("include"))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2816 { fprintf(stderr,"%s",linebuf);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2817 if(filep+1 >= filestack + FILES) error(FILERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2818 if ( ((filep+1)->fcb=getfname()) == NULL) error(FILERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2819 (filep+1)->ln=lineno;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2820 lineno=0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2821 ++filep;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2822 *(chptr = linebuf) = '\0';
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2823 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2824 else if (macroeq("asm"))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2825 { if (asmf) error(MCERR);
106
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
2826 asmf = 2; lineno--; glineno--;
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
2827 chptr = ";;";
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2828 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2829 else if (macroeq("endasm"))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2830 { if (!asmf) error(MCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2831 asmf = 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2832 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2833 else if (macroeq(" "))
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2834 getline();
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2835 else error(MCERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2836 }
106
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
2837 if (asmf==2) asmf=1; /* return ";" to get correct macro alignment */
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
2838 else if (asmf==1) {
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
2839 while (asmf)
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
2840 { printf("%s",linebuf);
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
2841 getline();
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
2842 }
6566b9f47f4a asm macro fix
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents: 105
diff changeset
2843 }
99
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2844 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2845
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2846 macroeq(s)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2847 char *s;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2848 {char *p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2849 for (p = chptr; *s;) if (*s++ != *p++) return 0;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2850 chptr = p;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2851 return 1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2852 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2853
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2854 car(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2855 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2856 { return heap[e];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2857 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2858 cadr(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2859 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2860 { return heap[e+1];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2861 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2862 caddr(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2863 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2864 { return heap[e+2];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2865 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2866 cadddr(e)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2867 int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2868 { return heap[e+3];
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2869 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2870 list2(e1,e2)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2871 int e1,e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2872 {int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2873 e=getfree(2);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2874 heap[e]=e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2875 heap[e+1]=e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2876 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2877 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2878 list3(e1,e2,e3)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2879 int e1,e2,e3;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2880 {int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2881 e=getfree(3);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2882 heap[e]=e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2883 heap[e+1]=e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2884 heap[e+2]=e3;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2885 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2886 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2887 list4(e1,e2,e3,e4)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2888 int e1,e2,e3,e4;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2889 {int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2890 e=getfree(4);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2891 heap[e]=e1;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2892 heap[e+1]=e2;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2893 heap[e+2]=e3;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2894 heap[e+3]=e4;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2895 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2896 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2897 getfree(n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2898 int n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2899 {int e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2900 switch (mode)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2901 {case GDECL: case GSDECL: case GUDECL: case GTDECL:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2902 e=gfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2903 gfree+=n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2904 break;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2905 default:
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2906 lfree-=n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2907 e=lfree;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2908 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2909 if(lfree<gfree) error(HPERR);
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2910 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2911 }
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2912 rplacad(e,n)
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2913 int e,n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2914 { heap[e+1]=n;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2915 return e;
92ed427b7f7d add micro-c by mohta
Shinji KONO <kono@ie.u-ryukyu.ac.jp>
parents:
diff changeset
2916 }