Trong chương trình nguồn (ngôn ngữ C): printf(“ max cua hai so %d”, max) có bao nhiêu từ tố định danh?
Đáp án đúng: B
Trong đoạn mã printf(“ max cua hai so %d”, max)
, ta cần xác định số lượng định danh (identifier). Định danh là tên do người lập trình đặt cho các biến, hàm, kiểu dữ liệu,... Trong đoạn mã này, max
là một định danh, nó có thể là tên của một biến chứa giá trị lớn nhất của hai số. Các thành phần khác như printf
là tên hàm (được định nghĩa sẵn trong thư viện), và " max cua hai so %d"
là một chuỗi ký tự (string literal), không phải là định danh. Do đó, chỉ có một định danh duy nhất là max
.
Câu hỏi liên quan
Một ngôn ngữ được gọi là chính quy (Regular Language) nếu và chỉ nếu nó có thể được chấp nhận bởi một máy hữu hạn trạng thái xác định (Deterministic Finite Automaton - DFA). Các loại máy khác như PDA, LBA, và máy Turing chấp nhận các lớp ngôn ngữ rộng hơn, không chỉ ngôn ngữ chính quy.
- DFA (Deterministic Finite Automaton): Chấp nhận ngôn ngữ chính quy.
- PDA (Pushdown Automaton): Chấp nhận ngôn ngữ phi ngữ cảnh (Context-Free Language).
- LBA (Linear Bounded Automaton): Chấp nhận ngôn ngữ ngữ cảnh phụ thuộc (Context-Sensitive Language).
- Máy Turing: Chấp nhận ngôn ngữ đệ quy liệt kê được (Recursively Enumerable Language).
Do đó, đáp án đúng là A.
Phương án A: `[(a+b)*-(aa+bb)]*` - Có vẻ như có sử dụng ký tự '-' không đúng cách trong biểu thức chính quy. Dấu '-' thường không được sử dụng trực tiếp như một toán tử trong biểu thức chính quy theo nghĩa này. Tuy nhiên, cần xem xét ngữ cảnh cụ thể để xác định chính xác. Giả sử '-' là một ký tự literal, biểu thức có thể đúng.
Phương án B: `[(0+1)-(0b+a1)*(a+b)]*` - Tương tự như phương án A, sự xuất hiện của '-' và các ký tự 'b', 'a' có thể không phù hợp nếu không được định nghĩa trước hoặc sử dụng đúng cách. Nếu 'b' và 'a' là ký tự trong bảng chữ cái, biểu thức có thể đúng nếu '-' là một ký tự literal. Tuy nhiên, cách sử dụng này không phổ biến.
Phương án C: `(01+11+10)*` - Đây là một biểu thức chính quy hợp lệ. Nó mô tả một chuỗi bao gồm các chuỗi con "01", "11", hoặc "10", lặp lại không hoặc nhiều lần.
Phương án D: `(1+2+0)*(1+2)*` - Đây là một biểu thức chính quy hợp lệ. Nó mô tả một chuỗi bao gồm các ký tự "1", "2", hoặc "0", lặp lại không hoặc nhiều lần, sau đó là các ký tự "1" hoặc "2" lặp lại không hoặc nhiều lần.
Trong các phương án trên, phương án B có vẻ không phải là một biểu thức chính quy chuẩn do sự xuất hiện của các ký tự 'b' và 'a1' mà không có định nghĩa rõ ràng về chúng trong ngữ cảnh biểu thức chính quy thông thường, cũng như cách sử dụng dấu '-'. Tuy nhiên, phương án A cũng gây tranh cãi.
Vì câu hỏi yêu cầu chọn biểu thức *không* phải là biểu thức chính quy, phương án B phù hợp hơn do cách sử dụng các ký tự và toán tử không chuẩn.
* Đáp án A: {a} chỉ chứa chuỗi 'a', không bao gồm 'b'.
* Đáp án B: {epsilon, a, b} chứa chuỗi rỗng (epsilon), 'a' và 'b', nhưng biểu thức a/b không bao gồm chuỗi rỗng.
* Đáp án C: {a, b} chứa đúng hai chuỗi 'a' và 'b', phù hợp với ý nghĩa của biểu thức a/b.
* Đáp án D: {ab} chỉ chứa chuỗi 'ab', không liên quan đến a/b.
1. Văn phạm tuyến tính phải (Right-linear grammar): Trong loại văn phạm này, ký hiệu không kết thúc (nếu có) xuất hiện ở vị trí tận cùng bên phải của vế phải trong luật sinh. Ví dụ: `A -> aB` hoặc `A -> a`, trong đó A và B là ký hiệu không kết thúc, và a là ký hiệu kết thúc.
2. Văn phạm tuyến tính trái (Left-linear grammar): Trong loại văn phạm này, ký hiệu không kết thúc (nếu có) xuất hiện ở vị trí tận cùng bên trái của vế phải trong luật sinh. Ví dụ: `A -> Ba` hoặc `A -> a`, trong đó A và B là ký hiệu không kết thúc, và a là ký hiệu kết thúc.
Do đó, đáp án D (Tuyến tính phải và trái) là đáp án chính xác nhất, vì nó bao gồm cả hai loại văn phạm tuyến tính cơ bản.
* Xét chuỗi aaba (lựa chọn A):
* Cách 1: S -> aSbS -> a aSbS bS -> a a a bS bS -> a a a b ε b ε -> aaba
* Cách 2: S -> bSaS -> b S a S -> b ε a S -> a S -> a aSbS -> a a a b S -> a a a b ε -> aaab (Sai)
Thử một cách khác:
* S -> aSbS -> a a b a SbS (Không có cách nào để sinh ra chuỗi này)
* S -> a S b S -> a a b S b S (Không có cách nào để sinh ra chuỗi này)
Tuy nhiên, cần phải thử thêm:
* Xét chuỗi aaba (lựa chọn A):
* Cây 1: S -> aSbS -> a aSbS bS -> a a a bS bS -> a a a b ε b ε -> aaba
* Cây 2: S -> bSaS -> a ... (Không tạo ra aaba)
Ta thấy rằng có thể tạo ra chuỗi aaba bằng nhiều cách khác nhau, chứng tỏ văn phạm nhập nhằng trên chuỗi aaba. Do đó, đáp án A là đúng.
Kiểm tra thêm các chuỗi khác (không bắt buộc nếu đã tìm thấy một chuỗi nhập nhằng):
* Xét chuỗi aab (lựa chọn B):
* S -> aSbS -> a a b S b S -> a a b ε => aab
* S -> a S -> a aSbS -> a a b S -> aab (S -> epsilon)
Ta có thể sinh ra aab từ các dẫn xuất khác nhau.
* Xét chuỗi aaabb (lựa chọn C):
Chuỗi này phức tạp hơn và có thể có nhiều cách dẫn xuất, nhưng để chứng minh nhập nhằng cần tìm ít nhất hai cách.
Vì A, B đều có thể sinh ra bằng nhiều cách nên có lẽ đáp án đúng nhất là D. Tuy nhiên, theo phân tích ban đầu, A có vẻ rõ ràng nhất.
Do phân tích ở trên có vẻ không rõ ràng, chúng ta thử phân tích lại chuỗi aaba. Có thể thấy các cây dẫn xuất sau:
1. S -> aSbS -> a a b a S
Chúng ta cần xem xét xem có hai cây cú pháp khác nhau cho chuỗi aaba hay không. Có vẻ như chuỗi `aaba` có thể được sinh ra từ nhiều cây cú pháp khác nhau, do đó văn phạm là nhập nhằng trên chuỗi `aaba`.
Xem xét lại, ta thấy aaba có thể được sinh ra từ 2 cây:
* S -> aSbS -> a a b a S -> a a b a epsilon = aaba
* S -> aS bS -> a a b S bS -> a a b epsilon bS -> a a b b epsilon = aabb (không đúng)
Như vậy, việc chỉ ra sự nhập nhằng không hề đơn giản. Tuy nhiên, sau khi phân tích kỹ, chuỗi `aaba` có vẻ là đáp án đúng nhất, mặc dù việc chứng minh nó nhập nhằng một cách rõ ràng đòi hỏi phải vẽ cây cú pháp hoặc chỉ ra các dẫn xuất khác nhau một cách tường minh.
Tuy nhiên, cần phải chứng minh một cách chặt chẽ. Trong trường hợp này, `aaba` có vẻ là ứng cử viên sáng giá nhất, nhưng việc chứng minh nó nhập nhằng cần thêm nỗ lực. Ta chọn `aaba` vì nó phức tạp vừa đủ để có thể có nhiều cách phân tích khác nhau, trong khi `aab` và `aaabb` có thể có cấu trúc đơn giản hơn.

