La teoria del linguaggio è correlata alla teoria del calcolo. Qual è il lato più filosofico dell'informatica, sul decidere quali programmi sono possibili, o quali potranno mai essere scritti, e quale tipo di problemi è impossibile scrivere con un algoritmo per risolvere.
Un'espressione regolare è un modo per descrivere un linguaggio regolare. Un linguaggio regolare è un linguaggio che può essere deciso da un automa finito deterministico.
Dovresti leggere l'articolo su Finite State Machines: http://en.wikipedia.org/wiki/Finite_state_machine
E lingue regolari:
http://en.wikipedia.org/wiki/Regular_language
Tutte le lingue normali sono lingue libere dal contesto, ma ci sono lingue libere dal contesto che non sono regolari. Un Context Free Language è l'insieme di tutte le stringhe accettate da un Context Free Grammer o un Pushdown Automata che è una macchina a stati finiti con un unico stack: http://en.wikipedia.org/wiki/Pushdown_automaton#PDA_and_Context-free_Languages
Esistono linguaggi più complicati che richiedono una macchina di Turing (qualsiasi programma possibile che puoi scrivere sul tuo computer) per decidere se una stringa è nella lingua o meno.
La teoria del linguaggio è anche molto correlata al problema P vs. NP e ad altre cose interessanti.
Il mio libro di testo di Introduzione all'informatica del terzo anno è stato piuttosto bravo a spiegare queste cose: Introduzione alla teoria del calcolo. Di Michael Sipser. Ma mi è costato $ 160 per comprarlo nuovo e non è molto grande. Forse puoi trovare una copia usata o trovarne una copia in una biblioteca o qualcosa che potrebbe aiutarti.
MODIFICARE:
I limiti delle espressioni regolari e delle classi linguistiche superiori sono stati studiati moltissimo negli ultimi 50 anni circa. Potresti essere interessato al lemma di pompaggio per le lingue normali. È un mezzo per dimostrare che una certa lingua non è regolare:
http://en.wikipedia.org/wiki/Pumping_lemma_for_regular_languages
Se una lingua non è regolare potrebbe essere Context Free, il che significa che potrebbe essere descritta da un Context Free Grammer, o potrebbe essere anche in una classe di lingua superiore, potresti provare che non è Context Free dal lemma di pompaggio per Context Free linguaggi che è simile a quello delle espressioni regolari.
Una lingua può anche essere indecidibile, il che significa che anche una macchina di Turing (può essere eseguito un programma che il tuo computer può eseguire) non può essere programmata per decidere se una stringa deve essere accettata come nella lingua o rifiutata.
Penso che la parte che ti interessa di più sia la macchina a stati finiti (sia deterministica che deterministica) per vedere quali lingue può decidere un'espressione regolare e il lemma pompante per dimostrare quali lingue non sono regolari.
Fondamentalmente una lingua non è regolare se ha bisogno di una sorta di memoria o capacità di contare. Il linguaggio delle parentesi corrispondenti non è regolare ad esempio perché la macchina ha bisogno di ricordare se ha aperto una parentesi per sapere se deve chiuderla.
La lingua di tutte le stringhe che utilizzano le lettere aeb che contengono almeno tre b è una lingua normale: a ba ba ba
La lingua di tutte le stringhe che utilizzano le lettere aeb che contengono più b di a non è regolare.
Inoltre non dovresti che tutti i linguaggi finiti siano regolari, ad esempio:
Il linguaggio di tutte le stringhe di lunghezza inferiore a 50 caratteri che utilizzano le lettere aeb che contengono più b di a è regolare, poiché è finito sappiamo che potrebbe essere descritto come (b | abb | bab | bba | aabbb | ababb |. ..) ect finché non vengono elencate tutte le possibili combinazioni.
Automata Theorem