Khi xây dựng bảng phân tích LL(1), ta thường cần tính FIRST không chỉ của một kí hiệu chưa kết thúc mà của cả một CHUỖI kí hiệu β=X1X2…Xk (mỗi Xi có thể là kí hiệu kết thúc hoặc chưa kết thúc), theo quy tắc nối tiếp:
Cho văn phạm G và một truy vấn là chuỗi kí hiệu β (các kí hiệu của β đều xuất hiện trong G, có thể là kết thúc hoặc chưa kết thúc, có thể lặp), hãy tính FIRST(β).
Ví dụ: với văn phạm
E -> T X
X -> + T X
X -> eps
T -> id
và truy vấn β=X T, ta có FIRST(X)={+,ε}; vì ε∈FIRST(X) nên xét tiếp T: FIRST(T)={id} (không chứa ε). Kết quả: FIRST(X T)={+,id}.
A -> X1 X2 ... Xk (giữa A và ->, giữa -> và X1, giữa các Xi luôn có khoảng trắng); A là kí hiệu ở vế trái, X1,…,Xk là các kí hiệu ở vế phải. Nếu vế phải là chuỗi rỗng ε, dòng có dạng A -> eps (đúng một kí hiệu eps).eps) là kí hiệu KẾT THÚC (terminal). Kí hiệu bắt đầu (start symbol) của văn phạm là vế trái của luật sinh ở dòng đầu tiên (dòng thứ hai của input). Có thể có nhiều luật sinh cùng vế trái, nằm ở các dòng khác nhau, không nhất thiết liền kề.$.In ra đúng một dòng là FIRST(β): các kí hiệu kết thúc sắp xếp tăng dần theo thứ tự từ điển, cách nhau đúng một khoảng trắng; nếu ε∈FIRST(β) (bao gồm cả trường hợp k=0), in thêm token eps ở CUỐI dòng.
Ví dụ:
Đầu vào:
4
E -> T X
X -> + T X
X -> eps
T -> id
2
X T
Đầu ra:
+ id
Đầu vào:
4
E -> T X
X -> + T X
X -> eps
T -> id
0
Đầu ra:
eps
Đang tải editor...