Постройте регулярную грамматику для L = {x∈{0,1}∗|x — двоичное кодирование числа, кратного 4}

#grammar #regular-language

Вопрос:

Используя символы 0,1 и используя двоичный код для чисел, кратных 4, т. е. 100,1000,1100,10000,10100,11000,111000,100000

Комментарии:

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

Ответ №1:

Я предполагаю, что под делимым вы подразумеваете «делимое с нулевым напоминанием с разрешенными начальными нулями». Обычная грамматика (слева-обычная) для этого такова:

 S = A0
A = B0
B = B0
B = B1
B = ε
 

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

Если вы запретите начальные нули, то вы получите это (что подразумевает и ненулевой ввод; справа-обычная грамматика):

 S = 1A
A = 0A
A = 1A
A = 0D
D = 0
 

С грамматикой ABNF:

 S = "1" *("0" / "1") "0" "0"
 

И регулярное выражение:

 ^1[01]*00$
 

Комментарии:

1. Вы пропустили случай — 0 делится на 4.

2. Я написал это первым, но по вводу кажется, что ноль не включен. Судя по вопросу, так оно и есть. Это также сводится к тому, разрешены ли начальные нули или нет (является ли минимально возможное представление, подразумеваемое вводом примера, или нет). Я допустил возможность иметь и ведущие нули.

3. Я был недостаточно критичен. Спасибо вам за заметки. Я должен с уважением не согласиться с тем, что «the» и «is» достаточно для определения ведущих нулей. По этой причине я позволил обоим.

4. Ну, я не являюсь носителем английского языка, но я думаю, что при правильном использовании английского слова «the» означает, что есть только один (кодировка номера). И разрешение ведущих нулей означает, что их бесконечно много, поэтому никто не сказал бы «the». И, как я уже сказал, в их списке также нет ведущих нулей. Но да, моим главным желанием было, чтобы решение без ведущих нулей занимало более заметное место, и теперь, с вашим значительно улучшенным ответом, оно заняло его.

5. Насколько я знаю, «the» используется, когда объект известен заранее. Данный язык принимает начальные нули. Я бы позволил этому пока, пока у пользователя не возникнут вопросы.