<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Guilherme Fabrício</title>
    <description>The latest articles on Forem by Guilherme Fabrício (@guidev115).</description>
    <link>https://forem.com/guidev115</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1139032%2Fe9c60dec-07a8-49aa-8734-55baa1a26913.jpg</url>
      <title>Forem: Guilherme Fabrício</title>
      <link>https://forem.com/guidev115</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/guidev115"/>
    <language>en</language>
    <item>
      <title>Linguagens Formais: A União com Linguagens e Computação</title>
      <dc:creator>Guilherme Fabrício</dc:creator>
      <pubDate>Mon, 06 May 2024 00:21:51 +0000</pubDate>
      <link>https://forem.com/guidev115/linguagens-formais-a-uniao-com-linguagens-e-computacao-30d5</link>
      <guid>https://forem.com/guidev115/linguagens-formais-a-uniao-com-linguagens-e-computacao-30d5</guid>
      <description>&lt;h2&gt;
  
  
  Introdução
&lt;/h2&gt;

&lt;p&gt;Em suma, na maioria das graduações de Sistemas de Informação e Ciência da Computação, temos uma matéria/grade sobre linguagens formais. Mas o que de fato seria &lt;strong&gt;"Linguagens Formais"&lt;/strong&gt;, e qual seria seu propósito?&lt;/p&gt;

&lt;p&gt;Para respondermos isso, precisamos ter conhecimento básico do nosso ensino Fundamental e Médio sobre português. Sim, imaginou que codar seria ignorar totalmente seu aprendizado em português? Achou errado, meu amigo dev.&lt;/p&gt;

&lt;p&gt;Na Teoria de Linguagens Formais, temos como definição sobre linguagem de modo formal: &lt;/p&gt;

&lt;p&gt;"É um conjunto de elementos (símbolos) e um conjunto de métodos (regras) para combinar estes elementos, usado e entendido por uma determinada comunidade". Resumindo, sintaxe e semântica do seu querido ensino médio.&lt;/p&gt;

&lt;p&gt;Com isso esclarecido, podemos dizer que &lt;strong&gt;"linguagens formais"&lt;/strong&gt; são mecanismos formais para representação e especificação de linguagens, baseados na chamada teoria da computação.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gramática
&lt;/h2&gt;

&lt;p&gt;Para cada Linguagem Formal, temos uma gramática também, e cada etapa dessa mesma gramática, digamos que o poder computacional aumenta também, dado pelo formalismo que &lt;a href="https://revistagalileu.globo.com/Sociedade/noticia/2019/01/noam-chomsky-entenda-sua-teoria-linguistica-e-seu-pensamento-politico.html" rel="noopener noreferrer"&gt;&lt;strong&gt;Avram Noam Chomsky&lt;/strong&gt;&lt;/a&gt; em sua teoria hierárquica.&lt;/p&gt;

&lt;p&gt;Mas tudo bem, como que algo de linguagem e gramática consegue aumentar poder computacional de algo, como se valida tal linguagem?&lt;/p&gt;

&lt;p&gt;Suponhamos que temos uma linguagem que contem em seu alfabeto {a,b}, e nessa linguagem podemos aceitar &lt;strong&gt;TUDO&lt;/strong&gt;, então teremos como exemplo palavras:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74zzly7r4ka2sxqs3e74.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F74zzly7r4ka2sxqs3e74.png" alt="Exemplo de Palavras 01" width="388" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tudo começa com qualquer uma das letras desse alfabeto, ou termina de qualquer jeito. Esse tipo de linguagem, apesar de ser simples, é uma linguagem. Mas okay, vamos limitar: UMA LINGUAGEM QUE SÓ ACEITA FINAL COM (ab):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9s32b3hzoaivyrqp2ji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff9s32b3hzoaivyrqp2ji.png" alt="Exemplo Palavra qualquer" width="394" height="115"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agora temos um problema mais recorrente, as Linguagens Formais, mostrando ali que uma linguagem só ACEITA se tiver (ab) no final, fazendo assim, uma linguagem que valida se aquela palavra é válida ou não na linguagem.&lt;/p&gt;

&lt;h3&gt;
  
  
  Exemplo na sua Linguagem de Programção
&lt;/h3&gt;

&lt;p&gt;Mas Gui, para que serve tudo isso então? Simples, sua linguagem de programação favorita não acusa erro se você errar comandos sintáticos como IF/WHILE/FOR ? Isto é, errar os nomes como, "UF" invés de "IF", ou até mesmo esquecer uma letra do comando como "WHIL" esquecendo "E" do comando WHILE. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ISSO TUDO É O QUE SUA LINGUAGEM FAZ, SEGUINDO AS ORIENTAÇÕES DE UMA LINGUAGEM FORMAL!!!!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;E para mais funcionalidades como Sintaxe, Semântica e até mesmo dupla validação (famoso fecha colchetes ou chaves), a Linguagem Formal consegue validar, contudo, temos que aumentar seu poder computacional para conseguirmos validar esse tipo de problema.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hierarquia de Chomsky
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbr074ocyrj3nh9hm2a9g.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbr074ocyrj3nh9hm2a9g.jpg" alt="Hierarquia de Chomsky" width="800" height="649"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como disse acima, temos passos que aumentam o poder computacional, e dentre eles, são outras validações. Como exemplo acima, é uma linguagem REGULAR, lembre-se disso, a validação da sintaxe é feita por ele, e é a base da hierarquia, onde o poder computacional é o menor que tem.&lt;/p&gt;

&lt;p&gt;Se pularmos mais uma etapa, iremos chegar à Gramática Livre de Contexto, que faz validações de duplo balanceamento. Por exemplo:&lt;/p&gt;

