2.3. Ngơn ngữ (language)
Trong q trình triển khai, chúng tơi cần dùng đến khái niệm ngôn ngữ để mô tả giới hạn các mệnh lệnh xử lý. Ngôn ngữ (language) theo cách sử dụng của chúng tôi như là vật tương đương của văn phạm (grammar). Tuy nhiên ngôn ngữ chỉ dùng để biểu diễn ngơn ngữ chính quy và do đó dùng để xây dựng sơ đồ chuyển trạng thái tuyến tính, trong khi văn phạm biểu diễn ngôn ngữ phi ngữ cảnh và dùng để xây dựng sơ đồ chuyển trạng thái đẩy xuống.
2.3.1. Định nghĩa hình thức về ngơn ngữ
Có rất nhiều định nghĩa khác nhau, xem [4], [7], [17], của các nhà khoa học xã hội cũng như khoa học chính xác về ngôn ngữ, nhưng chúng tôi đưa ra định nghĩa về ngơn ngữ theo quan điểm tốn học “ngơn ngữ là tập hợp các câu (sentence) hay các chuỗi (string) được thành lập trên trên một từ điển các ký hiệu”
L = language(V) = { s | s là chuỗi thành lập trên V }
Trong đó phép thành lập chuỗi trên một từ điển ký hiệu chỉ đơn giản là phép ghép liên tiếp các ký hiệu vào nhau để tạo thành chuỗi. Trừ khi tập ký hiệu là rỗng, các ngôn ngữ thành lập trên từ điển đều là tập hợp vô hạn các chuỗi.
Về mặt tốn học, ngơn ngữ là tập hợp vô hạn các câu. Nhưng về mặt triển khai, chúng ta thường lưu trữ một ngôn ngữ là tập hợp hữu hạn các câu. Ngôn ngữ hữu hạn như vậy thường được biểu diễn dễ dàng trong máy tính dưới dạng tập tin văn bản (tập hợp các câu, mỗi câu trên một dòng) hoặc dưới dạng sơ đồ chuyển trạng thái tuyến tính (tập hợp các trạng thái nối với nhau bởi các từ).
Ví dụ cho từ điển gồm ba ký hiệu V1 = { tôi, yêu, em } Chúng ta sẽ có một ngơn ngữ rất phong phú bao được liệt kê như sau (Chúng tôi thêm dấu cách vào giữa các ký hiệu để dễ nhìn)
L1 = language(V1) = { tôi, yêu, em,
tôi tôi yêu, tôi tôi em, tôi tôi tôi, tôi yêu em, em yêu tôi, .. }