2012-02-28 23 views
7

मैं बीएनएफ के बीएनएफ को परिभाषित करने की कोशिश कर रहा हूं। दूसरे शब्दों में, मैं बीएनएफ के मेटा-व्याकरण को परिभाषित करने की कोशिश कर रहा हूं। यही है, एक बीएनएफ व्याकरण जो स्वयं का एक उदाहरण है और कोई अन्य बीएनएफ व्याकरण उत्पन्न कर सकता है।बीएनएफ का बीएनएफ क्या है? यानी हम बीएनएफ मेटा-व्याकरण को कैसे परिभाषित करते हैं?

कोई सुझाव/संकेत/स्निपेट की अत्यधिक सराहना की जाएगी!

धन्यवाद!

+1

आपका प्रश्न [BNF पर विकिपीडिया लेख] (http://en.wikipedia.org/wiki/Backus%E2%80%93Naur_Form#Further_examples) द्वारा उत्तर दिया जा रहा है। –

+0

@GregHewgill दिलचस्प। मुझे फ्रैंक डी रेमर द्वारा सिखाया गया था कि बीएनएफ खुद का वर्णन नहीं कर सकता है। – EJP

+0

@EJP: डी रेमर था (है?) पार्सर जेनरेटर और व्याकरण के साथ बहुत शानदार है, मुझे विश्वास नहीं है कि वह उसे सिखाता। मुझे संदेह है कि आपने जो कुछ सीखा है उसे याद किया है। –

उत्तर

6

यहाँ एक है:

bnf = rules ; 
rules = rule ; 
rules = rules rule ; 
rule = lefthandside EQUAL righthandside SEMICOLON ; 
lefthandside = IDENTIFIER ; 
righthandside = ; 
righthandside = righthandside token ; 
token = IDENTIFIER ; 
token = QUOTEDLITERAL ; 

इस पत्ते पहचानकर्ता, QUOTEDLITERAL, समान और SEMICOLON अपरिभाषित, के तहत इस धारणा है कि BNF भाषा के टोकन से अधिक परिभाषित किया गया है।

आप बीएनएफ को पात्रों पर परिभाषित कर सकते हैं। बस जोड़ें:

EQUAL = '=' ; 
SEMICOLON = ';' ; 
IDENTIFIER = letter ; 
IDENTIFIER = IDENTIFIER letterordigit ; 
letterordigit = letter ; 
letterordigit = digit ; 
letter = 'A' ; 
... 
letter = 'Z' ; 
digit = '0' ; 
... 
digit = '9' ; 

वाम पाठक के लिए एक व्यायाम के रूप: विकल्प जोड़ने (|) EBNF के लिए यह एक BNF बनाने के लिए, एक से अधिक नियम, और क्लीन तारा; यह उत्तर स्पष्ट रूप से रिक्त स्थानों को संभालने पर वीज़ल है, लेकिन जहां भी रिक्त स्थान की अनुमति है (icky लेकिन काम करता है) आप "रिक्त स्थान" nonterminal डालने से इसे संभाल सकते हैं। बीएनएफ विनिर्देश प्रणाली हैं जिनमें आप वास्तव में वर्णों पर व्याकरण को अनिवार्य रूप से लिखते हैं, और उस तरह के निहित खाली nonterminal सम्मिलन आपके लिए किया जाता है (उदाहरण के लिए, Stratego's "Syntax Definition Formalism")।

यदि आप बीएनएफ-के-बीएनएफ में दिमागी बहने वाले सबक चाहते हैं, तो आपको बीएनएफ-प्रोसेसिंग सिस्टम के लिए paper/do the tutorial को ईमानदार-से-गोश 1 9 65 से "मेटाआई" कहा जाना चाहिए। यह पत्र बताता है कि बीएनएफ में बीएनएफ कैसे करें और 10 पृष्ठों में दो कंपाइलर्स कैसे बनाएं।

(यहां एक बड़ा सबक: 60 और 70 के दशक से सभी कंप्यूटर विज्ञान सामग्री पढ़ें। इसमें बहुत कुछ नहीं है, और आप आश्चर्यचकित होंगे कि कितनी अच्छी सामग्री है)।

0
<line> ::= '<' <word> '>' '::=' <definition> 
<definition> ::= <word> '|' | '' <definition> | '' 
संबंधित मुद्दे