ในขณะที่คุณชี้ให้เห็นว่ามนุษย์สื่อสารผ่านภาษา "ธรรมชาติ" เช่นอังกฤษฝรั่งเศสเยอรมันระหว่างกัน พวกเขาถูกเรียกว่าเป็นธรรมชาติเพราะเราได้มาโดยธรรมชาติแทนที่จะสร้างสิ่งเหล่านั้นโดยเจตนา (ภาษาเป็นข้อยกเว้น)
ภาษาทางการเป็นภาษาที่คิดค้นขึ้นเพื่อวัตถุประสงค์บางอย่างหรืออื่น ๆ ยกตัวอย่างเช่นภาษาการเขียนโปรแกรมเช่น C เป็นภาษาทางการที่ประดิษฐ์ขึ้นเพื่อจุดประสงค์ของการเขียนโปรแกรมคอมพิวเตอร์
ทุกภาษาสามารถอธิบายได้โดยใช้ไวยากรณ์ ลำดับชั้นของไวยากรณ์ถูกอธิบายโดย Noam Chomsky ในปี 1956 ประกอบด้วยระดับดังต่อไปนี้:
Type-0 grammars (ไวยากรณ์ที่ไม่ จำกัด ) พวกเขาเป็นคนทั่วไปและเทียบเท่ากับทัวริงเครื่องจักร ดังนั้นปัญหาในการตัดสินใจว่าสตริงที่กำหนดนั้นเป็นส่วนหนึ่งของไวยากรณ์ที่ไม่ จำกัด หรือไม่นั้นไม่สามารถตัดสินใจได้
ไวยากรณ์ของ Type-1 (ไวตามบริบท) ภาษาธรรมชาติเกือบทั้งหมดเช่นภาษาอังกฤษนั้นคำนึงถึงบริบท ตัวอย่างของความไวต่อบริบทในภาษาอังกฤษคือวลีสองคำ: "เวลาผ่านไปเหมือนลูกศร" และ "ผลไม้บินได้เหมือนกล้วย" โดยทั่วไปแล้วมันเป็นเรื่องยากสำหรับคอมพิวเตอร์ที่จะเข้าใจภาษาที่ไวต่อบริบท
ไวยากรณ์ประเภท 2 (ปราศจากบริบท) ภาษาที่ไม่มีบริบทเป็นพื้นฐานทางทฤษฎีสำหรับไวยากรณ์ของภาษาโปรแกรมส่วนใหญ่
Type-3 grammars (ไวยากรณ์ปกติ) ครอบครัวของภาษาปกติสามารถรับได้จากการแสดงออกปกติ ภาษาทั่วไปมักใช้เพื่อกำหนดรูปแบบการค้นหาและโครงสร้างคำศัพท์ของภาษาโปรแกรม
ประเภทที่ 2 (ปราศจากบริบท) และไวยากรณ์ประเภทที่ 3 (ปกติ) ส่วนใหญ่มักจะใช้คอมพิวเตอร์เพราะตัวแยกวิเคราะห์สำหรับตัวแยกวิเคราะห์สามารถนำไปใช้ได้อย่างมีประสิทธิภาพ
BNF (รูปแบบปกติของ Backus หรือรูปแบบ Backus – Naur)เป็นเทคนิคสัญกรณ์สำหรับไวยากรณ์ที่ปราศจากบริบทมักใช้เพื่ออธิบายไวยากรณ์ของภาษาที่ใช้ในการคำนวณ
ตัวอย่างเช่นตัวระบุอาจถูกอธิบายว่า:
<identifier> ::= <letter> { <letter> | <digit> }
ซึ่งหมายความว่าจะต้องเริ่มต้นด้วยตัวอักษรและสามารถมีตัวอักษรหรือตัวเลขเพิ่มเติม
ก่อนหน้านี้จดหมายถูกกำหนดเป็น 'a' | 'b' | 'c' ฯลฯ และตัวเลขถูกกำหนดเป็น '0' ถึง '9' โดยใช้สัญกรณ์ชนิดเดียวกัน
คำสั่ง "สำหรับ" AC อาจถูกกำหนดเป็น:
<for_statement> ::=
'for' '(' <expression> ';' <expression> ';' <expression> ')' <statement>
ตัววิเคราะห์คำศัพท์และตัวแยกวิเคราะห์ (ขั้นตอนแรกของคอมไพเลอร์หรือล่าม) จะถูกสร้างขึ้นเพื่อยอมรับไวยากรณ์เฉพาะที่อธิบายโดย BNF สำหรับภาษาเฉพาะ โดยทั่วไปแล้วการวิเคราะห์คำศัพท์จะใช้ในการแยกโทเค็นต่าง ๆ ของภาษา (เช่นคำหลักตัวระบุหรือตัวเลข) และตัวแยกวิเคราะห์จะใช้เพื่อหาว่าโทเค็นทำงานร่วมกันอย่างไรเช่นการสร้างคำสั่ง "สำหรับ" .