JavaCC tạo trình phân tích cú pháp gốc đệ quy. Loại trình phân tích cú pháp này hoạt động bằng cách xem biểu tượng tiếp theo để quyết định chọn quy tắc nào. Theo mặc định, nó chỉ nhìn vào biểu tượng tiếp theo (lookahead = 1). Nhưng bạn có thể cấu hình trình phân tích cú pháp để xem không chỉ ở bước tiếp theo mà còn là các ký hiệu N tiếp theo. Nếu bạn đặt lookahead thành 2, trình phân tích cú pháp được tạo sẽ xem xét hai biểu tượng tiếp theo để quyết định chọn quy tắc nào. Bằng cách này, bạn có thể xác định ngữ pháp của mình tự nhiên hơn, nhưng với chi phí hiệu suất. The lookahead càng lớn thì trình phân tích cú pháp càng phải làm.
Nếu bạn đặt con trỏ chung thành số lớn hơn, trình phân tích cú pháp của bạn sẽ chậm hơn cho tất cả các đầu vào (cho các ngữ pháp không tầm thường). Bạn có thể sử dụng lookahead cục bộ nếu bạn muốn cho phép trình phân tích cú pháp bằng lookahead = 1 theo mặc định và chỉ sử dụng một lookahead lớn hơn trong các tình huống cụ thể.
http://www.engr.mun.ca/~theo/JavaCC-FAQ/javacc-faq-moz.htm#tth_sEc4.5
Ví dụ, một phân tích cú pháp với lookahead = 1 không thể quyết định các quy tắc (1 hoặc 2) để có, nhưng với lookahead = 2 nó có thể:
void rule0() : {} {
<ID> rule1()
| <ID> rule2()
}
Bạn có thể thay đổi định nghĩa ngữ pháp để có kết quả tương tự nhưng sử dụng lookahead = 1:
void rule0() : {} {
<ID> (rule1() | rule2())
}