В контексті інформатики це слово є об’єднанням символів . Використовувані символи називаються алфавітом . Наприклад, деякі слова , утворені з алфавіту {0,1,2,3,4,5,6,7,8,9}було б 1, 2, 12, 543, 1000, і 002.
Тоді мова - це підмножина всіх можливих слів. Наприклад, ми можемо захотіти визначити мову, яка охоплює всі елітні агенти MI6. Ті , починаються з подвійною 0, так що слова на мові було б 007, 001, 005і 0012, а не 07чи 15. Для простоти ми говоримо, що мова - це " над алфавітом", а не "підмножина слів, утворених об'єднанням символів в алфавіті".
В інформатиці ми тепер хочемо класифікувати мови. Ми називаємо мову регулярною, якщо це може бути вирішено, якщо слово є в мові за допомогою алгоритму / машини з постійною (кінцевою) пам’яттю, досліджуючи всі символи у слові один за одним. Мова, що складається лише зі слова, 42є звичайною, оскільки ви можете вирішити, чи є в ньому слово, не вимагаючи довільної кількості пам'яті; ви просто перевіряєте, чи перший символ 4, чи другий 2, і чи не слідують ще цифри.
Усі мови з кінцевою кількістю слів є регулярними, оскільки ми можемо (теоретично) просто побудувати дерево потоку управління постійного розміру (ви можете візуалізувати його як купу вкладених ifвисловлювань, які перевіряють одну цифру за іншою). Наприклад, ми можемо перевірити, чи є слово в мові "простих чисел від 10 до 99", за допомогою такої конструкції, не вимагаючи пам'яті, крім тієї, яка кодує, в якому кодовому рядку ми знаходимося в даний час:
if word[0] == 1:
if word[1] == 1: # 11
return true # "accept" word, i.e. it's in the language
if word[1] == 3: # 13
return true
...
return false
Зауважте, що всі кінцеві мови є регулярними, але не всі регулярні мови є кінцевими; наша мова double-0 містить нескінченну кількість слів ( 007,, 008але також 004242і 0012345), але може бути перевірена за допомогою постійної пам'яті: Щоб перевірити, чи належить слово в ній, перевірте, чи є перший символ 0, і чи другий символ 0. Якщо це так, прийміть це. Якщо слово коротше трьох або не починається з 00, це не кодова назва MI6.
Формально конструкція кінцевого автомата або звичайної граматики використовується для доведення того, що мова є регулярною. Вони подібні до if-заявлень вище, але допускають довільно довгі слова. Якщо існує кінцевий автомат, існує також звичайна граматика, і навпаки, тому достатньо показати і те, і інше. Наприклад, кінцевим автоматом для нашої мови подвійного 0 є:
start state: if input = 0 then goto state 2
start state: if input = 1 then fail
start state: if input = 2 then fail
...
state 2: if input = 0 then accept
state 2: if input != 0 then fail
accept: for any input, accept
Еквівалентною регулярною граматикою є:
start → 0 B
B → 0 accept
accept → 0 accept
accept → 1 accept
...
Еквівалентний регулярний вираз :
00[0-9]*
Деякі мови не є регулярними. Наприклад, мова будь-якої кількості 1, за якою слідує така ж кількість 2(часто пишеться як 1 n 2 n , для довільного n ) не є регулярною - вам потрібно більше постійного обсягу пам'яті (= постійна кількість станів ) для збереження кількості 1s, щоб вирішити, чи є в мові слово.
Це зазвичай слід пояснити в теоретичному курсі інформатики. На щастя, Вікіпедія цілком приємно пояснює як офіційні, так і звичайні мови .