Các automata giới hạn tuyến tính không thể kiểm tra xem các chương trình C ++, và LBA không thể kiểm tra xem các chương trình SML có được gõ tốt hay không. C ++ có hệ thống loại Turing-Complete, vì bạn có thể mã các chương trình tùy ý dưới dạng siêu biểu đồ mẫu.
SML thú vị hơn. Nó không có kiểm tra loại có thể quyết định, nhưng vấn đề là hoàn thành EXPTIME. Do đó, LBA khó có thể kiểm tra nó, trừ khi có sự sụp đổ rất đáng ngạc nhiên trong hệ thống phân cấp phức tạp. Lý do cho điều này là SML yêu cầu suy luận kiểu và có những họ chương trình có kích thước của loại phát triển nhanh hơn nhiều so với kích thước của chương trình. Ví dụ, xem xét chương trình sau:
fun delta x = (x, x) (* this has type 'a -> ('a * 'a), so its return value
has a type double the size of its argument *)
fun f1 x = delta (delta x) (* Now we use functions to iterate this process *)
fun f2 x = f1 (f1 x)
fun f3 x = f2 (f2 x) (* This function has a HUGE type *)
Đối với các hệ thống loại đơn giản hơn, chẳng hạn như C hoặc Pascal, tôi tin rằng LBA có thể kiểm tra nó.
Trong những ngày đầu nghiên cứu ngôn ngữ lập trình, đôi khi người ta đã sử dụng ngữ pháp van Wingaarden (còn gọi là ngữ pháp hai cấp) để chỉ định hệ thống loại cho ngôn ngữ lập trình. Tôi tin rằng Algol 68 đã được chỉ định theo cách này. Tuy nhiên, tôi được cho biết kỹ thuật này đã bị bỏ rơi vì những lý do thực tế: hóa ra khá khó khăn cho mọi người khi viết ngữ pháp chỉ định những gì họ nghĩ rằng họ đang chỉ định! (Thông thường, các ngữ pháp mà mọi người đã viết tạo ra các ngôn ngữ lớn hơn họ dự định.)
Ngày nay, người ta sử dụng các quy tắc suy luận sơ đồ để chỉ định các hệ thống loại, về cơ bản là một cách chỉ định các vị từ là điểm cố định ít nhất của một tập hợp các mệnh đề Horn. Sự hài lòng đối với các lý thuyết sừng bậc một nói chung là không thể giải quyết được, vì vậy nếu bạn muốn nắm bắt mọi thứ mà các nhà lý thuyết loại, thì bất cứ chủ nghĩa hình thức ngữ pháp nào bạn chọn sẽ mạnh hơn là thực sự tiện lợi.
Tôi biết đã có một số công việc sử dụng ngữ pháp thuộc tính để thực hiện các hệ thống loại. Họ tuyên bố có một số lợi ích kỹ thuật phần mềm cho sự lựa chọn này: cụ thể là luồng thông tin kiểm soát ngữ pháp thuộc tính rất nghiêm ngặt và tôi được bảo rằng điều này giúp việc hiểu chương trình dễ dàng hơn.