Bộ Đồ Án Tốt Nghiệp Ngành Trí Tuệ Nhân Tạo Và Học Máy

Bộ 120+ Đồ Án Tốt Nghiệp Ngành Hệ Thống Thông Tin

Bộ Đồ Án Tốt Nghiệp Ngành Mạng Máy Tính Và Truyền Thông

Bộ Luận Văn Tốt Nghiệp Ngành Kiểm Toán

Bộ 370+ Luận Văn Tốt Nghiệp Ngành Kế Toán Doanh Nghiệp

Bộ Luận Văn Tốt Nghiệp Ngành Quản Trị Thương Hiệu
ĐĂNG KÝ GÓI THI VIP
- Truy cập hơn 100K đề thi thử và chính thức các năm
- 2M câu hỏi theo các mức độ: Nhận biết – Thông hiểu – Vận dụng
- Học nhanh với 10K Flashcard Tiếng Anh theo bộ sách và chủ đề
- Đầy đủ: Mầm non – Phổ thông (K12) – Đại học – Người đi làm
- Tải toàn bộ tài liệu trên TaiLieu.VN
- Loại bỏ quảng cáo để tăng khả năng tập trung ôn luyện
- Tặng 15 ngày khi đăng ký gói 3 tháng, 30 ngày với gói 6 tháng và 60 ngày với gói 12 tháng.