You are on page 1of 4

Mô tả bài toán

Bộ phân tích từ vựng ngôn ngữ VC (bài toán là bài tập lớn môn Chương trình dịch).
Ngôn ngữ VC : cú pháp giống với ngôn ngữ C nhưng không chứa chuỗi và ký tự
chi tiết về đặc tả ngôn ngữ VC : Dac ta tu vung ngon ngu VC.doc
Bộ phân tích từ vựng (Lexical Scanner) có nhiệm vụ đọc vào một xâu là chương trình VC và
trả ra các token của chương trình này, khoảng trắng và comment sẽ bị bỏ qua.
Ví dụ
VD1
Input:
float exampleFunction(boolean var1, int var2) {
if(var1) {
return (float)var2;
} else {
return 94e-1;
}
}

int main() {
boolean b = true;
boolean c = !b;
int d = 4420;
float r = exampleFunction(c, d);
return 0;
}
Output mong đợi
float
exampleFunction
boolean
var1
int
var2
if
return
else
94e-1
main
b
=
true
c
!
d
4420
r
0

Nếu đầu vào chứa từ tố không thỏa mãn đặc tả của ngôn ngữ cần trả ra output “Error token
…” cho token đó và xử lý tiếp
VD2
Input :
int 5x = 7;
Output mong đợi :
int
Error token : 5x
=
7
;
Bộ phân tích từ vựng gồm nhiều hàm và input không chỉ có chương trình VC, để cho đơn
giản ta chỉ test trên hàm lõi của chương trình là scan()

Thực hiện
Kiểm thử lớp tương đương (phân hoạch đầu vào)
Em phân input đầu vào thành hai phân hoạch
{Đầu vào là một chương trình VC hợp lệ}
+{Đầu vào chứa token không hợp lệ}

Các ca kiểm thử


(Bộ test được cho sẵn trong môn học Chương trình dịch)
TC Input Expected Output

1 /* comments cannot nest */ ****/ Error token ****/

2 /* this is ok /* ****/ Empty string

3 // your scanner should *not* print Empty string


//any error

4 void main() { void keyword


i = getInt(); main identifier
j = getInt(); ( separator
putIntLn(gcd(i, j)); ) separator
} { separator
i identifier
= operator
getInt identifier
( separator
) separator
; separator
j identifier
= operator
getInt identifier
( separator
) separator
; separator
putIntLn identifier
( separator
gcd identifier
( separator
i identifier
, separator
j identifier
) separator
) separator
; separator
} separator

5 c c identifier

6 1.E5 1.E5 real number

7 12x12 Error token 12x12

8 ^ Error token ^

9 1111.1111.111...12...+++______ Error token


i 1111.1111.111...12.
n ..+++______
t123 i identifier
/// ///// n identifier
t123 identifier

Các test case 2 3 4 5 6 chứa đầu vào hợp lệ còn lại là các test case chứa token lỗi

Kết quả chạy Test với Junit với 3 test failed và 6 test passed

Chi tiết các test fail:


Test 1
Test 6

Test 9

You might also like