質問編集履歴
2
誤字の修正
title
CHANGED
File without changes
|
body
CHANGED
@@ -30,8 +30,6 @@
|
|
30
30
|
digit [0-9]
|
31
31
|
white [\n\t ]
|
32
32
|
%%
|
33
|
-
dowhile { return DOWHILE; }
|
34
|
-
while { return WHILE; }
|
35
33
|
if { return IF; }
|
36
34
|
read { return READ; }
|
37
35
|
print { return PRINT; }
|
@@ -58,8 +56,6 @@
|
|
58
56
|
stat : var '=' expr ';' { $$ = node(T_ASSIGN, $1, $3); }
|
59
57
|
| READ var ';' { $$ = node(T_READ, $2, 0); }
|
60
58
|
|PRINT expr ';' { $$ = node(T_PRINT, $2, 0); }
|
61
|
-
|WHILE '(' log ')' stat { $$ = node(T_WHILE, $3, $5); }
|
62
|
-
|DOWHILE '(' log ')' stat { $$ = node(T_DOWHILE, $3, $5); }
|
63
59
|
|IF '(' log ')' stat { $$ = node(T_IF, $3, $5); }
|
64
60
|
| '{' stlist '}' { $$ = $2; }
|
65
61
|
;
|
@@ -114,11 +110,9 @@
|
|
114
110
|
#define T_REM 9
|
115
111
|
#define T_NUM 10
|
116
112
|
#define T_VAR 11
|
117
|
-
#define T_WHILE 12
|
118
113
|
#define T_IF 13
|
119
114
|
#define T_LT 14
|
120
115
|
#define T_GT 15
|
121
|
-
#define T_DOWHILE 16
|
122
116
|
#define T_AND 17 /*ANDを追加*/
|
123
117
|
|
124
118
|
int lookup(char*);
|
@@ -282,24 +276,9 @@
|
|
282
276
|
emittree(ntab[i].right);
|
283
277
|
printf(".L%d:\n", l);
|
284
278
|
break;
|
285
|
-
case T_WHILE: l = labelno; labelno+=2;
|
286
|
-
printf(".L%d:\n", l);
|
287
|
-
emittree(ntab[i].left);
|
288
|
-
printf(".L%d\n", l+1);
|
289
|
-
emittree(ntab[i].right);
|
290
|
-
printf(" jmp .L%d\n", l);
|
291
|
-
printf(".L%d:\n", l+1);
|
292
|
-
break;
|
293
|
-
case T_DOWHILE:l = labelno; labelno+=2;
|
294
|
-
printf(".L%d:\n", l);
|
295
|
-
emittree(ntab[i].right);
|
296
|
-
emittree(ntab[i].left);
|
297
|
-
printf(".L%d\n", l+1);
|
298
|
-
printf(" jmp .L%d\n", l);
|
299
|
-
printf(".L%d:\n", l+1);
|
300
|
-
break;
|
301
279
|
|
302
280
|
|
281
|
+
|
303
282
|
default: printf("NotImplemented: %d\n", ntab[i].type);
|
304
283
|
break;
|
305
284
|
|
1
タグの追加
title
CHANGED
@@ -1,1 +1,1 @@
|
|
1
|
-
自作コンパイラの論理積の実現
|
1
|
+
自作コンパイラの論理積の実現で構文エラーが出る
|
body
CHANGED
File without changes
|