SamuelUFU (discussão | contribs)
 
(33 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 1: Linha 1:
Esta pesquisa deve fornecer um conteúdo atualizado sobre o tema acima. Não esqueça de incluir as 
== Conceito ==
referëncias (fontes) no último item, reforçando que não deve ser um Copy/Paste e sim uma síntese
*O '''software interpretador''' é um programa de computador que executa instruções escritas em uma linguagem de programação. Por exemplo, as linguagens Basic, Prolog, Python e Java, são frequentemente interpretadas. Um interpretador geralmente usa uma das seguintes estratégias para a execução do programa:
das pesquisas que fizer.
**Executar o código fonte diretamente ou
<br>
**Traduzir o código fonte em alguma representação intermediária e depois executar este código.
*Para isso, certos tipos de tradutores transformam uma linguagem fonte em uma linguagem simplificada, chamada de '''código intermediário''', que pode ser diretamente “executado” por um programa chamado interpretador. Podemos imaginar o código intermediário como uma linguagem de máquina de um "computador abstrato" projetado para executar o código fonte.
*Interpretadores são, em geral, menores que compiladores e facilitam a implementação de construções complexas em linguagens de programação. Entretanto, o tempo de execução de um programa interpretado é geralmente maior que o tempo de execução deste mesmo programa compilado, pois o interpretador deve analisar cada declaração no programa a cada vez que é executado e depois executar a ação desejada, enquanto que o código compilado apenas executa a ação dentro de um contexto fixo, anteriormente determinado pela compilação. Este tempo no processo de análise é conhecido como '''overhead interpretativa'''.


= Conceito =
== Princípio de funcionamento ==
<br>
*O código é traduzido linha a linha, ao contrário dos [[Compiladores]], que traduz totalmente o código, gerando um executável.
*O interpretador passa o tempo todo lendo e executando código.


== Análise Léxica ==
* '''Definição'''
**Análise léxica é o processo realizado sobre um texto, digamos um programa de computador ou então uma linguagem de marcação como HTML, que divide este em '''lexemes''' e os converte para uma sequência de '''tokens''', os quais são usados para alimentar um '''parser'''. Um programa que realiza análise léxica é geralmente chamado de '''lexer''', '''scanner''' ou '''tokenizer'''.
* '''Tokens/Lexemes'''
**''Lexemes'' são unidades sintáticas relevantes do contexto do lexer, por exemplo para um lexer voltado a uma certa linguagem de programação alguns lexemes poderiam ser: 1, "olá", for, ==, variableName, function.
Um ''token'' é uma estrutura que categoriza um lexeme, ele contêm um nome abstrato que representa o grupo do lexeme e um possível valor deste caso o grupo não seja único.


Um interpretador é um tipo de tradutor que traduz o código fonte em linguagem de máquina através da interpretação de cada instrução feita à medida que o software é executado, ou seja, um interpretador lê uma linguagem de alto nível e a coloca em execução.
== Análise Sintática ==
*Durante a análise sintática, o programa-fonte é armazenado numa estrutura denominada ''árvore do programa''
*Depois, essa estrutura é percorrida, para que os comandos do programa sejam executados
*Exemplo: operações matemáticas
    1 + 2 * 3
https://upload.wikimedia.org/wikipedia/commons/d/db/Parsing-example.png


== Bytecode ==
*Em ciência da computação, '''bytecode''' é o resultado de um processo semelhante ao dos compiladores de código-fonte que não é imediatamente executável. Em oposição, o bytecode irá ser interpretado numa máquina virtual, que fará a execução. Assim, o bytecode é um estágio intermediário entre o código-fonte (escrito numa linguagem de programação específica) e a aplicação final, sendo a sua vantagem principal a dualidade entre a portabilidade — o bytecode irá produzir o mesmo resultado em qualquer arquitetura — e a ausência da necessidade do pré-processamento típico dos compiladores — o bytecode é encarado como um produto final, cuja validação da sintaxe e tipos de dados (entre outras funções dos compiladores) não será necessária.


== Exemplos de interpretadores ==
*Browsers
*Excel, Basic, Access...
*AutoLisp
*Prolog
*Matlab


[[Arquivo: interpretação 1.jpg]]
== Referências Bibliográficas ==
 
http://producao.virtual.ufpb.br/books/camyle/introducao-a-computacao-livro/livro/livro.chunked/ch05s04.html ''(25/05/2017 - 16:20)''<br/>
= Princípio de funcionamento =
https://pt.stackoverflow.com/questions/113578/o-que-%C3%A9-analise-l%C3%A9xica ''(04/06/2017 - 17:57)''<br/>
<br>
http://www.comp.ita.br/~mokarzel/arquivos/CES41%20Cap%201-b.ppt ''(04/06/2017 - 18:20)''<br/>
 
https://pt.wikipedia.org/wiki/Bytecode ''(04/06/2017 - 18:33)''<br/>
 
http://www.inf.ufsc.br/~barreto/cca/arquitet/arq4.htm ''(04/06/2017 - 18:46)''
O programa conversor recebe a primeira instrução do programa fonte, confere para ver se está escrita corretamente, converte-a em linguagem de máquina e então ordena ao computador que execute esta instrução. Depois repete o processo para a segunda instrução, e assim sucessivamente, até a última instrução do programa fonte. Quando a segunda instrução é trabalhada, a primeira é perdida, isto é, apenas uma instrução fica na memória em cada instante.
Se este programa fonte for executado uma segunda vez, novamente haverá uma nova tradução, comando por comando, pois os comandos em linguagem de máquina não ficam armazenados para futuras execuções
O interpretador analisa sintaticamente e semanticamente o código, se estas duas etapas forem realizadas e executadas de forma correta o código está pronto para funcionar.
 
 
[[Arquivo:interpretação.jpg]]
 
= Análise Léxica =
<br>
 
= Análise Sintática =
<br>
 
= Bytecode =
<br>
 
= Exemplos de interpretadores =
<br>
 
• Navegadores;
 
• Excel, Word, Basic, Access, ... ;
 
• SmallTalk;
 
• AutoLisp;
 
• Prolog (algumas versões);
 
• Matlab;
 
• Lisp.
 
• Internet
 
• Ruby
 
• Jruby
 
• Ironruby
 
• Macruby
 
 
 
 
[[Arquivo: ruby-3-728.jpg]]
 
= Referências Bibliográficas =
<br>
 
 
Disponível em :< http://www.din.uem.br/~yandre/ICC/introducao-grande.pdf>. Acesso em 13 de abril de 2016.
 
Disponível em : <https://www.researchgate.net/profile/Joao_Ferreira25/publication/267947976_PROGRAMAS_PARA_A_INTERNET_VISANDO_A_DETERMINAO_DO_TAMANHO_DE_LOTE_TIMO_E_O_BALANCEAMENTO_DE_LINHA/links/54bdcfa20cf27c8f2814ce36.pdf>. Acesso em 13 de abril de 2016
 
Disponível em: <http://paginapessoal.utfpr.edu.br/danielc/Ensino/Graduacao/2015.1/ET42G/et42g-2015.1/Aula2.pdf>. Acesso em 13 de abril de 2016.
 
Disponível em: <https://books.google.com.br/books?hl=pt-BR&lr=&id=nv4ZbkhP-nsC&oi=fnd&pg=PR7&dq=compilador+interpretador&ots=Z3dGxM9_Mc&sig=gK2yoJdcRWUppATNa07Q_VdnjZ8>. Acesso em
 
Disponível em: <http://tutoria.ualg.pt/2013/pluginfile.php/72095/mod_resource/content/3/comp_1314_01.pdf>. Acesso em 14 de abril de 2016.Disponível em:
 
Disponível em: <http://unipe.tanure.net/arquivos/20091/comp2/aula1.pdf>. Acesso em 14 de abril de 2016.
 
Disponível em: <http://professores.dcc.ufla.br/~terra/public_files/2011_apostila_logica.pdf>, Acesso em 14 de abril de 2016.
 
Disponível em: <https://www.oficinadanet.com.br/artigo/1527/diferencas_entre_compiladores_e_interpretadores>. Acesso em 14 de abril de 2016.
'''

Edição atual tal como às 21h48min de 4 de junho de 2017

Conceito

  • O software interpretador é um programa de computador que executa instruções escritas em uma linguagem de programação. Por exemplo, as linguagens Basic, Prolog, Python e Java, são frequentemente interpretadas. Um interpretador geralmente usa uma das seguintes estratégias para a execução do programa:
    • Executar o código fonte diretamente ou
    • Traduzir o código fonte em alguma representação intermediária e depois executar este código.
  • Para isso, certos tipos de tradutores transformam uma linguagem fonte em uma linguagem simplificada, chamada de código intermediário, que pode ser diretamente “executado” por um programa chamado interpretador. Podemos imaginar o código intermediário como uma linguagem de máquina de um "computador abstrato" projetado para executar o código fonte.
  • Interpretadores são, em geral, menores que compiladores e facilitam a implementação de construções complexas em linguagens de programação. Entretanto, o tempo de execução de um programa interpretado é geralmente maior que o tempo de execução deste mesmo programa compilado, pois o interpretador deve analisar cada declaração no programa a cada vez que é executado e depois executar a ação desejada, enquanto que o código compilado apenas executa a ação dentro de um contexto fixo, anteriormente determinado pela compilação. Este tempo no processo de análise é conhecido como overhead interpretativa.

Princípio de funcionamento

  • O código é traduzido linha a linha, ao contrário dos Compiladores, que traduz totalmente o código, gerando um executável.
  • O interpretador passa o tempo todo lendo e executando código.

Análise Léxica

  • Definição
    • Análise léxica é o processo realizado sobre um texto, digamos um programa de computador ou então uma linguagem de marcação como HTML, que divide este em lexemes e os converte para uma sequência de tokens, os quais são usados para alimentar um parser. Um programa que realiza análise léxica é geralmente chamado de lexer, scanner ou tokenizer.
  • Tokens/Lexemes
    • Lexemes são unidades sintáticas relevantes do contexto do lexer, por exemplo para um lexer voltado a uma certa linguagem de programação alguns lexemes poderiam ser: 1, "olá", for, ==, variableName, function.

Um token é uma estrutura que categoriza um lexeme, ele contêm um nome abstrato que representa o grupo do lexeme e um possível valor deste caso o grupo não seja único.

Análise Sintática

  • Durante a análise sintática, o programa-fonte é armazenado numa estrutura denominada árvore do programa
  • Depois, essa estrutura é percorrida, para que os comandos do programa sejam executados
  • Exemplo: operações matemáticas
   1 + 2 * 3

Parsing-example.png

Bytecode

  • Em ciência da computação, bytecode é o resultado de um processo semelhante ao dos compiladores de código-fonte que não é imediatamente executável. Em oposição, o bytecode irá ser interpretado numa máquina virtual, que fará a execução. Assim, o bytecode é um estágio intermediário entre o código-fonte (escrito numa linguagem de programação específica) e a aplicação final, sendo a sua vantagem principal a dualidade entre a portabilidade — o bytecode irá produzir o mesmo resultado em qualquer arquitetura — e a ausência da necessidade do pré-processamento típico dos compiladores — o bytecode é encarado como um produto final, cuja validação da sintaxe e tipos de dados (entre outras funções dos compiladores) não será necessária.

Exemplos de interpretadores

  • Browsers
  • Excel, Basic, Access...
  • AutoLisp
  • Prolog
  • Matlab

Referências Bibliográficas

http://producao.virtual.ufpb.br/books/camyle/introducao-a-computacao-livro/livro/livro.chunked/ch05s04.html (25/05/2017 - 16:20)
https://pt.stackoverflow.com/questions/113578/o-que-%C3%A9-analise-l%C3%A9xica (04/06/2017 - 17:57)
http://www.comp.ita.br/~mokarzel/arquivos/CES41%20Cap%201-b.ppt (04/06/2017 - 18:20)
https://pt.wikipedia.org/wiki/Bytecode (04/06/2017 - 18:33)
http://www.inf.ufsc.br/~barreto/cca/arquitet/arq4.htm (04/06/2017 - 18:46)