#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» используется, когда объект известен заранее. Данный язык принимает начальные нули. Я бы позволил этому пока, пока у пользователя не возникнут вопросы.