EBNF правила в BNF

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

<decimal_literal> --> (0|1|2|3|4|5|6|8|9){0|1|2|3|4|5|6|7|8|9|_}

В этом правиле круглые скобки и фигурные скобки являются метасимволами. Требуется более 1 правила и, возможно, потребуется ввести 1 или несколько новых нетерминалов.

Это учебник, который я использую http://umsl.edu/~mfrp9/misc/cpl.pdf на странице 131 показывает пример, но я не могу применить его к этой проблеме. Если кто-то может объяснить решение этой проблемы шаг за шагом, чтобы я мог научиться решать аналогичные проблемы, я очень признателен.


person Noobie    schedule 01.10.2014    source источник
comment
Вопрос, на который вы ссылаетесь, - это преобразование из BNF в EBNF. В заголовке вашего вопроса говорится, что вы пытаетесь преобразовать EBNF в BNF. Что ты пытаешься сделать? И если целью является BNF, то на каком диалекте BNF? Если целью является EBNF, вы имеете в виду стандартный EBNF (как в ISO 14977: 1996) или какой-то другой диалект EBNF?   -  person Jonathan Leffler    schedule 01.10.2014
comment
Да, я хочу преобразовать EBNF в BNF, но мне сказали, что если его можно преобразовать одним способом, то можно преобразовать и другим способом. Я не смог найти ничего точно для EBNF в BNF, поэтому я использовал этот пост в качестве руководства. Да стандартный EBNF.   -  person Noobie    schedule 01.10.2014
comment
Да, его можно конвертировать, но вопрос в том, на каком диалекте BNF? Я полагаю, что ответ на это есть в книге.   -  person Jonathan Leffler    schedule 01.10.2014
comment
Я предполагаю, что это диалект 2 согласно bnf-for-java.sourceforge.net/Dialects .html   -  person Noobie    schedule 01.10.2014


Ответы (1)


Это выглядит правдоподобным как перевод в BNF со стр.131 книги.

<decimal_literal> ⟶ <decimal_digit>
    | <decimal_literal> <decimal_digit_or_underscore>

<decimal_digit> ⟶ 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9

<decimal_digit_or_underscore> ⟶ <decimal_digit> | _
person Jonathan Leffler    schedule 01.10.2014
comment
Я понимаю ‹decimal_literal›, но почему мы разделили ‹decimal_digit› и ‹decimal_digit_or_underscore›? Поскольку выражения, которые можно опускать или повторять, можно представить в фигурных скобках {...}. - person Noobie; 01.10.2014
comment
Делайте это по-своему, если хотите; так я бы это сделал. BNF на стр.131 в вашей книге не показывает никакого использования { … } для повторения; это обозначение EBNF. Поскольку вы переводите из EBNF в BNF, вам необходимо удалить конструкции только для EBNF, такие как { … }, и перевести в BNF. - person Jonathan Leffler; 01.10.2014
comment
Привет, спасибо за вашу помощь, Джонатан, я задал еще один простой вопрос, и я хотел бы увидеть, правильно ли мое решение, если у вас есть второй, пожалуйста, посмотрите. stackoverflow.com/questions/26134894/bnf-to-standard-ebnf - person Noobie; 01.10.2014