2014-11-07 3 views
-1

Я пытаюсь преобразовать данный список BNF в EBNF и им совершенно не знаю, как это сделать. Может ли кто-нибудь помочь?Конвертация BNF в EBNF

БНФ является:

<Sentence> :== <NounPhrase><VerbPhrase> 
<NounPhrase> :== <Noun> 
<NounPhrase> :== <Article><Noun> 
<NounPhrase> :== <Article><AdjectiveList><Noun> 
<NounPhrase> :== <AdjectiveList><Noun> 
<AdjectiveList> :== <Adjective> 
<AdjectiveList> :== <Adjective><AdjectiveList> 
<VerbPhrase> :== <Verb> 
<VerbPhrase> :== <Verb><Adverb> 
<Noun> :== frog | grass | goblin 
<Article> :== a | the | that 
<Adjective> :== purple | green | tiny 
<Verb> :== grows | dreams | eats 
<Adverb> :== quickly | slowly | badly 

Расширенная грамматика BNF используются следующие условные обозначения:

  • верхний индекс? после символа означает, что он является необязательным и может появляться один раз или вовсе.
  • Надстрочный символ + после символа означает, что он должен появляться как минимум один раз, но может отображаться более одного раза.
  • Надстрочный символ * после символа означает, что он может появляться не на всех, один или несколько раз.
  • Сопряженные круглые скобки могут использоваться для группировки символов для целей: ?, +, * операторы.
  • Угловые скобки обычно отбрасываются из нетерминальных символов, а другой шрифт используется для различения терминалов от нетерминалов.

Это то, к чему я придумал, но я не уверен, что это правильно.

Sentence :== (<NounPhrase><VerbPhrase>) + 
NounPhrase :== <Noun> + (<Article>< AdjectiveList>)? 
AdjectiveList :== <Adjective> * 
VerbPhrase :== <Verb> + <Adverb>? 
Noun :== (frog | grass | goblin)* 
Article :== (a | the | that)* 
Adjective :== (purple | green | tiny)* 
Verb :== (grows | dreams | eats)* 
Adverb :== (quickly | slowly | badly)* 
+0

Вы искали? Какая информация отсутствует в [Как конвертировать BNF в EBNF] (http://stackoverflow.com/questions/14922242/how-to-convert-bnf-to-ebnf)? –

+0

Извините, что забыл отправить другую часть, теперь она исправлена. Мне даны те правила преобразования, которые помогут. –

+0

Описанные EBNF конвенции не EBNF - EBNF - это стандарт ИСО ([ISO 14977: 1996] (http://www.iso.ch/cate/d26153.html), доступный бесплатно). Вы все еще не ответили на мой вопрос: «Какая информация отсутствует в другом вопросе?», С ее провалами «Что вы не понимаете о своем задании или BNF, в котором оно написано?» и «Что вы пробовали?». –

ответ

0

оригинальный BNF является:

<Sentence> :== <NounPhrase><VerbPhrase> 
<NounPhrase> :== <Noun> 
<NounPhrase> :== <Article><Noun> 
<NounPhrase> :== <Article><AdjectiveList><Noun> 
<NounPhrase> :== <AdjectiveList><Noun> 
<AdjectiveList> :== <Adjective> 
<AdjectiveList> :== <Adjective><AdjectiveList> 
<VerbPhrase> :== <Verb> 
<VerbPhrase> :== <Verb><Adverb> 
<Noun> :== frog | grass | goblin 
<Article> :== a | the | that 
<Adjective> :== purple | green | tiny 
<Verb> :== grows | dreams | eats 
<Adverb> :== quickly | slowly | badly 

Первая попытка обращения к диалекту EBNF требуется это:

Sentence :== (<NounPhrase><VerbPhrase>) + 
NounPhrase :== <Noun> + (<Article>< AdjectiveList>)? 
AdjectiveList :== <Adjective> * 
VerbPhrase :== <Verb> + <Adverb>? 
Noun :== (frog | grass | goblin)* 
Article :== (a | the | that)* 
Adjective :== (purple | green | tiny)* 
Verb :== (grows | dreams | eats)* 
Adverb :== (quickly | slowly | badly)* 

Что вы придумали ISN» t correct:

  • Вы не уронили угловые скобки.
  • В оригинале предложение представляет собой словосочетание, за которым следует глагольная фраза; в вашем переписании это последовательность одной или нескольких слов-существительных, за которыми следует глагольная фраза.
  • В оригинале именная фраза заканчивается существительным; в вашем переписании может следовать список из нуля или одной комбинации статьи и списка прилагательных (но не предшествующих ни статье, ни списку прилагательных).
  • В оригинале список прилагательных представляет собой последовательность из одного или нескольких прилагательных; в вашем переписании, является списком нулевых или более прилагательных.
  • В оригинале глагольная фраза - это один глагол, необязательно сопровождаемый наречием; в вашем переписании это один или несколько глаголов, за которыми следуют ноль или более наречий.
  • В оригинале каждое из существительных, статьи, прилагательного, глагола и наречия - это одно из трех альтернативных значений; в вашем переписании каждый представляет собой список из нуля или более или соответствующие три альтернативные значения.

Я немного запутался, какие скобки понижаться. Я не знаю, какая разница между терминальным и не-терминальным и как их дифференцировать в приведенном выше. Удалил бы верхний индекс «+» и скобки?

Символы терминалов - это те вещи, которые представляют себя. В этом контексте такие слова, как «лягушка», «the», «зеленый», «сны» и «плохо», являются терминалами.

Нетерминальные символы определяются в терминах других символов, либо других нетерминалов, либо терминами. Такие вещи, как <Sentence> и <Noun>, являются не-терминалами.

Угловые скобки являются < и > символы (по сравнению с круглыми скобками или скобки (), квадратные скобки [] или фигурные скобки или фигурные скобки {}).

Извлечение круглых скобок и + (и угловых кронштейнов) от Sentence :== (<NounPhrase><VerbPhrase>) + улучшит его. В стандартном BNF, то :== символ обычно ::= и в стандартном EBNF заменяется только = и конкатенации указывается в явном виде с запятой:

Sentence = Noun Phrase, Verb Phrase 

В стандартном EBNF, терминалы заключены в двойные или одинарные кавычки (а не с изменением шрифта). И «надстрочный» не нужен, либо ?, + и * просто появляются после повторного воспроизведения. (Обратите внимание, что стандартный EBNF использует [ … ] вокруг необязательного вопроса и { … } вокруг повторяющихся (ноль или больше) предметов и { … }- вокруг повторяющихся (одного или нескольких) предметов).

NounPhrase = Article ? AdjectiveList ? Noun 

Noun = "frog" | "grass" | "goblin"