Um alfabeto, representado pelo símbolo $\Sigma$, é um conjunto finito de símbolos ou caracteres.
Uma palavra, cadeia de caracteres, sentença ou string sobre um alfabeto é uma sequência finita de símbolos do alfabeto justapostos.
Um elemento importante em linguagens é a palavra vazia, representada pelo símbolo $\varepsilon$, que é uma palavra de tamanho zero, ou seja, uma palavra sem nenhum símbolo.
Prefixo de uma palavra é qualquer sequência de símbolos contígua inicial da palavra. Sufixo é semelhante, mas no final da plavara. Subpalavra (ou substring) é qualquer sequência de símbolos contígua de símbolos da palvara. A palavra vazia é sempre um prefixo, sufixo ou subpalavra de uma palavra.
Em uma linguagem de programação, uma palavra é um programa.
Concatenação: A concatenação é uma operação binária denotada por $a \cdot b$ ou $ab$.
A concatenação é associativa,: $(ab)c = a(bc)$ e por isso não utilizamos parentesespara definir esta operação.
O elemento neutro da concatenação é a palavra vazia, ou seja, $\varepsilon{w} = w = w\varepsilon$.
A concatenação sucessiva é representava por $w^n$, onde $w$ é uma palavro e $n$ é o número de vezes que a palavra é concatedada, por exemplo, $w = a, w^4 = aaaa$
Seja um alfabeto $\Sigma$, então $\Sigma^{*}$ é o conjunto de todas as palavras possíveis a partir do alfabeto, incluindo $\varepsilon$, e $\Sigma^{+}$ é o conjunto formado por $\Sigma^{*} - {\varepsilon}$.
Exemplo, prove por indução que toda palavra $w$ sobre um alfabeto $\Sigma$ é uma palavra de $\Sigma^*$.
Uma linguagem formal sobre um alfabeto $\Sigma$, denotada por $L$ é um conjunto de palavras sobre $\Sigma$, logo $L \subseteq \Sigma^*$
Uma gramática de Chomsky é uma 4-upla $G=(V, T, P, S)$, onde;
As regras de produção $(\alpha, \beta)$ são representadas por $\alpha \rightarrow \beta$.
É possível que o mesmo símbolo possua várias regras associadas:
\[\begin{align} \alpha \rightarrow & \:\beta_1 \\ \alpha \rightarrow & \:\beta_2 \\ \dots \\ \alpha \rightarrow & \:\beta_n \end{align}\]E nesse caso, por conveniência, podemos representar a regra como $\alpha \rightarrow \beta_1 | \beta_2 | \dots | \beta_n$.
A linguagem gerada são todas as palavros de símbolos terminais, deriváveis a partir do símbolo inicial $S$. Podemos definir todas as palavras de uma linguagem $L$ geradas a partir da gramática $G$ como:
\[L(G) = \{w in T^\* \| S \implies^\+ w\}\]Onde $S\implies^+ w$ é a aplicação recursiva das regras de produção da gramática $G$, iniciando em $S$ até que $w$ seja gerado.
Estudar a teoria da computação a partir de uma máquina complexa como um computador real insere um número muito grande de variáveis para que seja possível construir uma teoria matemática manejável, sobre o o que é computação e o que é um computador. Ao invés disso, utilizamos modelos computacionais, que simplificam a forma como descrevemos uma máquina.
O primeiro modelo computacional que estudamos é o modelo mais simples, conhecido como máquina de estados finitos ou autômato finito.
Uma forma de representar um autômato finito é utilizando uma representação gráfica dos estados e transições:
Um automato finito pode ser definido formalemente como uma 5-upla $M = (\Sigma, Q, S, q_0, F)$, onde:
Seja $M = (\Sigma, Q, S, q_0, F)$ um autômato finito e suponha que $w = w_{1}w_{2}\dots{w}_n$ seja uma cadeia de caracteres ond cada $w_i$ pertence ao alfabeto $\Sigma$, então $M$ aceita $w$ se existe uma sequência de estados $r_0, r_1, \dots, r_n \in Q$ com três condições:
Dizemos que $M$ reconhece a linguagem $A$ se $A = \{w | M\:\text{aceita}\:w\}$.
Por exemplo, dado o seguinte autômato determinísitico:
A linguagem aceita pelo autômato é composta por todas as palavras iniciadas e terminadas pela letra $a$, podem conter $b$, mas não possuem a subpalavra $bb$.
Note que para todo símbolo para o qual não há transição a partir de um estado, o autômato deveria ser direcionado a um estado de erro $e$, tal que $e \notin F$, e nesse estado todo símbolo em $\Sigma$ leva novamente a $e$.
Para deixar a representação gráfica mais simples, não incluimos o estado de erro, e assumimos que quando não existe uma transição $\delta(q_n, \alpha)$ para um estado $q_n \in Q$ e um símbolo $\alpha \in \Sigma$, o autômato $M$ não aceita a palavra.