You are on page 1of 26

Java, JavaScript e

Oberon

Alexsander Borges Damaceno


Abraão Rodrigues
Agenda
• Oberon: Processo de Tradução
• Java: Breve Histórico • Oberon: Análise e Síntese
• Java: Processo de Tradução • Oberon: Curiosidades
• JavaScript: Processo de Compilação • Comparativo entre as Linguagens
• JavaScript: Análise sintática • Referências Bibliográficas
• Java: Curiosidades
• JavaScript: Breve Histórico
• JavaScript: Processo de Tradução
• JavaScript: Processo de Compilação
• JavaScript: Análise sintática
• JavaScript: Curiosidades
• Oberon: Breve Histórico
Java: Breve Histórico

Histórico e Autores Desenvolvimento Inicial Motivação e Uso

A linguagem Java foi O desenvolvimento da linguagem A motivação para a criação da


desenvolvida por James Gosling, ocorreu na Sun Microsystems. Foi linguagem estava relacionada à
Mike Sheridan e Patrick Naughton lançada em 1995 como parte da necessidade de uma plataforma
na década de 1990. A motivação plataforma Java. Sua portabilidade independente de hardware para
para sua criação foi atender às foi um dos principais atrativos, aplicações de negócios.
necessidades de dispositivos
permitindo que o código fosse Atualmente, é amplamente
eletrônicos e sistemas
executado em diferentes utilizada em desenvolvimento de
embarcados. Inicialmente, era
chamada de “Oak”. plataformas. software empresarial, aplicações
para web e dispositivos móveis.
Java: Processo de Tradução

Análise Léxica Análise Sintática Análise Semântica Geração de Código


e Otimização
A análise léxica em Java JavaC usa um LL(1) como A análise semântica em A linguagem Java gera
envolve a leitura do código parsing de gramática e gera Java verifica o significado e código intermediário como
fonte para identificar e uma AST. o contexto das construções parte do processo de
categorizar os tokens, no programa, garantindo compilação, e a
levando em conta que todas as regras otimização de código e
questões como
semânticas sejam uma das suas principais
palavras-chave,
seguidas. E colocando características. O código
identificadores, literais,
operadores e separadores informação no no da AST final e gerado a partir do
com usa de conceitos de código intermediário.
Dfa.
Inlining, Constant Folding,Dead
Code Elimination,Loop
Optimization, Escape Analysis,
JIT
Java: Processo de Compilação
Java: Análise semântica
Java: Curiosidades

A linguagem Java foi O Java Virtual Machine (JVM) O Java possui fortes recursos
inicialmente chamada de Oak e permite que o Java seja uma de gerenciamento de memoria,
foi projetada para uso em linguagem multiplataforma, como coleta de lixo automatica,
dispositivos portáteis. executando em diversos que o tornam seguro e
sistemas sem alterações no eficiente.
codigo fonte.
JavaScript: Breve Histórico

JavaScript foi desenvolvido por Brendan Eich em 1995, na Netscape


Origem e Autores Communications Corporation, com o nome inicial de Mocha. Mais
tarde, o nome foi alterado para LiveScript e, finalmente, para JavaScript.

A linguagem foi projetada para adicionar interatividade a páginas da


Desenvolvimento
web e foi rapidamente implementada em navegadores populares
Inicial devido à sua versatilidade.

A motivação para a criação do JavaScript foi atender à necessidade de


Motivação uma linguagem de programação interpretada e orientada a objetos
para a web.
JavaScript: Processo de Tradução
Análise Léxica Análise Sintática

Uso da teoria de Dfa and gerar Tokens. Utilizada um parse Top-Down de descendencia
recursiva and Gera uma Ast.

Geração de Código Otimização

Através de bytecode e em algumas implementações Dead code analysis, Inline caching, Jit, Function Inline.
de compilador uso de JIT compiler
JavaScript: Processo de Compilação

Processo de Compilação
JavaScript: Análise sintática
JavaScript: Análise Semântica
JavaScript: Curiosidades

O JavaScript foi criado por Inicialmente, a linguagem foi JavaScript é amplamente


Brendan Eich em 1995 durante chamada de LiveScript, mas foi utilizado para desenvolvimento
o seu tempo na Netscape renomeada para JavaScript web e agora também para
Communications. para capitalizar a crescente desenvolvimento de aplicativos
popularidade do Java. desktop e até mobile, graças
ao Node.js e outras
tecnologias.
Oberon: Breve Histórico

A linguagem Oberon foi desenvolvida por Niklaus Wirth e Jurg Gutknecht na ETH
Origem e Autores Zurich, Suíça, por volta de 1986. Motivada pela necessidade de uma linguagem
simples e eficiente para fins educacionais e de sistema.

Oberon foi o resultado de um esforço concentrado em aumentar o poder da


Modula-2, uma linguagem sucessora direta do Pascal, e simultaneamente para
Desenvolvimento Inicial reduzir sua complexidade. Inicialmente, foi implementada para a máquina virtual
Ceres e posteriormente para arquiteturas de computador reais.

