Một bộ phân tích LR hoạt động dựa trên một ngăn xếp trạng thái cùng hai bảng: bảng ACTION (tra theo trạng thái đỉnh ngăn xếp và ký hiệu kết thúc hiện tại) và bảng GOTO (tra theo trạng thái và ký hiệu phi kết thúc). Thuật toán mô phỏng chuẩn như sau, với ngăn xếp ban đầu chỉ chứa trạng thái 0 và con trỏ đọc token bắt đầu từ token đầu tiên (chuỗi vào luôn kết thúc bằng ký hiệu quy ước $):
ACTION[s][a]:
GOTO[s'][A] (với A là vế trái của sản xuất N); không tiêu thụ token hiện tại.Mỗi lần shift hoặc reduce được tính là một bước. Cho bảng ACTION/GOTO và văn phạm tường minh, hãy mô phỏng thuật toán trên với một chuỗi token đầu vào và cho biết chuỗi có được chấp nhận không, cùng số bước đã thực hiện.
Ví dụ nhỏ minh hoạ định dạng ô bảng: ô s4 nghĩa là shift tới trạng thái 4; r6 nghĩa là reduce theo sản xuất số 6; acc nghĩa là accept; e nghĩa là ô lỗi (không có hành động).
$).$).sN (shift tới trạng thái N), rN (reduce theo sản xuất N, N đánh số từ 1), acc (accept), hoặc e (lỗi/ô trống), theo đúng thứ tự các ký hiệu kết thúc ở dòng 3.A -> X1 X2 ... Xk (các ký hiệu vế phải cách nhau khoảng trắng), hoặc A -> # nếu vế phải rỗng (k=0). Sản xuất được đánh số 1,…,p theo đúng thứ tự xuất hiện.- nếu không có, theo đúng thứ tự các ký hiệu phi kết thúc ở dòng 5.$), cách nhau bởi khoảng trắng; có thể là dòng trống nếu chuỗi vào rỗng.In ra đúng 3 dòng:
ACCEPT nếu chuỗi được chấp nhận, ngược lại REJECT.REJECT, in vị trí (đánh số từ 1, tính cả ký hiệu $ được thêm vào cuối chuỗi là vị trí cuối cùng) của token đang xét tại thời điểm gặp lỗi; nếu ACCEPT, in dấu -.Ví dụ:
Đầu vào:
12
6
id ( ) + * $
3
E T F
s2 s5 e e e e
e e r4 r4 r4 r4
e e r6 r6 r6 r6
e e e s6 e acc
e e r2 r2 s7 r2
s2 s5 e e e e
s2 s5 e e e e
s2 s5 e e e e
e e s11 s6 e e
e e r1 r1 s7 r1
e e r3 r3 r3 r3
e e r5 r5 r5 r5
6
E -> E + T
E -> T
T -> T * F
T -> F
F -> ( E )
F -> id
3 4 1
- - -
- - -
- - -
- - -
8 4 1
- 9 1
- - 10
- - -
- - -
- - -
- - -
id + id * id
Đầu ra:
ACCEPT
13
-
Đầu vào:
12
6
id ( ) + * $
3
E T F
s2 s5 e e e e
e e r4 r4 r4 r4
e e r6 r6 r6 r6
e e e s6 e acc
e e r2 r2 s7 r2
s2 s5 e e e e
s2 s5 e e e e
s2 s5 e e e e
e e s11 s6 e e
e e r1 r1 s7 r1
e e r3 r3 r3 r3
e e r5 r5 r5 r5
6
E -> E + T
E -> T
T -> T * F
T -> F
F -> ( E )
F -> id
3 4 1
- - -
- - -
- - -
- - -
8 4 1
- 9 1
- - 10
- - -
- - -
- - -
- - -
id + + id
Đầu ra:
REJECT
5
3
Đang tải editor...