Teoria języka jest powiązana z teorią obliczeń. Jaka jest bardziej filozoficzna strona informatyki, o decydowaniu, które programy są możliwe lub które kiedykolwiek będzie można napisać, i jakiego rodzaju problemów nie da się napisać algorytmu do rozwiązania.
Wyrażenie regularne to sposób opisu języka regularnego. Język regularny to język, o którym decyduje deterministyczny automat skończony.
Powinieneś przeczytać artykuł o maszynach skończonych: http://en.wikipedia.org/wiki/Finite_state_machine
Oraz języki regularne:
http://en.wikipedia.org/wiki/Regular_language
Wszystkie zwykłe języki są językami bezkontekstowymi, ale istnieją języki bezkontekstowe, które nie są normalne. Język wolny od kontekstu to zbiór wszystkich ciągów akceptowanych przez gramofon bezkontekstowy lub automat przesuwający, który jest maszyną skończoną z pojedynczym stosem: http://en.wikipedia.org/wiki/Pushdown_automaton#PDA_and_Context-free_Languages
Istnieją bardziej skomplikowane języki, które wymagają maszyny Turinga (dowolnego możliwego programu, który możesz napisać na swoim komputerze), aby zdecydować, czy łańcuch jest w tym języku, czy nie.
Teoria języka jest również bardzo powiązana z problemem P vs. NP i kilkoma innymi interesującymi rzeczami.
Mój podręcznik Wprowadzenie do informatyki na trzecim roku był całkiem dobry w wyjaśnianiu tego zagadnienia: Wprowadzenie do teorii obliczeń. Michael Sipser. Ale kupienie nowego kosztowało mnie około 160 dolarów i nie jest zbyt duże. Może znajdziesz używaną kopię, kopię w bibliotece lub coś, co może ci pomóc.
EDYTOWAĆ:
Ograniczenia wyrażeń regularnych i wyższych klas językowych były badane mnóstwo w ciągu ostatnich 50 lat. Może zainteresuje Cię lemat o pompowaniu dla języków regularnych. Jest to sposób na udowodnienie, że określony język nie jest regularny:
http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages
Jeśli język nie jest zwykły, może być bezkontekstowy, co oznacza, że może być opisany przez gramofon bezkontekstowy lub może być nawet w wyższej klasie językowej, możesz udowodnić, że nie jest wolny od kontekstu, lemat o pompowaniu dla programu Context Free języki, które są podobne do języka dla wyrażeń regularnych.
Język może być nawet nierozstrzygalny, co oznacza, że nawet maszyna Turinga (może programować twój komputer) nie może być zaprogramowana do decydowania, czy łańcuch powinien być akceptowany tak jak w języku, czy odrzucany.
Myślę, że najbardziej interesują cię maszyny skończone (zarówno deterministyczne, jak i deterministyczne), aby zobaczyć, jakie języki może zdecydować wyrażenie regularne, oraz lemat o pompowaniu, aby udowodnić, które języki nie są regularne.
Zasadniczo język nie jest normalny, jeśli potrzebuje jakiejś pamięci lub umiejętności liczenia. Język dopasowania nawiasów nie jest regularny, na przykład, ponieważ maszyna musi pamiętać, czy otworzyła nawias, aby wiedzieć, czy musi go zamknąć.
Językiem wszystkich ciągów znaków zawierających litery a i b, które zawierają co najmniej trzy b, jest język zwykły: a ba ba ba
Język wszystkich łańcuchów wykorzystujących litery a i b, które zawierają więcej b niż a, nie jest regularny.
Nie powinieneś też, aby wszystkie skończone języki były regularne, na przykład:
Język wszystkich łańcuchów krótszych niż 50 znaków, w których występują litery a i b, które zawierają więcej b niż a, jest regularny, ponieważ jest skończony, wiemy, że można go opisać jako (b | abb | bab | bba | aabbb | ababb |. ..) ect, aż zostaną wymienione wszystkie możliwe kombinacje.
Automata Theorem