जैसा कि आपने बताया, मनुष्य एक दूसरे के बीच "प्राकृतिक" भाषा जैसे अंग्रेजी, फ्रेंच, जर्मन के माध्यम से संवाद करते हैं। उन्हें प्राकृतिक कहा जाता है क्योंकि हम जानबूझकर उन्हें आविष्कार करने के बजाय स्वाभाविक रूप से प्राप्त करते हैं (एस्पेरांतो एक अपवाद है)।
एक औपचारिक भाषा का आविष्कार किसी उद्देश्य या अन्य के लिए किया जाता है। उदाहरण के लिए, C जैसी एक प्रोग्रामिंग भाषा, प्रोग्रामिंग कंप्यूटर के प्रयोजन के लिए आविष्कार की गई एक औपचारिक भाषा है।
सभी भाषाओं को एक व्याकरण का उपयोग करके वर्णित किया जा सकता है। 1956 में नोम चोम्स्की द्वारा व्याकरणों के एक पदानुक्रम का वर्णन किया गया था। इसमें निम्न स्तर होते हैं:
टाइप -0 व्याकरण (अप्रतिबंधित व्याकरण)। वे सबसे सामान्य हैं, और एक ट्यूरिंग मशीन के बराबर हैं। जैसे, यह तय करने की समस्या कि क्या एक दी गई स्ट्रिंग एक अप्रतिबंधित व्याकरण का हिस्सा है, अनिर्दिष्ट है।
टाइप -1 व्याकरण (संदर्भ-संवेदनशील व्याकरण)। लगभग सभी प्राकृतिक भाषाएं जैसे अंग्रेजी संदर्भ-संवेदनशील हैं। अंग्रेजी में संदर्भ-संवेदनशीलता का एक उदाहरण दो वाक्यांश हैं: "समय एक तीर की तरह उड़ता है।" और "फल केले की तरह उड़ता है।" सामान्य तौर पर, कंप्यूटर के लिए संदर्भ-संवेदनशील भाषाओं को समझना मुश्किल है।
टाइप -2 व्याकरण (संदर्भ-मुक्त)। संदर्भ-मुक्त भाषाएँ अधिकांश प्रोग्रामिंग भाषाओं के वाक्य विन्यास का सैद्धांतिक आधार हैं।
टाइप -3 व्याकरण (नियमित व्याकरण)। नियमित भाषाओं के परिवार को नियमित अभिव्यक्ति द्वारा प्राप्त किया जा सकता है। नियमित भाषाओं का उपयोग आमतौर पर खोज पैटर्न और प्रोग्रामिंग भाषाओं की शाब्दिक संरचना को परिभाषित करने के लिए किया जाता है।
टाइप 2 (संदर्भ-मुक्त) और टाइप 3 (नियमित) व्याकरण कंप्यूटर द्वारा सबसे अधिक बार होते हैं क्योंकि उनके लिए पार्सर कुशलता से लागू किया जा सकता है।
बीएनएफ (बैकस नॉर्मल फॉर्म या बैकस-नौर फॉर्म) संदर्भ-मुक्त व्याकरण के लिए एक संकेतन तकनीक है, जिसका उपयोग अक्सर कंप्यूटिंग में उपयोग की जाने वाली भाषाओं के वाक्य विन्यास का वर्णन करने के लिए किया जाता है।
उदाहरण के लिए एक पहचानकर्ता के रूप में वर्णित किया जा सकता है:
<identifier> ::= <letter> { <letter> | <digit> }
जिसका अर्थ है कि यह एक अक्षर से शुरू होना चाहिए और इसमें अतिरिक्त अक्षर या अंक हो सकते हैं।
इससे पहले, एक पत्र एक 'ए' परिभाषित है 'बी' | 'c' आदि, और अंक को '9' के माध्यम से '0' के रूप में परिभाषित किया जाता है, इसी प्रकार के अंकन का उपयोग किया जाता है।
एसी "के लिए" बयान के रूप में परिभाषित किया जा सकता है:
<for_statement> ::=
'for' '(' <expression> ';' <expression> ';' <expression> ')' <statement>
लेक्सिकल एनालाइज़र और पार्सर (एक कंपाइलर या दुभाषिया के पहले चरण) का निर्माण बीएनएफ द्वारा किसी विशेष भाषा के लिए वर्णित विशिष्ट व्याकरण को स्वीकार करने के लिए किया जाता है। लेक्सिकल एनालाइज़र आमतौर पर भाषा के विभिन्न टोकन (जैसे कि कोई कीवर्ड, पहचानकर्ता या एक संख्या) को अलग करने के लिए उपयोग किया जाता है, और पार्सर का उपयोग यह पता लगाने के लिए किया जाता है कि टोकन एक साथ कैसे काम करते हैं, जैसे कि "इस कथन के लिए" कैसे बनाया गया है ।