&lt;p&gt;Palavras que contêm mesma quantidade de A e B.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzg9en8aeafh2kfqnnjhg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzg9en8aeafh2kfqnnjhg.png" alt="imagem com palavra que contem mesma quantidade de a e b" width="315" height="117"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E como funciona? Esse tipo de linguagem contém praticamente &lt;strong&gt;UMA PILHA&lt;/strong&gt; de validação. Por isso que aumenta o poder computacional, pois você realmente coloca algo a "mais" no mecanismo de validação.&lt;/p&gt;

&lt;p&gt;Isso acontece na sua linguagem favorita, ela contém uma GLC (gramática livre de contexto) que valida quantos { } e ( ) que você tem. Até mesmo seus if e elses.&lt;/p&gt;

&lt;p&gt;Não pense que acabou, pois ainda temos mais linguagens acima dessa, e alguns chegam ao poder computacional INFINITO. E para ter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linguagem Recursiva (Gramática Sensível ao Contexto)&lt;/li&gt;
&lt;li&gt;Linguagem Recursivamente Enumerável (Gramática Irrestrita)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As Linguagens Recursivas são muito usadas como as Máquinas de Turing, com poder computacional ainda maior, e por fim, as Linguagens Recursivamente Enumeráveis, que são conceitos abstratos sobre MEMÓRIA INFINITA, e bom, se temos memória infinita, temos poder computacional praticamente infinita também.&lt;/p&gt;

&lt;h2&gt;
  
  
  Máquinas de Aceitação.
&lt;/h2&gt;

&lt;p&gt;Além de termos linguagens e gramáticas, temos as máquinas que aceitam ou não determinadas palavras para aquela linguagem designada. Para podermos exemplificar, as máquinas são uma forma visual e gráfica de como decorre em "estados" a linguagem, e nela, mostramos que a linguagem irá parar em um estado que consideramos &lt;strong&gt;final&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Exemplo de uma máquina de autômato finito.&lt;/p&gt;

&lt;p&gt;L = palavras sobre {a, b} que começam e terminam com a e possuem pelo menos um b.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobe9rvo149shnvwwybcr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fobe9rvo149shnvwwybcr.jpg" alt="Exemplo" width="800" height="213"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sabendo que temos (qo) como estado inicial (símbolo de triângulo), e (q3) como estado final (com um círculo adentro). Com uma palavra:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekckjf5qwmn91vjqfemv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fekckjf5qwmn91vjqfemv.png" alt="Exemplo de palavra aceita" width="645" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sendo (q3) um estado final, podemos parar por aqui e falar com propriedade que essa palavra é &lt;strong&gt;ACEITA&lt;/strong&gt; na linguagem acima. Agora vamos a outro exemplo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lcnrahigepn0t46uzu7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0lcnrahigepn0t46uzu7.png" alt="exemplo de nao aceitar" width="715" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Sendo q2 é um estado &lt;strong&gt;NÃO FINAL&lt;/strong&gt;, podemos afirmar que essa palavra (abb) &lt;strong&gt;NÃO SERÁ ACEITA&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão.
&lt;/h3&gt;

&lt;p&gt;Temos então um resumo bem breve sobre Linguagens Formais e também seus autômatos. Parece ser algo simples e irrelevante, contudo, conceitos abstratos e teóricos deixam-nos ter maior sabedoria e discernimento sobre como realmente funcionam as tecnologias que possuímos e utilizamos.&lt;br&gt;
As Linguagens Formais mostram um mundo introdutório de como funciona uma linguagem de programação de forma abstrata, e até mesmo o funcionamento de um interpretador/compilador. Espero ter conseguido introduzir esse belo mundo sobre linguagens formais, nos vemos na próxima.&lt;/p&gt;




&lt;h3&gt;
  
  
  Referências
&lt;/h3&gt;

&lt;p&gt;Ricardo Terra&lt;br&gt;
Apostila Linguagens Formais e Autômatos&lt;br&gt;
Apostila Teórica, 2024&lt;/p&gt;

&lt;p&gt;F. Blauth Menezes.&lt;br&gt;
&lt;a href="https://www.amazon.com.br/Linguagens-Formais-Aut%C3%B4matos-Blauth-Menezes/dp/8577807657" rel="noopener noreferrer"&gt;Linguagens formais e autômatos, volume 3.&lt;/a&gt;&lt;br&gt;
Bookman, 6 edition, 2011.&lt;/p&gt;

&lt;p&gt;J. E. Hopcroft and J. D. Ullman.&lt;br&gt;
&lt;a href="https://savedparadigms.wordpress.com/wp-content/uploads/2014/09/formal-languages-and-their-relation-to-automata-john-e-hopcroft-jeffrey-d-ullman.pdf" rel="noopener noreferrer"&gt;Formal languages and their relation to automata.&lt;/a&gt;&lt;br&gt;
Addison-Wesley, 1969.&lt;/p&gt;

&lt;p&gt;J. E. Hopcroft and J. D. Ullman.&lt;br&gt;
&lt;a href="https://www.amazon.com/Introduction-Automata-Languages-Computation-Addison-Wesley/dp/020102988X" rel="noopener noreferrer"&gt;Introduction to Automata Theory, Languages, and Computation.&lt;/a&gt;&lt;br&gt;
Addison-Wesley, 1979.&lt;/p&gt;

&lt;p&gt;M. Sipser.&lt;br&gt;
&lt;a href="https://www.amazon.com.br/Introdu%C3%A7%C3%A3o-teoria-computa%C3%A7%C3%A3o-Michael-Sipser/dp/8522104999" rel="noopener noreferrer"&gt;Introdução à Teoria da Computação&lt;/a&gt;&lt;br&gt;
Thompson, 2007.&lt;/p&gt;

</description>
      <category>braziliandevs</category>
      <category>beginners</category>
      <category>computerscience</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
