Buscar

Documentacao_Luatoy

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 8 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UFBA/DCC 
MATA61 – COMPILADORES 2013.1 
 
Danilo Azevedo 
Danilo Dias 
Ive Andresson Tourinho 
 
Linguagem-Base: LUA 
 
Definição: Luatoy é uma linguagem de programação compilada baseada na linguagem de 
programação LUA (interpretada e dinâmica), Luatoy tem estrutura procedimental, há nela 
construções para descrição de dados, baseadas em tabelas associativas, semântica extensível e 
expressões regulares, linguagem com tipos fortes. 
 
 
http://www.lua.org/cgi-bin/demo 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Sumário: 
 
1. Palavras reservadas 
2. Expressóes regulares para alguns tokens da linguagem* 
3. Simbolos 
4. Comentarios ( expressão regular)* 
5. Sintaxe e Semãntica dos principais comandos ( extensões) 
6. Gramática completa da linguagem base ( VERMELHO corte, VERDE extensões) 
7. “Start” da gramática 
8. Legenda para BNF para expressões regulares 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
Convenções Léxicas Luatoy: 
 Os itens em cor verde indicam extensões à linguagem base(Lua), e os itens em cores 
vermelhas indica os cortes. 
 
 
 
1- Palavras-chave e caracteres: 
As seguintes palavras-chave são reservadas e não podem ser utilizadas como nomes: 
 and break do else elseif end false for function if 
 in local nil not or return repeat return then true until while 
 number string array void switch case const print read io.read void 
As seguintes cadeias denotam outros itens léxicos: 
 + ++ - - - * / % ^ # 
 == ~= <= >= < > = 
 ( ) { } [ ] 
 ; : , . .. ... 
2 - Cortes: 
 
2.1 - Palavras Reservadas, variaveis e strings 
Exluido Case Sensitive para palavras reservadas (equalsIgnoreCase em Java). Uso apenas de aspas 
simples para Strings e podem conter as seguintes seqüências de escape no estilo de C: '\n' (quebra 
de linha), '\\' (barra invertida), '\"' (citação [aspa dupla]) e '\'' (apóstrofo [aspa simples]). Exclui 
todas as regras de aspas longas descritas no manual de referenciada linguagem serão excluidas, 
assim como comentário longo – só serão utilizados comentarios curtos - e regras de constantes. 
Comentarios serão apenas com “--”. Tudo – apenas na mesma linha -que vir depois desta cadeia de 
caracter será entendida como comentario e não será interpretada pelo compilador. 
Excluidos os tipos userdata, thread e table e todas as funcionalidades associadas a estes tipos. 
A estrutura table será substituida por uma nova estrutura chamada array. 
As funções “nativas” da linguagem Lua serão excluidas,exceto funções de entrada e saida, e só 
serão permitidas uso de funções declaradas e definidas localmente ao projeto que a utiliza. 
As funções de conversão automática que a linguagem provê serão excluidas. 
 
2.2 - Declarações 
Variáveis globais e locais serão diferenciadas de acordo com o local onde foram declaradas e só 
serão validas no seus escopo. As palavras reservadas local e global não existirão. 
Consequentemente , as tabelas de ambiente não serão usadas. Atribuições multiplas não serão 
permitidas. 
2.3- Estruturas de Controle 
As estruturas de controle if, while e repeat possuem o significado usual e a sintaxe familiar: 
 comando ::= while exp bloco end 
 comando ::= repeat bloco until exp 
 comando ::= if exp bloco [else bloco] end 
2.4 - Expressões 
Expressões vaarg não serão permitidas. 
2.4.1- O Operador de Comprimento 
O operador de comprimento denotado pelo operador unário #, não estará presente na linguagem 
toy. 
2.5 - Tratamento de Erros 
O tratamento de erros da LuaToy, será feita pelo programador através de estruturas de controle. Os 
vinculos com com a linguagem C no que diz respeito a tratamento de erros, não estará presente na 
nova linguagem. 
2.6 – Metatables 
O recuso de metatables não será ultilizado. 
 
2.7– Ambientes 
Os ambientes também serão excluidos da nova linguagem. 
2.8 - Coleta de Lixo 
Este Recurso não será implementado. 
2.9 - Co-rotinas 
Lua oferece suporte a co-rotinas, também conhecidas como fluxos de execução (threads) 
colaborativos. Em LuaToy esta funcionalidade não será implementada. 
2.10 - A Interface de Programação da Aplicação (API) 
A API C para Lua será substituida por uma nova API LuaToy, desenvolvida nesta mesma linguagem, 
seguindo o padrão de nomenclatura da linguagem base Lua. Bibliotecas auxiliares Lua, não estarão 
presentes na nova linguagem toy. 
 
2.11 – Funções 
O retorno multiplo presente na linguagem-base, não mais existirá; a nova linguagem deverá 
suportar apenas o retorno simples; um só valor poderá ser retornado. 
 
3 - Extensões: 
 
3.1 - Palavras Reservadas, variaveis e strings 
O uso de constantes será marcado com a palavra reservada “const” seguido do nome da constante; 
Variáveis serão declaradas conforme o exemplo: 
 
number k 
const gravity = 10 
 
3.2- Estruturas de Dados 
A linguagem Luatoy terá, como unica estrutura de dados a estrutura array como vetor 
bidimensional. O tipo dos dados que o array ira armazenar deve vir antes da palavra-chave array – 
tipos mistos não serão permitidos. 
Exemplos: 
 array number vet [2] = {2 , 3 } 
