Trong phân tích cú pháp LL(1), với một văn phạm phi ngữ cảnh (CFG) cho trước, tập FIRST(α) của một chuỗi ký hiệu α=Y1Y2…Ym (có thể trộn lẫn terminal và non-terminal, kể cả chuỗi rỗng) được định nghĩa:
FIRST(α)={a∣α⇒∗aβ, a laˋ terminal} ∪ {ε∣α⇒∗ε}
Quy ước biểu diễn văn phạm dùng chung cho bài này:
A-Z).+, (, id, ...); không terminal nào được đặt tên e.e đứng một mình ở vế phải một luật sinh biểu diễn chuỗi rỗng ε (ví dụ A -> e).Cho văn phạm và một chuỗi truy vấn α, hãy tính FIRST(α).
Ví dụ. Với văn phạm biểu thức số học kinh điển:
E -> T X
X -> + T X
X -> e
T -> F Y
Y -> * F Y
Y -> e
F -> ( E )
F -> id
truy vấn chuỗi α=XF: vì X có thể sinh ε nên FIRST(XF)=FIRST(X)∪FIRST(F)={+}∪{(,id}={(,+,id}. Kết quả in ra: (,+,id.
A -> X1 X2 ... Xk, các ký hiệu trên vế phải cách nhau đúng một khoảng trắng. Vế phải rỗng được ghi là A -> e.e nếu muốn hỏi FIRST(ε).Đảm bảo mọi non-terminal xuất hiện ở vế phải bất kỳ luật sinh nào (hoặc trong chuỗi truy vấn) đều có ít nhất một luật sinh định nghĩa nó trong n dòng trên.
In ra một dòng duy nhất: các terminal thuộc FIRST(α), liệt kê theo thứ tự từ điển tăng dần (so sánh chuỗi theo mã ASCII), cách nhau bởi dấu phẩy , (không có khoảng trắng). Nếu ε∈FIRST(α), thêm token e vào cuối danh sách (sau tất cả terminal khác, không xét theo thứ tự bảng chữ cái). Nếu FIRST(α) hoàn toàn rỗng (không có terminal nào và ε∈/FIRST(α)), in ra một dòng trống.
Ví dụ:
Đầu vào:
E
8
E -> T X
X -> + T X
X -> e
T -> F Y
Y -> * F Y
Y -> e
F -> ( E )
F -> id
E
Đầu ra:
(,id
Đầu vào:
E
8
E -> T X
X -> + T X
X -> e
T -> F Y
Y -> * F Y
Y -> e
F -> ( E )
F -> id
X F
Đầu ra:
(,+,id
Đang tải editor...