版权所有南京大学计算机科学与技术系许畅等2022春季版 15 Dec (3) 16 VarDec (3) 17 ID:real 18 COMMA 19 DecList (3) 20 Dec (3) 21 VarDec (3) 22 ID:image 23 SEMI 24 RC 25 SEMI 26 ExtDefList (5) 27 ExtDef (5) 2 Specifier (5) 29 TYPE:int 0 FunDec (5) 3 ID:main LP 33 RP 34 CompSt (6) 35 LC 36 DefList (7) 37 Def (7) 3 Specifier (7) 39 StructSpecifier (7) 40 STRUCT 41 Tag (7) 42 ID:Complex DecList (7) 44 Dec (7) 45 VarDec (7) 46 ID:x 7 SEMI 48 StmtList(8)) 49 Stmt (8) 50 Exp (8) 51 Exp(8】 52 Exp (8) 5 ID:Y 4 DOT 55 ID:image 5 ASSIGNOP 57 Exp (8) 58 FL0AT:3.500000 59 SEMI 60 RC 2.1.7 样例(选做要求) 这节列举选做要求样例。 样例1: 输入: 1 int main() 2 3 inti=0123: 4 int i=0x3F; 51 输出: 如果你的程序需要完成要求11,该样例输入不包含任何词法或语法错误,其对应的输出 15
版权所有 南京大学计算机科学与技术系 许畅等 2022春季版 15 15 Dec (3) 16 VarDec (3) 17 ID: real 18 COMMA 19 DecList (3) 20 Dec (3) 21 VarDec (3) 22 ID: image 23 SEMI 24 RC 25 SEMI 26 ExtDefList (5) 27 ExtDef (5) 28 Specifier (5) 29 TYPE: int 30 FunDec (5) 31 ID: main 32 LP 33 RP 34 CompSt (6) 35 LC 36 DefList (7) 37 Def (7) 38 Specifier (7) 39 StructSpecifier (7) 40 STRUCT 41 Tag (7) 42 ID: Complex 43 DecList (7) 44 Dec (7) 45 VarDec (7) 46 ID: x 47 SEMI 48 StmtList (8) 49 Stmt (8) 50 Exp (8) 51 Exp (8) 52 Exp (8) 53 ID: y 54 DOT 55 ID: image 56 ASSIGNOP 57 Exp (8) 58 FLOAT: 3.500000 59 SEMI 60 RC 2.1.7 样例(选做要求) 这节列举选做要求样例。 样例1: 输入: 1 int main() 2 { 3 int i = 0123; 4 int j = 0x3F; 5 } 输出: 如果你的程序需要完成要求1.1,该样例输入不包含任何词法或语法错误,其对应的输出
版权所有南京大学计算机科学与技术系许畅等2022春季版 为: 1 Program (1) 2 ExtDefList (1) 3 ExtDef (1) 4 Specifier (1) 5 TYPE:int 6 FunDec (1) ID:main 8 LP 9 RP 10 Compst (2) 11 LC 12 DefList (3) 13 Def (3) 14 Specifier (3) 15 TYPE:int 16 DecList (3) 17 Dec (3) 18 VarDec(3)】 19 TD·1 20 ASSIGNOP 2 Exp (3) 22 INT:83 23 SEMI 24 DefList (4) 25 Def (4) 26 Specifier (4) 27 TYPE:int 28 DecList (4) 29 Dec (4) 30 VarDec(4)】 3 ID: 32 ASSIGNOP 33 Exp (4) 34 INT:63 35 SEMI 36 RC 样例2: 输入: 1 int main() 2 3 int i=09; 4 int i=0x3G; 51 输出: 如果你的程序需要完成要求1.1,该样例程序中的“09”为错误的八进制数,其会因被识 别为十进制整数“0”和“9”而引发语法错误;同样,“0x3G”为错误的十六进制数,其也 会因被识别为十进制整数“0”和标识符“x3G”而引发语法错误。因此你的程序可以输出如 下的错误提示信息: Error type B at Line 3:Missing "; Error type B at Line 4:Missing ";" 你的程序也可以直接将“09”和“0x3G”分别识别为错误的八进制数和错误的十六进制 16
版权所有 南京大学计算机科学与技术系 许畅等 2022春季版 16 为: 1 Program (1) 2 ExtDefList (1) 3 ExtDef (1) 4 Specifier (1) 5 TYPE: int 6 FunDec (1) 7 ID: main 8 LP 9 RP 10 CompSt (2) 11 LC 12 DefList (3) 13 Def (3) 14 Specifier (3) 15 TYPE: int 16 DecList (3) 17 Dec (3) 18 VarDec (3) 19 ID: i 20 ASSIGNOP 21 Exp (3) 22 INT: 83 23 SEMI 24 DefList (4) 25 Def (4) 26 Specifier (4) 27 TYPE: int 28 DecList (4) 29 Dec (4) 30 VarDec (4) 31 ID: j 32 ASSIGNOP 33 Exp (4) 34 INT: 63 35 SEMI 36 RC 样例2: 输入: 1 int main() 2 { 3 int i = 09; 4 int j = 0x3G; 5 } 输出: 如果你的程序需要完成要求1.1,该样例程序中的“09”为错误的八进制数,其会因被识 别为十进制整数“0”和“9”而引发语法错误;同样,“0x3G”为错误的十六进制数,其也 会因被识别为十进制整数“0”和标识符“x3G”而引发语法错误。因此你的程序可以输出如 下的错误提示信息: Error type B at Line 3: Missing ";". Error type B at Line 4: Missing ";". 你的程序也可以直接将“09”和“0x3G”分别识别为错误的八进制数和错误的十六进制
版权所有南京大学计算机科学与技术系许畅等2022春季版 数,此时你的程序也可以输出如下的错误提示信息: Error type A at Line 3:Illegal octal number '09'. Error type A at Line 4:Illegal hexadecimal number '0x3G'. 样例3: 输入: 1 int main() 2{ 3f1oati=1.05e-4: 4} 输出: 如果你的程序需要完成要求12,该样例程序不包含任何词法或语法错误,其对应的输出 为: 1 Program (1) 2 ExtDefList (1) 3 ExtDef (1) 4 Specifier (1) 5 TYPE:int 6 FunDec (1) 7 ID:main 8 LP 9 RP 10 Compst (2) 11 LC 12 DefList (3) 13 Def (3) 14 Specifier (3) 15 TYPE:float 16 DecList (3) 17 Dec (3) 18 VarDec(3】 19 ID:i 20 ASSIGNOP 21 Exp (3) 22 FL0AT:0.000105 23 SEMI 24 RC 样例4: 输入: 1 int main() { 3 float i=1.05e; 41 输出: 如果你的程序需要完成要求1.2,该样例程序中的“1.05e”为错误的指数形式的浮点数, 其会因被识别为浮点数“1.05”和标识符“e”而引发语法错误。因此你的程序可以输出如下 的错误提示信息: Error type B at Line 3:Syntax error. 17
版权所有 南京大学计算机科学与技术系 许畅等 2022春季版 17 数,此时你的程序也可以输出如下的错误提示信息: Error type A at Line 3: Illegal octal number '09'. Error type A at Line 4: Illegal hexadecimal number '0x3G'. 样例3: 输入: 1 int main() 2 { 3 float i = 1.05e-4; 4 } 输出: 如果你的程序需要完成要求1.2,该样例程序不包含任何词法或语法错误,其对应的输出 为: 1 Program (1) 2 ExtDefList (1) 3 ExtDef (1) 4 Specifier (1) 5 TYPE: int 6 FunDec (1) 7 ID: main 8 LP 9 RP 10 CompSt (2) 11 LC 12 DefList (3) 13 Def (3) 14 Specifier (3) 15 TYPE: float 16 DecList (3) 17 Dec (3) 18 VarDec (3) 19 ID: i 20 ASSIGNOP 21 Exp (3) 22 FLOAT: 0.000105 23 SEMI 24 RC 样例4: 输入: 1 int main() 2 { 3 float i = 1.05e; 4 } 输出: 如果你的程序需要完成要求1.2,该样例程序中的“1.05e”为错误的指数形式的浮点数, 其会因被识别为浮点数“1.05”和标识符“e”而引发语法错误。因此你的程序可以输出如下 的错误提示信息: Error type B at Line 3: Syntax error
版权所有南京大学计算机科学与技术系许畅等2022春季版 你的程序也可以直接将“1.05e”识别为错误的指数形式的浮点数,此时你的程序也可以 输出如下的错误提示信息: Error type A at Line 3:Illegal floating point number "1.05e". 样例5: 输入: 1 int main() 2 3 /line comment 9 1* 5 block comment 6 */ 7 int i 1; 8} 输出: 如果你的程序需要完成要求1.3,该样例程序不包含任何词法或语法错误,其对应的输出 为: 1 Program (1) 2 ExtDefList (1) 3 ExtDef (1) 4 Specifier(1)】 5 TYPE:int 6 FunDec (1) 7 ID:main 8 LP 9 RP 10 Compst (2) 1 LC 12 DefList (7) 1 Def (7) 14 Specifier (7) 1 TYpE:int 16 DecList (7) 17 Dec (7) 18 VarDec(7)】 19 ID:i 20 ASSIGNOP Exp (7) 22 INT:1 2 SEMI 24 RC 注意,助教检查你的程序的时候,所使用的测试用例中“∥”注释的范围与“片.*”注 释的范围不会重叠(以减少问题的复杂性),因此你的程序不需要专门处理“∥”注释的范围 与“序..*”注释的范围相重叠的情况。 样例6: 输入: 1 int main() 2 3 4 comment 18
版权所有 南京大学计算机科学与技术系 许畅等 2022春季版 18 你的程序也可以直接将“1.05e”识别为错误的指数形式的浮点数,此时你的程序也可以 输出如下的错误提示信息: Error type A at Line 3: Illegal floating point number "1.05e". 样例5: 输入: 1 int main() 2 { 3 // line comment 4 /* 5 block comment 6 */ 7 int i = 1; 8 } 输出: 如果你的程序需要完成要求1.3,该样例程序不包含任何词法或语法错误,其对应的输出 为: 1 Program (1) 2 ExtDefList (1) 3 ExtDef (1) 4 Specifier (1) 5 TYPE: int 6 FunDec (1) 7 ID: main 8 LP 9 RP 10 CompSt (2) 11 LC 12 DefList (7) 13 Def (7) 14 Specifier (7) 15 TYPE: int 16 DecList (7) 17 Dec (7) 18 VarDec (7) 19 ID: i 20 ASSIGNOP 21 Exp (7) 22 INT: 1 23 SEMI 24 RC 注意,助教检查你的程序的时候,所使用的测试用例中“//”注释的范围与“/*…*/”注 释的范围不会重叠(以减少问题的复杂性),因此你的程序不需要专门处理“//”注释的范围 与“/*…*/”注释的范围相重叠的情况。 样例6: 输入: 1 int main() 2 { 3 /* 4 comment
版权所有南京大学计算机科学与技术系许畅等2022春季版 5 / 6 nested comment 7 */ 8 */ 9 int i=1; 10} 输出: 样例输入中程序员主观上想使用嵌套的“片.*/”注释,但C-一语言不支持嵌套的 “*..*/”注释。如果你的程序需要完成要求1.3,该样例输入中第8行的“*/”会因被识别为乘 号“*”和除号“”而引发语法错误(你只需为每行报告一个语法错误),你的程序可以输出 如下的错误提示信息: Error type B at Line 8:Syntax error. 19
版权所有 南京大学计算机科学与技术系 许畅等 2022春季版 19 5 /* 6 nested comment 7 */ 8 */ 9 int i = 1; 10 } 输出: 样例输入中程序员主观上想使用嵌套的“/*…*/”注释,但C−−语言不支持嵌套的 “/*…*/”注释。如果你的程序需要完成要求1.3,该样例输入中第8行的“*/”会因被识别为乘 号“*”和除号“/”而引发语法错误(你只需为每行报告一个语法错误),你的程序可以输出 如下的错误提示信息: Error type B at Line 8: Syntax error