-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathinput.txt
More file actions
286 lines (218 loc) · 5.42 KB
/
input.txt
File metadata and controls
286 lines (218 loc) · 5.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
// ============================================================
// 词法分析器综合测试文件
// 覆盖所有词法单元和边界情况
// ============================================================
begin
// ===== 第一部分: 标识符测试 =====
// 1.1 合法标识符
int abc;
int _abc; // 下划线开头
int __init__; // 双下划线
int a1b2c3; // 字母数字混合
int _123; // 下划线+数字
int intValue; // 关键字作为前缀,合法
int returnCode; // 关键字作为前缀,合法
int UPPER_CASE; // 大写
int camelCase; // 驼峰命名
// 1.2 非法标识符 (应该报错)
1abc; // 数字开头 - 非法
2_var; // 数字开头 - 非法
123abc; // 数字开头 - 非法
// 1.3 非法字符 (应该报错)
int a$b; // 包含$符号 - 非法字符
int x@y; // 包含@符号 - 非法字符
// ===== 第二部分: 整数测试 =====
// 2.1 十进制整数
123;
0;
999999;
2147483647; // int最大值
// 2.2 十六进制整数
0x1F;
0X1f;
0xABCDEF;
0x0;
0xFFFFFFFF;
// 2.3 八进制整数
07;
017;
0777;
00;
// 2.4 非法数字格式 (应该报错)
0x; // 十六进制缺少数字 - 非法
0xGG; // 非法十六进制字符 - 非法
08; // 非法八进制 (8不是八进制字符) - 非法
09; // 非法八进制 - 非法
0123abc; // 数字后跟字母 - 非法
// ===== 第三部分: 浮点数测试 =====
// 3.1 普通浮点数
3.14;
0.5;
123.456;
0.0;
// 3.2 省略形式
.5; // 省略整数部分
// 3.3 科学计数法
1e10;
1E10;
1.5e-3;
1.5E+3;
2.5e0;
123e456;
// 3.4 非法浮点数格式 (应该报错)
1.2.3; // 多个小数点 - 非法
1e; // 指数部分为空 - 非法
1e+; // 指数不完整 - 非法
1.2e; // 指数部分为空 - 非法
12.3abc; // 数字后跟字母 - 非法
// ===== 第四部分: 字符常量测试 =====
// 4.1 普通字符
char c1 = 'a;
char c2 = 'Z';
char c3 = '0';
char c4 = ' '; // 空格字符
// 4.2 转义字符
char c5 = '\n'; // 换行
char c6 = '\t'; // 制表符
char c7 = '\r'; // 回车
char c8 = '\\; // 反斜杠
char c9 = '\''; // 单引号
char c10 = '\"'; // 双引号
char c11 = '\0'; // 空字符
// 4.3 十六进制转义
char c12 = '\x41'; // 'A'
char c13 = '\x00'; // 空字符
// 4.4 非法字符常量 (应该报错)
''; // 空字符常量 - 非法
'abc'; // 多个字符 - 非法
'\z'; // 非法转义 - 非法
'a // 未闭合 - 非法 (这行故意不闭合)
// ===== 第五部分: 字符串常量测试 =====
// 5.1 普通字符串
char s1[] = "hello";
char s2[] = "Hello World";
char s3[] = ""; // 空字符串
char s4[] = "12345";
// 5.2 含转义的字符串
char s5[] = "hello\nworld";
char s6[] = "tab\there";
char s7[] = "say \"hi\"";
char s8[] = "path\\file";
char s9[] = "\x48\x65\x6c\x6c\x6f"; // "Hello"
// 5.3 中文字符串
char s10[] = "你好世界";
char s11[] = "混合Chinese和English";
// 5.4 非法字符串 (应该报错)
"unclosed // 未闭合字符串 - 非法
"\z"; // 非法转义 - 非法
// ===== 第六部分: 运算符测试 =====
// 6.1 算术运算符
a + b;
a - b;
a * b;
a / b;
a % b;
// 6.2 复合赋值运算符
a = b;
a += b;
a -= b;
a *= b;
a /= b;
a %= b;
// 6.3 自增自减运算符
a++;
++a;
a--;
--a;
// 6.4 位运算符
a & b;
a | b;
a ^ b;
~a;
a << 2;
a >> 2;
a &= b;
a |= b;
a ^= b;
a <<= 2;
a >>= 2;
// 6.5 逻辑运算符
a && b;
a || b;
!a;
// 6.6 比较运算符
a < b;
a > b;
a <= b;
a >= b;
a == b;
a != b;
a <> b; // Mini语言的不等于
// 6.7 其他运算符
ptr->member; // 箭头运算符
// ===== 第七部分: 界限符测试 =====
(a + b); // 圆括号
arr[0]; // 方括号
{a; b;} // 花括号
a, b, c; // 逗号
label: // 冒号
obj.member; // 点号
a; // 分号
// ===== 第八部分: 关键字测试 =====
if a > b then
max = a;
else
max = b;
while count < 10 do
count = count + 1;
for i = 0; i < 10; i++ do
sum = sum + i;
int x;
float y;
char c;
void func;
return 0;
break;
continue;
switch x;
case 1:
default:
struct Point;
const PI;
typedef int INT;
// ===== 第九部分: 注释测试 =====
// 这是单行注释
/* 这是
多行
注释 */
a = 1; // 行尾注释
/* 嵌套测试 /* 内层 外层结束 */
a/*中间注释*/b; // 空注释分隔
// ===== 第十部分: 复杂表达式测试 =====
result = (a + b) * (c - d) / e;
value = arr[i] + arr[j];
flag = (x > 0) && (y < 100) || (z == 0);
ptr = &var;
val = *ptr;
x = a > b ? a : b; // 三目运算符(?和:作为界限符)
// ===== 第十一部分: 边界情况测试 =====
// 11.1 连续运算符
a+++b; // a++ + b
a---b; // a-- - b
// 11.2 最长匹配
a<<=b; // 应该识别为 <<= 而不是 < 和 <=
// 11.3 紧凑代码
a=b+c*d/e%f;
// 11.4 多重嵌套括号
((((a))));
arr[arr[arr[0]]];
// 11.5 长标识符
this_is_a_very_long_identifier_name_for_testing_purposes;
// 11.6 大数
99999999999999999999;
end#
/*
注意: 这个多行注释故意不闭合,用于测试未闭合注释的错误检测
(取消下面这行的注释来测试)
*/
// /* 未闭合的多行注释测试