問 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 |
色 | 黒 | 赤 | 緑 | 黄 | 青 | 紫 | 水 | 白 | 元の色(通常白) |