Như bạn đã chỉ ra, con người giao tiếp qua một ngôn ngữ "tự nhiên" như tiếng Anh, tiếng Pháp, tiếng Đức, với nhau. Chúng được gọi là tự nhiên bởi vì chúng ta tự nhiên có được chúng chứ không phải cố ý phát minh ra chúng (Esperanto là một ngoại lệ).
Một ngôn ngữ chính thức được phát minh cho mục đích này hay mục đích khác. Ví dụ, một ngôn ngữ lập trình như C là ngôn ngữ chính thức được phát minh cho mục đích lập trình máy tính.
Tất cả các ngôn ngữ, có thể được mô tả bằng cách sử dụng một ngữ pháp. Một hệ thống phân cấp ngữ pháp được mô tả bởi Noam Chomsky vào năm 1956. Nó bao gồm các cấp độ sau:
Loại-0 ngữ pháp (ngữ pháp không hạn chế). Chúng là chung nhất và tương đương với Máy Turing. Như vậy, vấn đề quyết định xem một chuỗi đã cho có phải là một phần của ngữ pháp không hạn chế hay không là không thể giải quyết được.
Loại ngữ pháp 1 (ngữ pháp nhạy cảm ngữ cảnh). Hầu như tất cả các ngôn ngữ tự nhiên như tiếng Anh đều nhạy cảm với ngữ cảnh. Một ví dụ về độ nhạy ngữ cảnh trong tiếng Anh là hai cụm từ: "Thời gian trôi nhanh như một mũi tên". và "Trái cây bay như một quả chuối." Nói chung, rất khó để máy tính có thể hiểu các ngôn ngữ nhạy cảm theo ngữ cảnh.
Loại 2 ngữ pháp (không ngữ cảnh). Ngôn ngữ không ngữ cảnh là cơ sở lý thuyết cho cú pháp của hầu hết các ngôn ngữ lập trình.
Loại 3 ngữ pháp (ngữ pháp thông thường). Họ ngôn ngữ thông thường có thể thu được bằng cách diễn đạt thông thường. Các ngôn ngữ thông thường thường được sử dụng để xác định các mẫu tìm kiếm và cấu trúc từ vựng của các ngôn ngữ lập trình.
Các loại ngữ pháp loại 2 (không ngữ cảnh) và loại 3 (thông thường) thường được sử dụng bởi các máy tính vì trình phân tích cú pháp cho chúng có thể được thực hiện một cách hiệu quả.
BNF (Backus Normal Form hoặc BackusTHER Naur Form) là một kỹ thuật ký hiệu cho các ngữ pháp không ngữ cảnh, thường được sử dụng để mô tả cú pháp của các ngôn ngữ được sử dụng trong điện toán.
Ví dụ: một định danh có thể được mô tả là:
<identifier> ::= <letter> { <letter> | <digit> }
có nghĩa là nó phải bắt đầu bằng một chữ cái và có thể chứa các chữ cái hoặc chữ số bổ sung.
Trước đó, một chữ cái được định nghĩa là 'a' | 'b' | 'c', v.v. và chữ số được định nghĩa là '0' đến '9' bằng cách sử dụng cùng loại ký hiệu.
Câu lệnh AC "for" có thể được định nghĩa là:
<for_statement> ::=
'for' '(' <expression> ';' <expression> ';' <expression> ')' <statement>
Sau đó, các máy phân tích và phân tích cú pháp (giai đoạn đầu tiên của trình biên dịch hoặc trình thông dịch) được xây dựng để chấp nhận ngữ pháp cụ thể được mô tả bởi BNF cho một ngôn ngữ cụ thể. Các trình phân tích từ điển hình thường được sử dụng để phân tách các mã thông báo khác nhau của ngôn ngữ (chẳng hạn như từ khóa, mã định danh hoặc số) và trình phân tích cú pháp được sử dụng để tìm ra cách các mã thông báo hoạt động cùng nhau, chẳng hạn như cách tạo câu lệnh "for" .