Chúng ta xem xét văn phạm cho biểu thức toán học sau.
E = E "+" E | E "-" E | E "*" E | E "/" E | Real | "(" E ")" .
Văn phạm này không diễn đạt tốt cấu trúc một biểu thức toán học. Trong toán học, phép nhân và phép chia có độ ưu tiên cao hơn phép cộng và phép trừ. Ví dụ biểu thức 4.0+5.0*7.0 nên được viết là 4.0+(5.0*7.0), kết quả là 39. Một biểu thức con là một số hoặc 1 biểu thức trong dấu ngoặc gọi là “factor”, một biểu thức con chỉ bao gồm phép nhân và phép chia của các “factor” gọi là một “term”. Theo thứ tự ưu tiên thi các biểu thức trong dấu ngoặc phải được tính trước.
Chúng ta ký hiệu factor là F và term là T. Ta có văn phạm của biểu thức toán học như sau
E = E "+" T | E "-" T | T . T = T "*" F | T "/" F | F . F = Real | "(" E ")" .
Các luật cho E phát sinh các chuỗi dạng T "+" T "-" · · · "+" T với một hoặc nhiều T được phân cách bằng những phép cộng và trừ.Tương tự như vậy, các quy tắc cho T tạo ra F "*" F "/" · · · "*" F với một hoặc nhiều F cách nhau bằng phép nhân, chia. Lưu ý rằng Real là lớp số thực.
Để tránh các quy tắc đệ quy trái, chúng ta chuyển đổi các quy tắc E và T sang dạng văn phạm sau
E = T Eopt .
Eopt = "+" T Eopt | "-" T Eopt | Λ . T = F Topt .
Trang 24
Topt = "*" F Topt | "/" F Topt | Λ . F = Real | "(" E ")" .
Thành phần đầu vào là một luồng ký tự. Khi phân tích cú pháp, chúng ta phải chuyển luồng ký tự đó thành một luồng của các token, mỗi token đại diện cho một ký tự terminal