3.3 – API Lua 
Mini API LuaToy será criada, com algumas funcões básicas da linguagem original, porém em alguns 
casos com sintáxe diferenciada. 
Exemplo: 
 number result = add(2,3) 
 print(“ compiladores”) 
 
3.4 – Funções 
Diferente da linguagem-base – Lua – as funções em Luatoy devem ser tipadas; seu tipo de retorno 
deve ser especificado na implementação.Os tipos dos parametros também devem ser 
especificados. 
 number function printer(number c) 
 string b = “olámundo” 
 print(b.c) 
 return c 
 end 
 
3.5 – Outros Exemplos 
3.5.1 - Comandos de Seleção 
 
 if b 
 print(“b diferente de nil”) 
 if a 
 print(“b igual a nil”) 
 else 
 print(“saindo”) 
 end 
 
 switch exp 
 case 1: 
 print (“bloco 1”) 
 case 2: 
 print (“bloco 2”) 
 break 
 
3.5.2 - Comandos de interação 
 
 while expr 
 print (“bloco ”) 
 end 
 
 repeat 
 i=i–1 
 until (i == 0) 
 
3.5.3 – Exemplos de Programas 
Ex enquanto: 
while i == 10 
 if(( i / 2) == 0) 
 print (“ argumento :” i) 
 end 
i = i +1 
 end 
 
Ex repita até: 
 repeat 
 i=i–1 
 until (i == 0) 
 
Ex QuickSort: 
void function quickSort(number array v[], number ini, number fim) 
 number i = ini 
number j = fim 
 number pivo = v[floor((ini + fim)/2)] 
 
 while i <= j 
 while (v[i] < pivo) 
 i=i+1 
 end 
 
 while (v[j] > pivo) 
 j=j-1 
 end 
 
 if (i<=j) 
 v[i] = v[j] 
v[j]= v[i] 
 i = i+1 
j= j-1 
 end 
 end 
 
 if j > ini 
 quickSort(v, ini, j) 
 end 
 if i < fim 
 quickSort(v, i, fim) 
 end 
end 
obs: a função floor (função matemática teto) terá que ser implementada já que a linguagem ainda 
não dá suporte a bibliotecas matemáticas externas. 
 
8 - Sintaxe completa Luatoy 
 
 
programa::= {comando [`;´]} [ultimocomando [`;´]] 
 
bloco::= programa 
 
comando::= listarvariaveis `=´ listarexpressao |while expressao bloco end | repeat bloco until 
expressao |if expressao bloco [else bloco ] end |function nomedafuncao corpodafuncao end 
 
ultimocomando ::= return [listarexpressao] | break 
 
nomedafuncao ::= Nome {`.´ Nome} [`:´ Nome] 
 
listarvariaveis ::= tipo variavel {`,´ variavel} 
 
variavel ::= Nome | expprefixo `[´ expressao `]´ | expprefixo `.´ Nome 
 
 tipo ::= boolean | number [ array] | string [ array] | array | // float e int pertence a uma só classe NUMBER 
 
 listarexpressao ::= {expressao `,´} expressao 
 
 funcao ::= function corpodafuncao 
 
expressao ::= nil | false | true | numero | cadeia | `...´ | funcao | expprefixo | expressao operadorexpressao | operador expressao 
 
 expprefixo ::= variavel | `(´ expressao `)´ 
 
 argumentos ::= `(´ [listarexpressao] `)´ | cadeia 
 
corpodafuncao ::= `(´ [listarparametros] `)´ bloco 
 
listarparametros ::= listadenomes [`,´ `...´] | `...´ 
 
listadenomes ::= Nome {`,´ Nome} 
 
operador ::= `+´ | `-´ | `*´ | `/´ | `^´ | `..´ |`<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´ |and | or | not 
 
 
9 - Start da Linguagem 
 
Assim como a linguagem-base, a Luatoy tem como start qualquer palavra reservada pertencente a 
gramática especificada. Podemos começar qualquer script Luatoy com uma declaração de variavel, 
uma declaração/implementação de função, um comando de repetição, desde que seja válido. O 
codigo não deve começar, por exemplo com uma chamada de função , ou atribuição de valor à 
uma variavel que não foi declarada anteriormente. 
 
10 - Legendas para BNF para expressões regulares 
 
Letra  a-zA-Z 
Digito  0-9 
Identificador  Letra (Letra | Digito)* 
Numero  Digito+(Digito*[‘.’]Digito+) 
Operador  `+´ | `-´ | `*´ | `/´ | `^´ | `..´ |`<´ | `<=´ | `>´ | `>=´ | `==´ | `~=´| `,´ |and | or | not 
PalavrasReservadas  and | break | else | end | function | if | nil | not | or | return | repeat | true 
| until | while | number | string | array | void | switch | case | const 
Token  Numero | Identificador | Operador | PalavrasReservadas 
Separador  / | \n | \t | ‘ ’ | “ ” 
 
Obs: na linguagem Luatoy, é preciso verificar sobre a procedência de comando / por linha visto que 
foi retirado algumas palavras reservadas que iniciavam este comando a exemplo temos o “if then 
end” (LUA), Luatoy foi retirado o “then” provavelmente temos que substituir o “then” e outros 
similares por “\n” quebra de linha, tipo a declaração de variáveis ocorre o mesmo tem que ser uma 
variável por linha.

Outros materiais

Materiais relacionados

Perguntas relacionadas

Materiais recentes

Perguntas Recentes