Escolar Documentos
Profissional Documentos
Cultura Documentos
CIÊNCIA DA COMPUTAÇÃO
BANDEIRANTES-PR
2023
Conhecendo a linguagem de
programação Lua.
1. Introdução.
Como base para o entendimento da linguagem Lua, podemos começar pelo histórico
do que chamamos de programação extensiva. A programação extensiva começou como um
movimento de 1960 em um paper do engenheiro Malcolm Douglas McIlroy. O conceito foi
desenvolvido em uma pesquisa que abordava os conceitos de macro.
A macro, em nosso meio é um conceito muito abrangente que ficou popular nessa
época, essa técnica consiste basicamente em uma série de tokens léxicos, árvores de sintaxe
ou caracteres, que no final são traduzidos para uma sequência de tarefas, ou seja, uma
tradução de um pequeno conjuntos de palavras que geram um bloco de código.
● Paráfrase.
A paráfrase define o conceito de trocar algo facilitando sua utilização, por algo
previamente definido, ou que possa vir a ser definido. Levando-nos novamente ao
conceito de macro, onde substituímos um conjunto pré-definido de uma sequência
maior de códigos com uma tradução menor.
● Ortofrase
A ortofrase pode ser definida como a adição de uma capacidade que não está descrita
na linguagem base, ou seja, ela pode por exemplo adicionar a capacidade de uma
comunicação com i/o de uma linguagem que não possibilita isso. Nesse caso a
segunda linguagem deve descrever essa adição em sua documentação. Podemos
traduzir essa técnica como o que comumente denominamos hoje em dia de plug-ins.
● Metáfrase
A metáfrase tem como objetivo criar um sentido a uma parte do código que ainda não
existe, como uma assinatura para ditar suas regras, um conceito que hoje chamamos
de reflexão, utilizada em Java, linguagens que são orientadas a reflexão observam
cápsulas de códigos durante o tempo de execução que podem se adaptar a medida do
objetivo que se é imposto para elas.
Tendo esses conceitos estabelecidos podemos passar para o que se tem hoje em dia
como linguagens de extensão. A definição moderna dessa técnica pode ser separada em
cinco passos:
● Extensão em sintaxe.
De maneira simples, a linguagem base deve permitir a adição e modificação
de conceitos, palavras-chaves. Algumas linguagens permitem essa construção
feita pela usuário, no caso de Lua, sua base é feita em C limpo, ou seja, é um
subconjunto de C++ e ANSI C.
● Extensão em compilação.
Na programação extensiva o compilador não é um programa monolítico que
traduz um código fonte para um binário, necessariamente. Um compilador
extensivo deve ter as seguintes capacidades:
➔ Usar um plug-in ou componente de arquitetura para quase todos os
aspectos de suas funções, que irão traduzir os mesmo.
➔ Determinar qual linguagem (ou variante) está sendo compilada, para
utilizar um plug-in para reconhecer essa linguagem e a validar de
maneira apropriada..
➔ Usar as definições formais da linguagem, para estruturalmente e
sintaticamente, validar arbitrariamente o código fonte.
➔ Dar assistência a validação da semântica por meio da chamada de um
plug-in que é adequado para fazer isso.
➔ Permitir ao usuário ditar qual será o formato final do executável para
que seja utilizado em qualquer sistema (e processador), seja virtual ou
não.
➔ Prover algumas facilidades para a geração de erros que podem ocorrer
na extensão da linguagem base.
➔ Permitir novos tipos de nós em sua árvore de sintaxe.
➔ Permitir novos valores aos nós já existentes na árvore de sintaxe.
➔ Permitir novas pontas (quinas) entre os nós, nas árvores de sintaxe.
➔ Permitir a transformação dos inputs da árvore de sintaxe ou uma parte
de si mesmo em um novo “passe” externo, possibilitando sua
reutilização.
➔ Permitir a tradução dos inputs da árvore de sintaxe ou uma parte de si
mesmo em outro formulário a partir de algum “passe” externo.
➔ Permitir que a informação que está fluindo entre os passes internos e
externos sejam transformadas e traduzidas em suas árvores de sintaxe
para a criação de novas árvores de sintaxe.
1. -
E por fim, quanto ao seu ambiente de execução, Lua é uma linguagem interpretada,
pois como citado anteriormente, ela é uma linguagem de extensão e roda em cima de uma
linguagem base, necessariamente o ANSI C. Nesse sentido o processo de compilação da
linguagem pode ser representado pelo seguinte fluxograma: