Мовна теорія пов'язана з теорією обчислень. Яка більш філософська сторона Інформатики, щодо вирішення того, які програми можливі, або які коли-небудь можна буде написати, і про те, які проблеми неможливо написати алгоритм для вирішення.
Регулярний вираз - це спосіб опису звичайної мови. Звичайна мова - це мова, яку можна визначити детермінованим кінцевим автоматом.
Ви повинні прочитати статтю про Кінцеві державні машини: http://en.wikipedia.org/wiki/Finite_state_machine
І звичайні мови:
http://en.wikipedia.org/wiki/Regular_language
Усі звичайні мови - це контекстні вільні мови, але є вільні контекстні мови, які не є регулярними. Безкоштовна мова контексту - це сукупність усіх рядків, які приймає вільний граммер контексту або автомат Pushdown, який є кінцевою машиною стану з єдиним стеком: http://en.wikipedia.org/wiki/Pushdown_automaton#PDA_and_Context-free_Languages
Є більш складні мови, для яких потрібна машина Тьюрінга (будь-яка можлива програма, яку ви можете написати на своєму комп’ютері), щоб вирішити, чи є рядок мовою чи ні.
Теорія мови також дуже пов'язана з проблемою P проти NP та деякими іншими цікавими матеріалами.
Моє знайомство з інформатикою третього курсу з інформатики було досить добре в поясненні цього матеріалу: Вступ до теорії обчислень. Автор Майкла Шипсера. Але це коштувало мені як 160 доларів, щоб придбати його нове, і воно не дуже велике. Можливо, ви можете знайти використану копію або знайти її в бібліотеці або щось, що може вам допомогти.
Редагувати:
Обмеження регулярних виразів та вищих мовних класів були досліджені тонною протягом останніх 50 років. Можливо, вас зацікавить накачана лема для звичайних мов. Це засіб довести, що певна мова не є регулярною:
http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages
Якщо мова не є регулярною, вона може бути вільною від контексту, а це означає, що вона може бути описана граммером без контексту, а може бути навіть у вищому мовному класі, ви можете довести, що це не Context Free, накачуючи лему для Context Free мови, яка схожа на ту, що використовується для регулярних виразів.
Мова може бути навіть нерозбірливою, що означає, що навіть машина Тьюрінга (може програмувати ваш комп’ютер може працювати) не може бути запрограмована, щоб вирішити, чи слід приймати рядок як на мові чи відхиляти.
Я думаю, що частина, яка вас найбільше цікавить, - це Машини кінцевих держав (як детерміновані, так і детерміновані), щоб побачити, які мови може вирішити регулярний вираз, і перекачувати лему, щоб довести, які мови не є регулярними.
В основному мова не є регулярною, якщо їй потрібна якась пам'ять або вміння рахувати. Мова відповідних дужок не є звичайною, наприклад, тому що машині потрібно пам'ятати, чи вона відкрила дужки, щоб знати, чи має закрити її.
Мова всіх рядків з використанням літер a і b, які містять щонайменше три b, є звичайною мовою: a ba ba ba
Мова всіх рядків, що використовують букви a і b, які містять більше b, ніж a, не є регулярною.
Крім того, не слід, щоб усі кінцеві мови були регулярними, наприклад:
Мова всіх рядків довжиною менше 50 символів, що використовують літери a і b, які містять більше b, ніж a, є регулярною, оскільки це кінцеве значення, ми знаємо, що це може бути описано як (b | abb | bab | bba | aabbb | ababb |. ..) ect, поки не перераховані всі можливі комбінації.
Automata Theorem