問 1(再帰的下向き構文解析)次の文法:(略)に対する再帰的下向き構文解析プログラムを参考にして、次の文法(記号の名前が英語になっただけで、 本質的には教科書・演習問題 5.2の文法と同じです):
(略)
Args -> Expr ArgRest(訂正)
| ε(空列)
ArgRest -> ',' Expr ArgRest
| ε(空列)
-- 以下は終端記号: 字句解析部で処理
EOL -> '\n'
CON -> '0' | '1' | ... | '9' -- 一桁の数のみ
FID -> '+' | '-' | '*'
VID -> 'a' | 'b' | ... | 'z' (追加)
に対する再帰的下向き構文解析プログラムを作成せよ。
|
| 誤 | 正 |
| #define EOL 258 | #define VID 258 #define EOL 259 |
if (isalpha(c)) {
yylval = c;
return VID;
} |
| 誤 |
printf("%c is expected here.\n", t); |
| 正 |
if (t < 256) {
printf("%c is expected here.\n", t);
} else {
printf("token %d is expected here.\n", t);
} |
| 誤 |
printf("Correct!\n");
|
| 正 |
if (token==EOL) {
printf("Correct!\n");
} |
| 誤 |
printf("Unexpected token: %d(%c)\n", token, token);
|
| 正 |
printf("Unexpected token: %d", token);
if (token < 256) {
printf (" \'%c\'", token);
}
printf ("\n"); |
| * | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 0 |
| 色 | 黒 | 赤 | 緑 | 黄 | 青 | 紫 | 水 | 白 | 元の色(通常白) |