A motivação para a construção da linguagem Oberon foi fornecer uma linguagem


simples, clara e eficiente para o desenvolvimento de software e fins educacionais,
Motivação e foi desenvolvida como parte de um sistema operacional também chamado
Oberon.
Oberon: Curiosidades

O nome Oberon foi inspirado A linguagem foi projetada com A última atualização do
pelas fotos da sonda espacial um lema atribuído a Albert compilador da linguagem foi
Voyager de uma lua do planeta Einstein em mente: “Make things datada em 6 de março de 2020.
Urano, chama Oberon, e também as simple as possible, but not
porque Oberon é famoso por ser simpler.” A diretriz principal era
o rei dos elfos. em concentrar nas
funcionalidades básicas e
essenciais e omitir problemas
efêmeros.
Oberon: exemplo de código
Oberon: Processo de Tradução
Análise Léxica Análise Sintática

Os arquivos de programas em Oberon são tratados Uso de um analisador recursivo descendente com
como uma sequência de símbolos ao invés de uma lookahead (1).
sequência de caracteres, com exceção de caracteres
especiais como &, <=, + e etc.

Semântica e Geração de Código Otimização de Código

Cada construção sintática possui uma rotina com o As rotinas de geração código para cada construção
mesmo nome responsável por identificar essas sintática já traduzem o código da maneira mais
construções, aplicar regras semânticas e gerar o código otimizada possível.
correspondente.
Oberon: Compilador
Oberon: Análise e Síntese
Análise Léxica
- O analisador léxico é definido em um módulo chamado OCS (Oberon Compiler Scanner).
- O analisador léxico mantém uma tabela de símbolos na qual guarda informações de identificadores:
- Para cada identificador declarado, uma entrada é criada na tabela com uma instância de tipo Object
- Cada registro guarda também propriedades desses identificadores, como o tipo, classe (chamado de modo), e
outros atributos que são específicos do tipo da variável.
- Dentre os modos, temos:
- Var: indica uma variável
- Con: indica uma constante
- Fld: indica o campo de um registro
- Ind: indica uma parâmetro VAR
- xProc: indica uma rotina
- O tipo é na verdade um ponteiro para um registro de tipo Struct que é definida apenas uma vez para cada símbolo.
- Cada tipo básico é registrado na tabela de símbolos durante a inicialização do compilador. Essas entradas
consistem em um Object que guarda o identificador padrão do tipo, e uma Struct que indica sua forma: Byte,
Bool, Char, SInt, Int, LInt, Real, LReal, Set.
Oberon: Análise e Síntese
Análise Léxica
Oberon: Análise e Síntese
Análise Léxica
- A interface do scanner consiste de:
- Uma rotina chamada Get, que retorna o próxima símbolo do texto-fonte.
- A rotina Mark serve para gerar uma saída de diagnóstico indicando um número de erro e a posição atual do
scanner no arquivo fonte.
Oberon: Análise e Síntese
Análise Sintática e Semântica
- O módulo principal, denominado Compiler, constitui o parser. Um simples comando Compiler.Compile seguido do
arquivo-fonte chama uma rotina CompilationUnit, que recebe como parâmetro o texto-fonte identificado.
- O parser é projetado utilizando o método top-down, mais especificamente, é um analisador descendente recursivo sem
retrocesso, e utiliza um lookahead de um símbolo.
- As entidades sintáticas são espelhadas por rotinas de mesmo nome, cujo objetivo é reconhecer a construção
específica no texto fonte.
- Quando uma construção é identificada, código é gerado de acordo com a regra semântica associada àquela
construção.
Oberon: Análise e Síntese
Análise Sintática e Semântica
Oberon: Análise e Síntese
Tratamento de Erros
- Durante o processo de parse, erros encontrados são tratados e o processo de análise é recuperado.
- Quando um erro ocorre, o compilador:
- Utiliza um método de pânico.
- Uso de heurísticas para avançar o texto-fonte para a primeira ocorrência de um símbolo que pode começar uma
construção após a que está sendo analisada atualmente.
- A rotina Mark do scanner inibe erros que ocorrem a menos de 10 caracteres do último erro reportado.
Oberon: Análise e Síntese
Geração de código
- Geração de código é responsabilidade do módulo OCC, que gera o código em binário.
- Rotinas inerentemente dependentes da arquitetura alvo.
- Arquitetura NS-32000
- Um arquivo objeto é gerado no final da compilação do módulo por uma rotina chamada OutCode.
Referências Bibliográficas
- How does Javascript really works?
- Javascript AST, Stackoverflow
- Oberon - Wikipedia
- Wirth, Niklaus. Gutknecht, Jürg. Project Oberon, 2005
- https://codeburst.io/javascript-compiler-optimization-techniques-only-for-experts-58d6f5f958ca
- https://www.ibm.com/docs/en/sdk-java-technology/8?topic=compiler-how-jit-optimizes-code

You might also like