noc oesde lua
TRANSCRIPT
-
8/3/2019 Noc Oesde Lua
1/55
Noes de Lua 3.1
Noes bsicas da linguagem de programao Lua
-
8/3/2019 Noc Oesde Lua
2/552
NDICE
Lua 3.1................................................................................................................................................................................................................11. Copyright.......................................................................................................................................................................................4
2. Viso Geral....................................................................................................................................................................................5
3. Ambiente de Programao.......................................................................................................................................................6
4. Variveis e tipos...........................................................................................................................................................................7
Tipo nil............................................................................................................................................................................................7
Tipo number....................................................................................................................................................................................8
Tipo string.......................................................................................................................................................................................8
Tipofunction ...................................................................................................................................................................................9
Tipo userdata..................................................................................................................................................................................9
Tipo table........................................................................................................................................................................................9
5. Atribuio e operadores .........................................................................................................................................................10
Atribuio simples e mltipla...............................................................................................................................................10
Operadores................................................................................................................................................................................. 11
6. Controle de fluxo e variveis locais....................................................................................................................................14
Tomadas de deciso com if................................................................................................................................................... 14
Laos iterativos com tomada de deciso no incio (while)............................................................................................. 15
Laos iterativos com tomada de deciso no fim (repeat)............................................................................................... 15Declarao de variveis locais..............................................................................................................................................16
7. Funes.......................................................................................................................................................................................17
8. Tabelas (vetores associativos)...............................................................................................................................................20
Criao de tabelas..................................................................................................................................................................... 20
Inicializao de tabelas via indexao consecutiva.........................................................................................................22
Inicializao de tabelas via atribuio de campos...........................................................................................................22
Inicializao mista....................................................................................................................................................................23
9. Tratamento de erros................................................................................................................................................................24
10. Funes pr-definidas.............................................................................................................................................................25
dofile(filename)..........................................................................................................................................................................25
dostring( string [, errmethod]).................................................................................................................................................. 25
next( table, index )....................................................................................................................................................................... 26
nextvar( name )........................................................................................................................................................................... 27
type( value ).................................................................................................................................................................................. 27
-
8/3/2019 Noc Oesde Lua
3/553
tonumber( e ).............................................................................................................................................................................. 28
tostring( e ).................................................................................................................................................................................. 28
print( expr1, expr2, ... ).............................................................................................................................................................. 29
error( msg ) .................................................................................................................................................................................. 29
call(func, arg, [retmode] ).............................................................................................................................................................30assert( value )............................................................................................................................................................................... 30
11. Bibliotecas de funes ............................................................................................................................................................32
Biblioteca de manipulao de strings ................................................................................................................................... 32
Biblioteca de funes matemticas.....................................................................................................................................39
Biblioteca de funes de entrada e sada...........................................................................................................................40
Apndice. Relevncia de Lua.......................................................................................................................................................... 47
Relevncia Tecnolgica.......................................................................................................................................................... 47
Relevncia Acadmica ............................................................................................................................................................ 49
-
8/3/2019 Noc Oesde Lua
4/554
1. Copyright
O texto aqui includo foi extrado em parte dos documentos Programando em
Lua Teoria e Prtica (verso 2.1) e A Linguagem de Extenso Lua escrito porWaldemar Celes Filho, Luiz Henrique de Figueiredo e Roberto Ierusalimschy.Atualizaes para a verso 3.1 de Lua foram feitas por Roberto de Beauclair Seixas,baseado no texto original de Anna Magdalena Hester. Este documento estdisponvel em:
ftp:/ / ftp.tecgraf.puc-rio.br/ pub/ lua/ nocoes-3.1.pdfhttp:/ / www.tecgraf.puc-rio.br/ lua/ ftp/ nocoes-3.1.pdf
Lua uma linguagem de programao de distribuio aberta, gratuita. A
implementao descrita aqui est disponvel em:ftp://ftp.tecgraf.puc-rio.br/pub/lua/lua-3.1.tar.gzhttp://www.tecgraf.puc-rio.br/lua/
Copyright de Lua:
Copyright (c) 1994-1998 TeCGraf, PUC-Rio. Written by Waldemar Celes Filho,Roberto Ierusalimschy, Luiz Henrique de Figueiredo. All rights reserved.
Permission is hereby granted, without written agreement and without license orroyalty fees, to use, copy, modify, and distribute this software and itsdocumentation for any purpose, subject to the following conditions:
The above copyright notice and this permission notice shall appear in allcopies or substantial portions of this software.
The name "Lua" cannot be used for any modified form of this software that doesnot originate from the authors. Nevertheless, the name "Lua" may and should beused to designate the language implemented and described in this package,even if embedded in any other system, as long as its syntax and semanticsremain unchanged.
The authors specifically disclaim any warranties, including, but not limitedto, the implied warranties of merchantability and fitness for a particularpurpose. The software provided hereunder is on an "as is" basis, and theauthors have no obligation to provide maintenance, support, updates,enhancements, or modifications. In no event shall TeCGraf, PUC-Rio, or theauthors be liable to any party for direct, indirect, special, incidental, orconsequential damages arising out of the use of this software and itsauthors be liable to any party for direct, indirect, special, incidental, orconsequential damages arising out of the use of this software and itsdocumentation.
-
8/3/2019 Noc Oesde Lua
5/555
2. Viso Geral
Lua uma linguagem de extenso projetada para ser usada como linguagem de
configurao, acoplada a um programa hospedeiro (escrito na linguagem deprogramao C). Aplicaes em geral podem acoplar cdigos em Lua, permitindoprototipagem rpida e acesso programvel pelo usurio tecnologia implementadapela aplicao.
No entanto bastante comum o uso de Lua como um interpretador stand-alone.Nesse enfoque o cdigo Lua a linha de execuo principal, o programador escrevetodo o cdigo da aplicao em Lua e no precisa ter conhecimento da API em C. Oambiente de programao formado pelas funes pr-definidas de Lua, pelasbibliotecas padro da linguagem e por eventuais pacotes de extenso adicionados.
CGILua essencialmente um interpretador Lua com uma srie de pacotes deextenso, de forma que seu ambiente de programao capaz de prover diversasfuncionalidades teis para o desenvolvimento de scripts CGI e pginas HTMLdinmicas.
Lua prov as construes fundamentais para definio de funes e controle de fluxo( if-elseif-else-end, while-do-end, repeat-until ), um poderoso tipo para descrio de estruturasde dados, a tabela, e facilidades para manipulao de strings em especial, os recursosdepattern matching.
Todos os mecanismos e recursos citados acima so facilmente acessados atravs deuma sintaxe simples, semelhante de Pascal. Lua garante ainda uma programao
com alto nvel de abstrao, j que o programador no precisa se preocupar comdetalhes como declarao de variveis e gerenciamento de memria. Com estruturasinternas dinmicas e coleta automtica de lixo, o programador usa livremente asdiversas opes de estruturao de dados, e deixa a cargo da prpria linguagem astarefas de re-alocao e liberao de memria.
Este texto apresenta, passo a passo, as principais caractersticas da linguagem deprogramao Lua. A abordagem concentrada na utilizao stand-alone da linguagem,ignorando a existncia de um programa hospedeiro escrito em C. O texto pretende terum carter didtico; alguns recursos da linguagem so omitidos, em especial omecanismo de tags methods, os contrutores de tipos, a API C e a interface para debug. A
definio oficial da linguagem est descrita no seu manual de referncia, disponvel on-line em http://www.tecgraf.puc-rio.br/lua/manual.
Nas sees subseqentes, so apresentadas as diversas caractersticas da linguagemLua, atravs de uma discusso detalhada e ilustrada com exemplos de programao.
-
8/3/2019 Noc Oesde Lua
6/556
3. Ambiente de Programa o
Todos os comandos e construes de Lua so executados em um nicoambiente global.
Este ambiente, que guarda todas as variveis globais e definies de funes, automaticamente inicializado quando o interpretador ativado e persiste enquanto ointerpretador estiver em execuo.
O ambiente global de Lua pode ser manipulado por cdigos escritos em Lua ou porbibliotecas C que utilizem funes da interface C-Lua. Cdigos Lua so compostospor comandos globais e definies de funes. Um mdulo Lua um arquivo ouuma cadeia de caracteres contendo cdigos Lua. Quando se carrega um mdulo Lua,os cdigos so compilados para uma linguagem de mquina interna, para seremposteriormente executados. Os cdigos globais (que no esto dentro de funes)so automaticamente executados ao fim da compilao do mdulo. Os cdigos de
funes so armazenados e executados na chamada das respectivas funes. Emoutras palavras, Lua usa uma estratgia hbrida de compilao e interpretao, queevita o custo de desempenho de interpretao textual direta, ao mesmo tempo quemantm a versatilidade de um ambiente interpretativo.
Pode-se carregar diversos mdulos inicialmente independentes. Todos, no entanto,so carregados dentro do nico ambiente global de Lua. Portanto, a ordem com quese carrega diversos mdulos importante, tendo em vista que os comandos globaisde cada mdulo so executados imediatamente aps sua compilao.
No existe uma formatao rgida para o cdigo Lua, isto , a linguagem permitecomandos em qualquer coluna do texto, podendo ocupar diversas linhas. Os
comandos de Lua podem opcionalmente ser separados por ponto e vrgula (;).Comentrios iniciam-se com traos duplos (--) e persistem at o final da linha.
-
8/3/2019 Noc Oesde Lua
7/557
4. Variveis e tipos
As variveis globais1 de Lua no precisam ser declaradas. vlido, por exemplo,
escrever o comando
a = 2.3
sem necessidade prvia de declarar a varivel global a. Uma caractersticafundamental de Lua que as variveis no tm tipo: os tipos esto associados aos dadosarmazenados na varivel. Assim, o cdigo acima armazena em a um dado do tiponumrico, com valor 2.3, enquanto, aps o comando
a = "Linguagem Lua"
a varivela passa a armazenar um dado do tipo cadeia de caracteres (string).
Os dados em Lua podem ser de sete tipos bsicos: nil, number, string,function, cfunction,userdata e table, descritos a seguir.
Tipo nil
O tipo nil representa o valor indefinido. Todas as variveis ainda no inicializadasassumem o valor nil. Assim, se o cdigo:
a = b
for encontrado antes de qualquer atribuio varivel b, ento esta assumida comocontendo o valor nil, o que significa que a tambm passa a armazenar nil,independentemente do valor anteriormente armazenado em a. A palavra reservadanil pode ser usada na programao para expressar o valor do tipo nil. Com isto,pode-se escrever:
a = nil
que atribui o valor nil varivela (a partir deste ponto, como se a varivel a aindano tivesse sido atribuda).
Pode-se testar se uma varivel foi inicializada comparando o seu valor comnil
:
1Lua tambm permite a definio de variveis locais (veja pg. 16).
-
8/3/2019 Noc Oesde Lua
8/558
a == nil
Tipo number
O tipo number representa valores numricos. Lua no faz distino entre valoresnumricos com valores inteiros e reais. Todos os valores numricos so tratadoscomo sendo do tipo number. Assim, o cdigo
a = 4
b = 4.0c = 0.4e1
d = 40e-1
armazena o valor numrico quatro nas variveis a, b, c e d.
Tipo string
O tipo stringrepresenta cadeia de caracteres. Uma cadeia de caracateres em Lua definidapor uma seqncia de caracteres delimitadas por aspas simples (' ') ou duplas(" "). A seqncia de caracteres deve estar numa mesma linha de cdigo. Dentro deum string, so interpretadas as seguintes seqncias de escape:
\n new line
\t tab
\r carriage return
\v vertical tab
\f form feed
\xxx caracter com cdigo decimalxxx
\a bell
\b backspace
\ aspas duplas ()
\ aspas simples ()
\\ barra invertida (\)
Por simplicidade, quando a cadeia de caracteres delimitada por aspas duplas, pode-se usar aspas simples no seu contedo, sem necessidade de trat-las como seqnciasde escape. Entretanto, para reproduzir na cadeia de caracteres as aspas usadas comodelimitadoras, necessrio usar os caracteres de escape. Assim, so vlidas eequivalentes as seguintes atribuies:
s = "Olho d'agua"
s = 'Olho d\'agua'
Colchetes duplos ([[ ]]) tambm podem ser utilizados como delimitadores destrings. Diferentemente dos delimitadores aspas simples e aspas duplas, essedelimitador no interpreta sequncias de escape e tolera que a string tenha quebras delinhas e pode conter strings com delimitadores aninhados. Exemplo:
-
8/3/2019 Noc Oesde Lua
9/559
s = [[Esse um textoque atravessa
mais de uma linha e contm umastring aninhada: [[aninhada]] no final !]]
Tipo function
Funes em Lua so consideradas valores de primeira classe. Isto significa quefunes podem ser armazenadas em variveis, passadas como parmetros para outrasfunes, ou retornadas como resultados. A definio de uma funo equivale aatribuir a uma varivel global o valor do cdigo que executa a funo (seo 7). Estavarivel global passa a armazenar um dado do tipo function. Assim, adiantando umpouco a sintaxe de definio de funes, o trecho ilustrativo de cdigo abaixoarmazena na varivel func1 um valor do tipofunction:
function func1 (...)
...
end
que pode posteriormente ser executada atravs de uma chamada de funo:
func1(...)
Tipo userdata
O tipo userdata permite armazenar numa varivel de Lua um ponteiro qualquer de C.Este tipo corresponde ao tipo void* de C e s pode ser atribudo ou comparado
para igualdade a outro valor de mesmo tipo em Lua. Este tipo muito til paraprogramadores de aplicao que fazem a ligao Lua-C, mas no manipulado porusurios que programam somente em Lua, pois no possvel criar dados deste tipodiretamente em Lua.
Tipo table
O tipo table (tabela) o tipo mais expressivo da linguagem. Este tipo implementa oschamados vetores associativos, que permitem indexao por valores de qualqueroutro tipo, com exceo do tipo nil. As tabelas em Lua permitem a construo devetores convencionais, listas e records numa mesma estrutura. Tabelas devem serexplicitamente criadas. Adiantando a sintaxe de criao de uma tabela, o cdigo
a = { }
cria uma tabela vazia e armazena em a este valor. Novos campos podem seradicionados posteriormente a esta tabela. Tabelas so detalhadamente discutidas naseo 8.
-
8/3/2019 Noc Oesde Lua
10/5510
5. Atribuio e operadores
Conforme mencionado, as variveis em Lua no tm tipos; elas apenas armazenam
valores de diferentes tipos. Diz-se que as variveis so tipadas dinamicamente.Quando se atribui um valor a uma varivel, armazenado na varivel um valor de umdeterminado tipo. Se feita uma outra atribuio mesma varivel, ela passa aarmazenar o valor correspondente segunda atribuio. Portanto, antes da segundaatribuio, a varivel armazenava um valor de um determinado tipo; aps a segundaatribuio, a varivel passa a armazenar um valor de um tipo possivelmente diferente.
Quando se efetua operaes sobre os valores armazenados nas variveis, a linguagemverifica, em tempo de execuo, a validade dos tipos armazenados para a operaoem questo. Por exemplo, ao tentar efetuar uma operao de soma sobre umavarivel que armazena o valor de uma funo, a linguagem reporta um erro de
execuo2
.
Atribuio simples e mltipla
Os exemplos das sees anteriores ilustraram a sintaxe de atribuio simples. Luatambm permite atribuio mltipla. possvel atribuir diversas variveis em ummesmo comando. Por exemplo, o cdigo
s, v = "Linguagem Lua", 2
atribui a cadeia de caracteres Linguagem Lua varivel s e o valor numrico 2
varivel v. Quando o nmero de variveis listadas esquerda do sinal de igualdade diferente do nmero de resultados direita da igualdade, a linguagemautomaticamente ajusta as listas: ou preenchendo as ltimas variveis da esquerdacom valores nils ou descartando os ltimos resultados da direita. Assim, o cdigo
a, b = 2c, d = 2, 4, 6
atribui 2 varivel a, nil varivel b, 2 varivel c, 4 varivel d, e despreza ovalor 6.
A possibilidade de atribuio mltipla permite a troca de valores armazenados em
duas variveis com um nico comando. Portanto
a, b = b, a
faz com que a receba o valor anteriormente armazenado por b e que b receba ovalor anteriormente armazenado por a, sem necessidade de variveis temporrias.
2Este comportamento pode ser alterado usando tagmethods (veja o Manual de Referncia de Lua).
-
8/3/2019 Noc Oesde Lua
11/5511
Operadores
A linguagem Lua prov os operadores aritmticos, relacionais e lgicos usuais. Existe,ainda, um operador para concatenao de cadeias de caracteres. Lua possui tambmalgumas regras de converso automtica de tipos.
Operadores aritmticos
Lua dispe dos operadores aritmticos usuais: os operadores binrios so + (adio),- (subtrao), * (multiplicao) e / (diviso); e o operador unrio -. permitido ouso de parnteses para alterar a precedncia dos operadores. Portanto, so vlidas asexpresses abaixo:
a = 2 * 3.4
b = (a + 1) / 3.4c = 2 * (-3)
Os operadores aritmticos s podem ser aplicados sobre valores do tipo number(oustrings que possam ser convertidas para nmeros; veja tpico "Coero" nessa mesmaseo).
O operador binrio ^, com precedncia superior aos demais, pode ser implementadoatravs do mecanismo de tag methods (veja o Manual de Referncia de Lua). Abiblioteca de funes matemticas distribuda com a linguagem implementa aoperao de exponenciao usual para este operador.
Operadores relacionais
Os operadores relacionais disponveis em Lua so:
< menor que
> maior que
= maior que ou igual a
== igual a
~= diferente de
Os operadores relacionais retornam o valor nil quando o resultado falso e o valor1 quando o resultado verdadeiro. Assim, as atribuies
a = 4 < 3b = 4 > 3
armazenam em a o valor nile em b o valor 1.
Os operadores >, =,
-
8/3/2019 Noc Oesde Lua
12/5512
O operador de igualdade (==) primeiro compara se os tipos dos dados comparadosso iguais. Caso no sejam, retorna-se nil. Se os valores tiverem o mesmo tipo,compara-se a igualdade entre os valores. A igualdade de nmeros e cadeias decaracteres feita da forma usual. Tabelas, funes e userdata so comparados porreferncia, isto , duas tabelas so consideradas iguais somente se as duas forem amesma tabela, e no se as duas contm armazenados os mesmos dados.
O operador de no-igualdade (~=) a negao do operador de igualdade.
Operadores lgicos
Os trs operadores lgicos disponveis so:
and conjuno
or disjuno
not negao
Conjunes ou disjunes mltiplas so avaliadas da esquerda para a direita; aavaliao pra assim que a veracidade ou falsidade do resultado for conhecida. Assim,o cdigo
a = 23
b = 15c = a < 20 or b > a
d = a < 20 and b > a
resulta no valor nil em c e d, sendo que, para avaliar d, no necessrio avaliarb>a, pois o resultado j era conhecido tendo em vista que a expresso era conectadacom o operador lgico and e a
-
8/3/2019 Noc Oesde Lua
13/5513
Coero
Lua prov alguns mecanismos para converso automtica entre tipos. Qualqueroperao aritmtica aplicada sobre cadeias de caracteres tenta converter a cadeia decaracteres no valor numrico correspondente. Mais especificamente, se os caracteresda string representam um valor numrico, ento este valor numrico assumido na
operao. Quando a converso no possvel, a linguagem reporta um erro deexecuo. Portanto, o cdigo
b = "53"c = 2 + b
resulta no armazenamento do valor numrico 55 na varivel c, tendo em vista que acadeia de caracteres 53 foi convertida para o valor numrico 53 antes da operao (avarivel b continua armazenando uma varivel do tipo string).
Por outro lado, quando utilizamos um valor numrico onde espera-se uma cadeia decaracteres (e.g., numa concatenao), o valor numrico convertido para a cadeia de
caracteres correspondente. Se o valor numrico for inteiro, ele escrito numa cadeiade caracteres sem ponto decimal ou expoente. Se o valor contiver parte fracionria, oresultado pode conter ponto decimal e expoente3. Assim, o cdigo
print("resultado: " .. 23)
tem como sada a cadeia de caracteres
resultado: 23.
Existe uma funo pr-definida, tonumber, que faz explicitamente a converso deuma cadeia de caracteres para a forma numrica, se posssvel. Para converter
explicitamente um valor numrico numa cadeia de caracteres, existe a funotostring (seo 10).
Ordem de precedncia dos operadores
Os operadores tm a ordem de precedncia usual. Conforme mencionado, possvelo uso de parnteses para mudar a ordem natural de avaliao de uma expresso. Alista abaixo apresenta os operadores, em ordem decrescente de precedncia:
^not -(unrio)
* /+ -
..
< >
-
8/3/2019 Noc Oesde Lua
14/5514
6. Controle de fluxo e variveis locais
Lua possui os mecanismos usuais para controle de fluxo. Estes controladores
agrupam diversos comandos em blocos que podem ou no ser executados uma oumais vezes. Lua tambm permite a declarao de variveis locais. Estas variveisdeixam de existir ao final do bloco onde foram declaradas.
Tomadas de deciso com if
O comando de deciso bsico de Lua o if. Sua forma pode ser:
ifexprthen
bloco
end
ou
ifexprthen
bloco1...
else
bloco2...
end
ou ainda
ifexpr1then
bloco1elseifexpr2then
bloco2
...
elseifexpr Nthen
bloco N
else
bloco N+1
end
Na primeira forma, o bloco de comandos representado por bloco executado se aexpresso exprproduzir um valor diferente de nil. Na segunda forma, bloco2ser executado se expr produzir o valor nil. Caso contrrio, bloco1 serexecutado. A terceira forma ilustra a possibilidade de tomada de deciso entrediversas alternativas usando-se o comando if-then-elseif-then-...-else-end. No cdigoilustrado,bloco1 executado se expr1 produzir um valor verdadeiro (diferente denil),bloco2 executado de expr2 for verdadeiro, ..., e bloco n+1 executadose todas as expresses forem falsas (i.e., iguais a nil).
-
8/3/2019 Noc Oesde Lua
15/5515
Laos iterativos com tomada de deciso no incio (while)
Lua possui duas alternativas para construo de laos iterativos: while e repeat. Aprimeira delas permite que a tomada de deciso (se os comandos do lao devem ouno ser executados) seja feita no incio do bloco. Sua forma geral :
whileexprdobloco
end
Isto , enquanto a expresso exprproduzir um valor verdadeiro (diferente de nil),os comandos do bloco so executados.
Para exemplificar, considere o cdigo abaixo que calcula o fatorial de um nmero(assumido como inteiro positivo) armazenado na varivel n:
f = 1 valor do fatorial
i = n controle do lao
while i > 0 dof = f * i
i = i 1end
Ao final da execuo do cdigo acima, f armazena o valor do fatorial de n e iarmazena o valor zero (condio de fim de execuo do lao).
Laos iterativos com t omada de deciso no fim (repeat)
A construo de um lao com tomada de deciso no fim pode ser feita atravs do
comando repeat. Sua forma geral :
repeat
bloco
untilexpr
Nesta construo, o bloco de comandos executado pelo menos uma vez (pois o testede deciso s ocorre no final do lao) e repetido at se alcanar o valor verdadeiropara a expresso. O mesmo exemplo de clculo de fatorial pode ser escrito:
-
8/3/2019 Noc Oesde Lua
16/5516
f = 1 valor do fatorial
i = 1 controle do laorepeatf = f * i
i = i + 1until i > n
Declarao de variveis locais
Lua permite que se defina explicitamente variveis de escopo local. A declarao deuma varivel local pode ocorrer em qualquerlugar dentro de um bloco de comandos,e seu escopo termina quando termina o bloco no qual foi declarada. A declarao deuma varivel local com mesmo nome de uma varivel global obscurecetemporariamente (i.e., dentro do bloco da declarao local) o acesso varivel global.Quando o programador escrever o nome da varivel, estar se referindo varivellocal.
Variveis locais podem ser inicializadas na declarao seguindo a sintaxe deatribuies. Para exemplificar, considere o cdigo abaixo:
a = 2 varivel global assumindo o valor 2if a > 0 then
local b = a declara-se uma varivel local que recebe o valor de a (2)
a = a + 1 incrementa a varivel global a de uma unidade
local a = b declara-se uma varivel local a que recebe o valor de b
print(a) a refere-se a varivel local, logo imprime-se o valor 2
end fim do bloco e do escopo de a e b locais
print(a) a refere-se varivel global, logo imprime-se o valor 3
Pode-se ainda declarar e inicializar vrias variveis locais num mesmo comando:
local a, b, c = 2, 5+6, -3
Neste caso, a recebe 2, b recebe 11 e c recebe -3. Variveis locais no inicializadasassumem o valor nil.
-
8/3/2019 Noc Oesde Lua
17/5517
7. Funes
A linguagem Lua trata funes como valores de primeira classe. Isto quer dizer que
funes podem ser armazenadas em variveis, podem ser passadas como parmetrospara outras funes e podem ser retornadas como resultados de funes. Quandodefinimos uma funo em Lua, estamos armazenando na varivel global cujo nomecorresponde ao nome da funo o cdigo de mquina interno da funo, quepode posteriormente ser executado atravs de chamadas para a funo.
Funes em Lua podem ser definidas em qualquer lugar do ambiente global. A formabsica para definio de funes
functionnome ( [lista-de-parmetros] )
bloco de comandos
end
onde nome representa a varivel global que armazenar a funo. Pode-se forneceruma lista de parmetros que so tratados como variveis locais da funo einicializados pelos valores dos argumentos na chamada da funo.
A chamada da funo segue a forma bsica
nome ( [lista-de-argumentos] )
isto , o nome da funo seguido de abre e fecha parnteses, que pode ou noconter uma lista de argumentos. Se nome no for uma varivel que armazena umvalor de funo (i.e., do tipo function), Lua reporta um erro de execuo (TAGMETHODS). Se presente, a lista de argumentos avaliada antes da chamada dafuno. Posteriormente, os valores dos argumentos so ajustados para a atribuiodos parmetros (a regra de ajuste anloga a uma atribuio mltipla onde osparmetros recebem os valores dos argumentos).
Lua passa parmetros por valor. Isto quer dizer que quando se altera o valor de umparmetro dentro de uma funo, altera-se apenas o valor da varivel localcorrespondente ao parmetro. O valor da varivel passada como argumento nachamada da funo permanece inalterado.
Funes em Lua podem retornar zero, um ou mais valores atravs do comando
return. A possibilidade de retorno mltiplo evita a necessidade de passagem deparmetros por referncia. Quando, durante a execuo de uma funo, encontra-seo comando return, a execuo da funo terminada e o controle volta para oponto imediatamente posterior chamada da funo. O comando return pode virseguido de uma lista de expresses; sua forma geral
-
8/3/2019 Noc Oesde Lua
18/5518
return [lista-de-expresses]
Por razes sintticas, o comando return deve sempre ser o ltimo comando deum bloco de comandos. Deste modo, evita-se a ocorrncia de comandosinalcanveis (tendo em vista que comandos aps return nunca sero executados).Se return no for o ltimo comando do bloco, Lua reporta um erro de sintaxe.
Os valores retornados por uma funo so ajustados para a atribuio na linha quefaz a chamada. Para exemplificar, supe-se uma funo que incrementa os valores deum ponto cartesiano (x, y):
function translada (x, y, dx, dy)return x+dx, y+dy
end
Considera-se, agora, que a chamada da funo feita por:
a, b = translada(20, 30, 1, 2)
Assim, a recebe o valor 21 (=20+1) e b recebe o valor 32 (=30+2). Se a chamadafosse
a = translada(20, 30, 1, 2)
ento o segundo valor retornado seria desprezado, e a receberia o valor 21. Poroutro lado, a atribuio:
a, b, c = translada(20, 30, 1, 2)
faria a=21, b =32 e c = nil.
importante notar que uma chamada de funo que retorna mltiplos valores nopode estar no meio de uma lista de expresses. Por razes de ajustes de valores ematribuies mltiplas, se uma funo estiver sendo chamada no meio de uma lista deexpresses, s se considera o primeiro valor retornado. Para exemplificar, duassituaes sutilmente diferentes so analisadas; considera-se inicialmente a chamada defuno abaixo:
a, b, c = 10, translada(20, 30, 1, 2)
que faz com que a receba o valor 10, b o valor 21 e c o valor 32. Neste caso, ofuncionamento o esperado, tendo em vista que a chamada da funo a ltimaexpresso numa lista de expresses. No entanto, se o cdigo fosse
a, b, c = translada(20, 30, 1, 2), 10
ento teria-se resultados surpreendentes, j que a chamada da funo est no meio deuma lista de expresses. Conforme mencionado, independentemente do nmero devalores retornados pela funo, considera-se apenas o primeiro (no caso, o valor 21).O valor 32 retornado pela funo perdido durante o ajuste. Assim, teramos como
-
8/3/2019 Noc Oesde Lua
19/5519
resultado o valor 21 armazenado em a e o valor 10 armazenado em b. A varivel c,ento, receberia o valor nil, pois no se tem outra expresso aps a constante 10.
possvel definir funes em Lua que aceitem nmero varivel de argumentos. Paratanto necessrio acrescentar lista de argumentos da definio a indicao ...(trs pontos seguidos). Uma funo definida dessa forma no faz ajuste do nmerode parmetros em relao ao nmero de argumentos. Ao invs disso, quando afuno chamada os argumentos extras so colocados em um parmetro implcitode nome arg. Esse parmetro sempre inicializado como uma tabela, onde ocampo n contm o nmero de argumentos extras e os campos 1, 2, ... os valoresdos argumentos, sequencialmente.
Para exemplificar, duas diferentes definies de funes so apresentadas:
function f(a, b) end
function g(a, b, ...) end
Os seguintes mapeamentos de argumentos a parmetros seriam efetuados nachamada dessas funes:
CHAMADA PARMETROS
f(3) a=3, b=nilf(3, 4) a=3, b=4
f(3, 4, 5) a=3, b=4
g(3) a=3, b=nil, arg={ n=0 }
g(3, 4) a=3, b=4, arg={ n=0 }g(3, 4, 5, 8) a=3, b=4, arg={ 5,8; n=2 }
-
8/3/2019 Noc Oesde Lua
20/5520
8. Tabelas (vetores assoc iativos)
Tabelas em Lua so vetores associativos, isto , vetores que podem ser indexados por
valores numricos, por cadeias de caracteres ou por qualquer valor dos demais tiposda linguagem. Vetores s no podem ser indexados pelo valor nil. Esta flexibilidadena indexao de tabelas a base do mecanismo existente em Lua para descrio deobjetos.
Criao de tabelas
Uma tabela deve ser explicitamente criada antes de ser usada. A expresso { } criauma tabela. Assim, o cdigo
t = { }
cria uma tabela vazia e a armazena na varivel de nome t. A partir deste ponto, avarivel t armazena um valor do tipo table e pode ento ser indexada. vlidoescrever, por exemplo:
t[1] = 13t[45] = 56
Observa-se que no h limite para a indexao da tabela. Se necessrio, Luaautomaticamente redimensiona a tabela. Alm disso, tambm vlido escrever:
t["nome"] = t[1] + 2
Isto , a tabela t indexada pela valor cadeia de caracateres nome recebe o valorarmazenado na tabela t indexada pelo valor 1 (que 13) somado com o valor 2.Isto , t indexado por "nome" vale 15.
Tambm seria vlido escrever
t[t] = 5
que significa que a tabela t indexada pelo valor de t (que a prpria tabela)armazena o valor numrico 5. (Parece confuso, mas vlido!)
Quando indexamos uma tabela por uma cadeia de caracteres, podemos usar umanotao com ponto (.). Por exemplo, escrever:
t["versao"] = 3.1
equivalente a escrever:
-
8/3/2019 Noc Oesde Lua
21/5521
t.versao = 3.1
Esta notao mais clara; seu uso recomendado sempre que possvel. Se a cadeiade caracteres for um nome composto, esta simplificao no possvel. Porexemplo:
t["Rio de Janeiro"] = 1994
no tem equivalncia com uso de ponto para indexao.
Da mesma forma que armazenamos valores numricos em tabelas, poderamos terarmazenado outros valores. Todas as atribuies abaixo so vlidas para a tabela t:
t[10] = "exemplificando"
t[2.34] = 12t.tabela, t[0] = 3, 12
t[-234] = 0
a = "Lua"t[a] = 5
Esta ltima atribuio merece uma anlise cuidadosa. Considerando que a umavarivel que armazena o valor Lua, a ltima atribuio armazena 5 no campo (oundice) Lua da tabela. Escrever t[a] diferente de t.a, que equivalentea t["a"]! Assim, no exemplo, t[a] equivalente a t.Lua.
O valor de uma tabela para qualquer ndice cuja indexao ainda no foi inicializada nil. Assim, considerando somente as atribuies acima, o comando
print(t[999])
imprimir o valor nil, pois o campo 999 de t no foi inicializado.
possvel armazenarmos outras tabelas em tabelas, criando conjuntosmultidimensionais. Por exemplo:
m = { }
m[1] = { }m[2] = { }
m[1][1] = 1.0
m[2][1] = 0.0
Tambm vlido escrever:
-
8/3/2019 Noc Oesde Lua
22/5522
s = { }s.dados = { }
s.dados.nome = "Linguagem Lua"s.dados.versao = 3.0
Inicializao de tabelas via indexao c onsecutiva
Lua permite inicializao de tabelas na criao. Esta seo discute a inicializao detabelas por indexao.
Uma forma possvel para inicializao de tabelas
{expr1,expr2, ...,exprN}
Isto , escreve-se uma lista de expresses entre as chaves que criam a tabela. Cadaexpresso listada avaliada e seu valor armazenado no ndice correspondente: o valorda primeira expresso armazenado no ndice 1 da tabela, o valor da segunda
expresso no ndice 2, e assim por diante. Portanto, a inicializao abaixo:
t = {23, 45, -7, "Lua", 6+4}
equivalente a
t = { }t[1] = 23
t[2] = 45t[3] = -7
t[4] = "Lua"
t[5] = 6+4
Aps a inicializao, a tabela criada pode armazenar outros valores. Isto , continuasendo possvel armazenar qualquer valor indexado por qualquer valor (exceto nil).Assim, seria possvel, aps a inicializao, ter:
t[67] = 0
t["Lua"] = "exemplo"
Inicializao de t abelas via atribuio de cam pos
Alm da forma de inicializao mostrada na seo anterior, Lua permite ainicializao de campos da tabela. A forma geral :
{[exprA]=expr1, [exprB]= expr2, ... }
Isto , na criao de tabelas pode-se inicializar qualquer tipo de campo que umatabela pode armazenar. Se o ndice do campo da tabela for uma string, o par devalores pode ser escrito simplesmente
-
8/3/2019 Noc Oesde Lua
23/5523
string1 =expr1
Assim, o comando
t = { nome = "Linguagem Lua", [1] = 3.0, [f(x)] = g(y) }
equivalente at = { }t.nome = "Linguagem Lua"
t[1] = 3.0t.[f(x)] = g(y)
Mais uma vez, continua sendo possvel armazenar qualquer valor indexado porqualquer valor (exceto nil). Assim, seria possvel, aps a inicializao, ter:
t[67] = 0
t["Lua"] = "exemplo"
Inicializao mista
Lua permite combinar as duas formas de inicializao mostradas nas seesanteriores. A forma geral :
tabela ={lista-de-expresses;lista-de-atribuies-de-campos
}
Assim, a lista de expresses de uma inicializao por indexao consecutiva pode virseguida do caractere ponto e vrgula (;) e da lista de atribuies de campos pornomes. Portanto, escrever:
t = {23, 45, -7 ;
nome="Linguagem Lua",
versao=3.0,[4]=80
}
equivalente a:
t = { }
t[1] = 23t[2] = 45
t[3] = -7
t.nome = "Linguagem Lua"t.versao = 3.0
t[4] = 80
-
8/3/2019 Noc Oesde Lua
24/5524
9. Tratamento de erros
Todos os erros que podem ser gerados em Lua so "bem comportados" e podem
ser controlados pelo programador. Quando ocorre um erro na compilao ouexecuo de cdigos Lua, a funo cadastrada como error method executada e a afuno da biblioteca Lua responsvel pela execuo do trecho (lua_dofile,lua_dostring, lua_dobuffer ou lua_callfunction) cancelada,retornando uma condio de erro.
Lua passa para a funo de error method um nico parmetro que a cadeia decaracteres que descreve o erro ocorrido. A funo default para error methodsimplesmente imprime essa cadeia de caracteres na sada padro de erro (stderr). possvel mudar a funo de error methodatravs da funo seterrormethod (veja seo10). A biblioteca padro de Lua para funes de entrada e sada usa essa facilidade
para redefinir a funo de tratamento de erros de forma a exibir algumasinformaes adicionais, como a pilha de chamada de funes de Lua.
Para se ter uma descrio completa dos erros de execuo, incluindo a pilha dechamada de funes, deve-se incluir o pragma $debug no cdigo Lua. Este pragmadeve ser escrito na primeira coluna de uma linha do mdulo.
-
8/3/2019 Noc Oesde Lua
25/5525
10. Funes pr-definidas
Existem algumas funes pr-definidas que esto sempre disponveis para programasLua. O conjunto de funes pr-definidas em Lua pequeno, mas prov poderososrecursos de programao. Como ser discutido, estas funes possibilitam escreverfunes para gerar cdigos Lua que, se executados, restauram o ambiente deexecuo. Isto significa que objetos em Lua podem persistir entre diferentes sessesde execuo.
dofile( filename )
DESCRIOEsta funo recebe como parmetro o nome de um arquivo (filename), compila e
executa seu contedo como um mdulo da linguagem Lua.
ARGUMENTOSfilename arquivo a ser executado
RETORNORetorna os valores retornados pelo mdulo se a execuo for bem sucedida ou nilse ocorrer erro.
EXEMPLO
if not dofile("bib.lua") then
print("No possvel abrir a biblioteca de funes")end
OBSERVAESControlar o cdigo de retorno da funo pode ser til para controlar erros queocorrem em tempo de execuo.
dostring( string [, name ])
DESCRIOEsta funo recebe como parmetro um valor do tipo string, compila e executa seucontedo como um mdulo da linguagem Lua.
ARGUMENTOSstring string a ser executadaname opcional; usado em mensagens de erro.
-
8/3/2019 Noc Oesde Lua
26/5526
RETORNORetorna os valores retornados pelo cdigo se a execuo for bem sucedida ou nilse ocorrer erro.
EXEMPLOEsse exemplo transfere valores armazenados em variveis da forma botaox (onde xum nmero inteiro) para a tabela botao:
i = 1; botao = {}b = dostring("return botao"..i )
while b dobotao[i] = b
i = i + 1
b = dostring("return botao"..i )end
next( table, index )
DESCRIOFornece um elemento da tabela table o prximo em relao ao elemento de ndiceindex. Esta funo permite enumerar todos os campos de uma tabela. O primeiroargumento da funo uma varivel que armazena um valor do tipo table; o segundoargumento uma varivel que armazena um dos valores que indexa esta tabela. Estendice pode ser de qualquer tipo, j que uma tabela pode ser indexada por um valorde qualquer tipo (exceto nil). Quando a funo next chamada passando-secomo segundo argumento o valor nil, retorna-se um primeiro ndice da tabela e seurespectivo valor associado.
ARGUMENTOStable tabela Lua a ser examinadaindex ndice da tabela considerado como referncia; nil para comear.
RETORNOA funo retorna dois valores: o ndice na tabela correspondente ao prximoelemento e o valor associado a esse ndice. Se no existir o prximo elemento, afuno retorna nil.
EXEMPLOO trecho de cdigo abaixo imprime todos os ndices e valores associados de umadada tabela t:
-
8/3/2019 Noc Oesde Lua
27/5527
campo,valor = next(t, nil) captura primeiro campo da tabela
while campo do enquanto existir campo
print(campo, "=", valor) imprime valores
campo,valor = next(t, campo) captura prximo campo da tabelaend
OBSERVAESEm Lua, os campos (ndices) de uma tabela no precisam ser criados; eles soincorporados na tabela medida em que so atribudos. Para um campo ainda noatribudo, assume-se o valor nil. Portanto, no h diferena semntica entrecampos realmente inexistentes na tabela e campos que armazenam o valornil. Porisso, a funo next apenas considera campos que armazenam valores diferentes denil. A ordem em que os ndices aparecem no especificada.
nextvar( name )
DESCRIOEsta funo permite enumerar todas as variveis globais cujo valor seja diferente denil. A funo recebe um nico parmetro que representa o nome de uma varivelglobal. No caso de ser passado o valor nil para a funo, retorna-se o nome e ovalor de uma primeira varivel global. A funo sempre retorna dois valores: nomeda varivel e valor armazenado. O nome retornado por uma chamada da funcopode ser usado para acessar uma prxima varivel global, de modo similar funonext. A ordem que as variveis so retornadas no especificada.
ARGUMENTOSname nome da varivel a ser pesquisada
EXEMPLOO trecho de cdigo abaixo imprime os nomes e valores de todas as variveis globais:
nome,valor = nextvar(nil) captura primeira varivel global
while nome do enquanto existir varivel
print(nome, "=", valor) imprime valores
nome,valor = nextvar(nome) captura prxima varivel globalend
type( value )
DESCRIOEsta funo recebe como parmetro uma expresso e informa o seu tipo.
ARGUMENTOSvalue expresso a ser pesquisada
-
8/3/2019 Noc Oesde Lua
28/5528
RETORNORetorna uma string que descreve o tipo do valor resultante: "nil", "number","string","table", "function", ou "userdata".
EXEMPLOO comando abaixo:
t = {}print(type(2.4),type("Alo"),type(t),type(t[1]),type(print))
tem como sada:
numberstring
table
nilfunction
tonumber( e [,base])
DESCRIOEsta funo recebe um argumento e tenta convert-lo para um valor numrico.
ARGUMENTOSe expresso a ser transformada em valor numrico
RETORNOSe o argumento j for um valor numrico ou se for uma string para a qual possvelfazer a converso, a funo retorna o valor numrico correspondente. Se o
converso no for possvel, retorna-senil.
EXEMPLOO comando:
print(tonumber("34.56 "), tonumber("3.2 X"), tonumber(2))
imprime os valores:
34.56nil
2
tostring( e )
DESCRIOEsta funo recebe um argumento e o converte para uma string.
-
8/3/2019 Noc Oesde Lua
29/5529
ARGUMENTOSe expresso a ser transformada em string
RETORNORetorna a stringcorrespondente.
EXEMPLOO comando:
print(tostring(3.2), tostring({10,20,30}), tostring(print))
imprime os valores:
3.2table: 0x324a43function: 0x63ed21
print( expr1, expr2, ... )
DESCRIORecebe uma lista de expresses e imprime seus resultados no dispositivo de sadapadro.
ARGUMENTOSexpr1, expr2, expresses a serem impressas
RETORNO
Nenhum.
EXEMPLO
print( 2*3+2 )print( "valor = ", valor )
OBSERVAESEsta funo no permite sadas formatadas, mas de grande utilidade para consultade valores, impresso de mensagens de erro e para teste e depurao de programas.Para formatao, use format.
error( msg )
DESCRIOEsta funo gera uma condio de erro de execuo, finalizando a funo chamadade C (lua_dofile, lua_dostring, ...). Esta funo recebe uma cadeia de caracterespara descrever o erro ocorrido.
-
8/3/2019 Noc Oesde Lua
30/5530
ARGUMENTOSmsg texto descritor do erro
RETORNONenhum.
OBSERVAESA funo interrompe a execuo do programa; ela nunca retorna.
call( func, arg [,retmode] )
DESCRIOChama a funo func com os argumentos contidos na tabela arg, percorrendosequencialmente os ndices numricos at o ndice arg.n. Se arg.n no for definido,ento a lista de argumentos considerada terminada ao ser encontrado o primeiroelemento de argcom valor nil.
ARGUMENTOSfunc funo a ser chamadaarg tabela contendo todos os argumentos para a funoretmode opcional; s o valor "pack" admitido
RETORNORetorna todos os valores que a funo func retornar. Se o argumento retmode tiverrecebido o valor "pack", ento o retorno uma tabela contendo os valoresresultantes nos ndices inteiros e o nmero total de resultados no ndice n.
EXEMPLO
Considere as seguintes chamadas:
a = call( sin, {5} ) a = 0.871557
a = call( max, {1,4,5;n=2}) a = 4t = { x=1 }
a = call( next,{t,nil;n=2},"pack" ) a={"x",1;n=2}
assert( value [,message] )
DESCRIOCertifica que a o valor value diferente de nil. Gera um erro Lua com a mensagem
assertion failed seguido possivelmente de message,sevalue for igual nil.
ARGUMENTOSvalue valor a ser testado
RETORNONenhum.
-
8/3/2019 Noc Oesde Lua
31/5531
EXEMPLO
assert( readfrom(FILE),"cannot open" .. FILE )
-
8/3/2019 Noc Oesde Lua
32/5532
11. Bibliotec as de funes
Existem trs bibliotecas j implementadas provendo funes C que podem ser
acessadas de Lua: manipulao de strings, funes matemticas e funes de entrada esada. Estas bibliotecas so distribudas com a biblioteca bsica da linguagem.
Biblioteca de manipulao de strings
Esta biblioteca prov funes genricas para manipulao de cadeias de caracteres,tais como determinar o nmero de caracteres de uma string e capturar ou localizaruma substring.
strfind( str, pattern[, init[, plain]] )
DESCRIOProcura um padro dentro de uma cadeia de caracteres. A busca feita na cadeia str,procurando o padropattern a partir do caracter init (opcional). Se no forespecificado o parmetro init, a busca feita na cadeia toda. Caso o parmetro
plain (opcional) seja diferente de nil, no utilizado pattern matching, e nesse caso feita uma busca simples de subcadeia
ARGUMENTOSstr cadeia de caracteres na qual ser feita a busca
pattern padro procuradoinit opcional; ndice de strpara o incio da busca
plain opcional; indica se deve ser usado pattern matching ou no.
RETORNOSo retornados os ndices inicial e final da primeira ocorrncia do padro na cadeiastr. Caso strno contenha o padro, retorna nil. Se o padro for encontrado eeste contiver capturas, retornado um valor a mais para cada captura.
EXEMPLOO cdigo
i, f = strfind("Linguagem Lua 3.0", "Lua")print( i, f )
imprime os valores 11 e 13, correspondentes posio da subcadeia Lua na cadeiapesquisada.
O cdigo abaixo utiliza capturas para extrair informaes de uma string:
-
8/3/2019 Noc Oesde Lua
33/5533
data = "13/4/1997"i, f, dia, mes, ano = strfind(data, "(%d*)/(%d*)/(%d*)")
print( dia, mes, ano )
Este cdigo imprime os valores 13, 4, e 1997.
OBSERVAESPadres operam sobre classes de caracteres, que so conjuntos de caracteres. Atabela abaixo lista as classes que podem ser utilizadas para compor os padres:
x o prprio caracter x, exceto ()%.[*-?%x (x um caracter no alfanumrico) representa o caracter x. qualquer caracter%a Letras%A tudo exceto letras%d Dgitos decimais%D tudo exceto dgitos%l letras minsculas%L tudo exceto letras minsculas%s caracteres brancos (espaos, tabs, quebras de linha)%S tudo exceto caracteres brancos%u letras maisculas%U tudo exceto letras maisculas%w caracteres alfanumricos%W tudo exceto caracteres alfanumricos[char-set] unio de todos os caracteres de char-set[^char-set] complemento de char-set
Um item de um padro pode ser:
uma classe de caracteres, que casa com qualquer caracter da classe;
uma classe de caracteres seguida de *, que casa com 0 ou mais repeties doscaracteres da classe. O casamento sempre feito com a sequncia mais longapossvel;
uma classe de caracteres seguida de -, que casa com 0 ou mais repeties doscaracteres da classe. Ao contrrio do *, o casamento sempre feito com asequncia mais curta possvel;
uma classe de caracteres seguida de ?, que casa com 0 ou 1 ocorrncia de umcaracter da classe;
%n, para n entre 1 e 9; este item casa com a substring igual n-sima stringcapturada (ver abaixo);
-
8/3/2019 Noc Oesde Lua
34/5534
%bxy, onde xe yso dois caracteres diferentes; este item casa com strings quecomeam com x e terminam com y, onde x e yso balanceados. Por exemplo, oitem %b() casa com expresses com parnteses balanceados.
Um padro uma sequncia de itens de padro. O caracter ^ no incio do padroobriga o casamento no incio da string procurada. Um $ no final do padro obriga ocasamento no final da string.
Um padro pode conter sub-padres entre parnteses, que descrevem capturas.Quando o casamento feito, as substrings que casam com as capturas so guardados(capturados) para uso futuro. As capturas so numeradas da esquerda para a direita.Por exemplo, no padro "(a*(.)%w(%s*))", a parte da string que casa coma*(.)%w(%s*) armazenada como a primeira captura (nmero 1); o caracter quecasou com . capturado com o nmero 2 e a parte %s* tem nmero 3.
EXEMPLOO cdigo
function name (arg1,arg2)
(function %s*(%a%a*)(%b()))
captura as seguintes strings: declaraes de funes Lua ; nomeda funo (%a%a*); captura lista de parmteros (%b()).
strlen( str)
DESCRIOInforma o tamanho de uma string.
ARGUMENTOSstr string a ser medida
RETORNORetorna o nmero de caracteres presentes na cadeia de caracteres.
EXEMPLOO cdigo
print(strlen("Linguagem Lua"))
imprime o valor 13.
strsub( str, I[,j] )
DESCRIOCria uma cadeia de caracteres que uma subcadeia de str, comeando na posio ie indo at a posio j (inclusive). Se i ou j tiverem valor negativo, eles soconsiderados relativos ao final de str. Assim, -1 aponta para o ltimo caracter de
-
8/3/2019 Noc Oesde Lua
35/5535
stre 2 para o penltimo, etc. Se j no for especificado, considerado como sendoequivalente posio do ltimo caracter. Como particularidade,strsub(str,1,j) retorna um prefixo de str com j caracteres; estrsub(str,i) retorna um sufixo de str comeando na posio i.
ARGUMENTOSstr string de onde vai ser extrada a substringi posio de incio da substringj opcional; posio de trmino da substring
RETORNORetorna a subcadeia.
EXEMPLOO cdigo:
a = "Linguagem Lua"print(strsub(a, 11))
imprime a stringLua.
strlower( str)
DESCRIOCria uma cpia da cadeia passada como parmetro, onde todas as letras maisculasso trocadas pelas minsculas correspondentes; os demais caracteres permaneceminalterados.
ARGUMENTOSstr stringa ser transformada
RETORNORetorna a stringresultante.
EXEMPLOO cdigo
print(strlower("Linguagem Lua"))
tem como sada a cadeia linguagem lua.
strupper( str)
DESCRIOCria uma cpia da cadeia passada como parmetro, onde todas as letras minsculasso trocadas pelas maisculas correspondentes; os demais caracteres permaneceminalterados.
-
8/3/2019 Noc Oesde Lua
36/5536
ARGUMENTOSstr stringa ser transformada
RETORNORetorna a cadeia resultante.
EXEMPLOO cdigo
print(strupper("Linguagem Lua"))
tem como sada a cadeia LINGUAGEM LUA.
strrep( str, n)
DESCRIOCria uma stringque a concatenao de n cpias da stringstr.
ARGUMENTOSstr stringa ser replicada
RETORNORetorna a stringcriada.
EXEMPLOO cdigo
print(strrep( "0123456789", 2 ))
tem como sada
01234567890123456789
ascii( str[, I] )
DESCRIOInforma o cdigo ASCII do caracter str[i].
ARGUMENTOSstr stringa ser consultadai opcional; posio do caracter na stringstr
RETORNORetorna o cdigo correspondente.
EXEMPLOO cdigo
-
8/3/2019 Noc Oesde Lua
37/5537
print(ascii("abc",2))
tem como sada 42.
format( formatstring, exp1, exp2, )
DESCRIOCria uma string com expresses exp1, exp2 etc. formatadas de acordo comformatstring. Cada expresso deve ter um cdigo embutido emformatstring, que espeficica como a formatao feita. Os cdigos consistemdo caracter % seguido de uma letra que denota o tipo da expresso sendo formatada.
ARGUMENTOSformatstring formato a ser usadoexp1, exp2, ... expresses a serem formatadas
RETORNORetorna uma string no formato formatstring, com os cdigos substitudospelas expresses correspondentes.
EXEMPLOO cdigo abaixo:
nome = "Carla"id = 123
cmd = format( "insert into tabela (nome, id)
values (%s, %d)" , nome, id )
cria uma string com um comando SQL para insero dos valores da variveis nome e
id em uma tabela. J o cdigo abaixo:print( format( "%c", 65 ) )
mostra como a funo pode ser usada para converter um cdigo ASCII nmericono caracter correspondente; nesse caso resultando na impresso do caracter A.
O exemplo abaixo mostra o uso de modificadores:
a = 123.456
print( format( "%+010.2f", a ) )
imprime +000123.46.
OBSERVAESA tabela abaixo lista os tipos aceitos no formato. Os tipos %s e %q aceitam comovalor uma string, enquanto que os outros aceitam um nmero.
%s String%q string com delimitadores, num formato que possa ser lido por Lua%c caracter
-
8/3/2019 Noc Oesde Lua
38/5538
%d inteiro com sinal%i igual a %d%u inteiro sem sinal%o inteiro octal%x hexadecimal usando letras minsculas (abcdef)%X
hexadecimal usando letras maisculas (ABCDEF)%f real no formato [-]ddd.ddd%e real no formato [-]d.ddd e[+/-]ddd%g real na forma %f ou %e%E igual a %e, usando o caracter E para o expoente no lugar de e%% caracter %
A formatao de cada um dos tipos pode ser alterada incluindo-se modificadoresentre os dois caracteres. Um nmero define o tamanho mnimo que o campo ocupa(ex: %10d). Um nmero seguido de um ponto define a preciso do campo (ex: %.2f).Um sinal de - aps o % significa que o campo deve ser alinhado pela esquerda, dentrodo tamanho do campo. Um sinal de + faz com que seja mostrado este sinal caso ovalor correspondente seja positivo. O caracter 0 faz com que o nmero sejapreenchido com zeros esquerda para completar o tamanho mnimo.
gsub( str, pattern, repl[, n] )
DESCRIOProcura e substitui padres em uma cadeia de caracteres. O padropattern procurado na stringstr. Cada padro encontrado substitudo por repl, que podeser uma string ou uma funo. Caso repl seja uma funo, o padro encontrado substitudo pelo resultado da execuo da funo repl. As substituies so feitas
para cada ocorrncia do padropattern, a no ser que seja especificado o parmetron, que define o nmero mximo de substituies a serem feitas. Se o padroespecifica capturas, estas podem ser usadas na stringrepl na forma %1, %2 etc; se replfor uma funo, as capturas so passadas como parmetro para a funo. A descriodo padro a mesma utilizada pela funo strfind.
ARGUMENTOSstr stringonde ser feita a busca
pattern padro a ser procurado e substitudorepl stringpara substituir cada padro encontrado (ou funo)table opcional; parmetro a ser passado a repl quando este uma funon opcional; nmero mximo de substituies a serem feitas
RETORNORetorna a stringstrcom todas as substituies feitas. Em particular, se o padro nofor encontrado, o resultado ser a prpria stringstr.
EXEMPLOO cdigo
-
8/3/2019 Noc Oesde Lua
39/5539
print( gsub( "Linguagem Lua 3.0", " ", "+" ) )
imprime Linguagem+Lua+3.0.
O cdigo
texto = " Linguagem Lua 3.0 "print( gsub( texto, " *", " " ) )
substitui toda sequncia de um ou mais brancos por um nico branco, imprimindo"Linguagem Lua 3.0 ".
Capturas tambm podem ser utilizadas com a funo gsub:
lista = [[
arq.txttexto.txt
r.txt
]]
print( gsub( lista, "(.*)%.txt\n", "move %1.txt %1.bak\n" ))
imprime:
move arq.txt arq.bakmove texto.txt texto.bak
move r.txt r.bak
Biblioteca de funes matemt icas
Existem implementadas funes para retornar o valor mximo ou mnimo de uma
srie de expresses. As funes recebem uma lista varivel de parmetros. A formageral das funes :
min( expr1, expr2, ..., exprN)
max( expr1, expr2, ..., exprN)
Assim, o cdigo abaixo:
print(min(23, 5, 123, 3))
print(max(23, 5, 123, 3))
imprime os valores 3 e 123.
Existem ainda funes que implementam as funcionalidades de funes homnimasda biblioteca padro da linguagem C. So elas:
-
8/3/2019 Noc Oesde Lua
40/5540
log(value) logaritmo de value na base elog10(value) logaritmo de value da base 10cos(angle) cosseno de angle (especificado em graus)sin(angle) seno de angle (especificado em graus)tan (angle) tangente de angle (especificado em graus)acos(value)
arco cosseno, em graus, de valueasin(value) arco seno, em graus, de valueatan(value) arco tangente, em graus, de valueatan2(y,x) arco tangente, em graus, de y/xdeg(angle) converte angle (especificado em radianos) para grausrad(angle) converte angle (especificado em graus) para radianosabs(value) valor absoluto de valuesqrt(value) raiz quadrada de valueceil(value) inteiro imediatamente inferior a valuefloor(value) inteiro imediatamente superior a valuemod(value,div) resto da diviso inteira de value por div
Bibliotec a de funes de entrada e sada
Esta biblioteca implementa funes adicionais para execuo de operaes deentrada e sada. Todas as operaes de entrada e sada desta biblioteca so feitas emdois arquivos correntes, um de entrada (_INPUT) e um de sada (_OUTPUT). Osdispositivos padres da linguagem C: stdin, stdout e stderr estodisponveis atravs das variveis globais_STDIN, _STDOUT e _STDERR. Inicialmente,
_INPUT tem o mesmo valor de_STDIN e_OUTPUT tem o mesmo valor que_STDOUT.
readfrom( filename)
DESCRIOAbre ou fecha um arquivo para leitura. Se o parmetro for uma string, a funo abreo arquivo nomeado filename, colocando-o como arquivo de entrada corrente, eretorna uma referncia para o arquivo aberto. Se a funo for chamada semparmetros, o arquivo de entrada corrente fechado e a entrada padro restauradacomo arquivo de entrada corrente.
ARGUMENTOSfilename nome do arquivo a ser aberto
RETORNORetorna uma referncia para o arquivo aberto (userdata com o FILE* de C). Emcaso de erro, retorna nil e uma string descrevendo o erro.
-
8/3/2019 Noc Oesde Lua
41/5541
EXEMPLO
readfrom( "c:\\txt\\b.txt" )
writeto( [filename])
DESCRIOAbre ou fecha um arquivo para escrita. Se o parmetro for uma string, a funo criaum arquivo nomeado filename, colocando-o como arquivo de sada corrente, eretorna uma referncia para o arquivo aberto (caso j exista um arquivo com estenome, o seu contedo perdido). Se a funo for chamada sem parmetros, oarquivo de sada corrente fechado e a sada padro definida novamente comoarquivo de sada corrente.
ARGUMENTOSfilename nome do arquivo a ser aberto
RETORNORetorna uma referncia para o arquivo aberto (userdata com o FILE* de C). Emcaso de erro, retorna nil e uma string descrevendo o erro.
EXEMPLOO cdigo abaixo:
if writeto( "a.txt") thenwrite( "contedo do arquivo" )
writeto()
end
cria o arquivo a.txt, escrevendo a string contedo do arquivo nele.
appendto( [filename])
DESCRIOAbre um arquivo para escrita nomeado filename e o define como arquivo de sadacorrente. Ao contrrio da funo writeto, caso j exista um arquivo com este nomeo seu contedo no perdido; novas escritas so acrescentadas aos dados jexistentes. Quando chamada sem parmetros, tem o mesmo comportamento dafuno writeto: fecha o arquivo de sada corrente e restaura a sada padro comocorrente.
ARGUMENTOSfilename nome do arquivo a ser aberto
RETORNORetorna uma referncia para o arquivo aberto (userdata com o FILE* de C). Emcaso de erro, retorna nil e uma string descrevendo o erro.
-
8/3/2019 Noc Oesde Lua
42/5542
EXEMPLOO cdigo
if appendto( "a.txt") then
write( "contedo do arquivo" )appendto()
end
acrescenta a string contedo do arquivo no arquivo a.txt.
read( [readpattern])
DESCRIOL uma string do arquivo de entrada corrente (_INPUT) de acordo com o padroreadpattern. O arquivo lido at que o padro termine ou falhe. A funo retornaos caracteres lidos, mesmo que o padro no tenha sido completamente lido.Quando chamada sem parmetros, usado o padro [^\n]*{\n}, que l uma linha
do arquivo. A descrio do padro a mesma utilizada pela funo strfind(mascom comportamento um pouco diferente, ver observaes).
ARGUMENTOSreadpattern padro a ser lido
RETORNORetorna uma string com o contedo do arquivo que casou com o padroreadpattern (mesmo parcialmente) ou nil se os dados do arquivo no casaram comnada do padro (ou se o arquivo chegou ao fim).
EXEMPLO
O codigo
data = {}
i = 1readfrom( "datas.txt" )
repeatdata[i] = read( "%d/%d/%d{\n}" )
i = i + 1
until data == nilreadfrom()
l todas as datas contidas no arquivo datas.txt, colocando-as na tabela data.
OBSERVAESO padro pode conter sub-padres entre chaves, que definem sk ips. Os sk ips solidos do arquivo mas no so includos na string resultante.
O comportamento dos padres usados nesta funo diferente do pattern matchingregular, onde um * expande para o maior comprimento tal que o resto do padrono falhe. Nesta funo, uma classe de caracteres seguida de * l o arquivo atencontrar um caracter que no pertence classe, ou at final do arquivo.
-
8/3/2019 Noc Oesde Lua
43/5543
write( value1, value2, ...)
DESCRIORecebe uma lista de valores e os escreve no arquivo de sada corrente (_OUTPUT). Osvalores devem ser nmeros ou strings. Diferentemente da funo print, no gerada uma quebra de linha aps cada valor escrito.
ARGUMENTOSvalue1, value2, valores a serem escritos
RETORNONenhum.
EXEMPLO
write( a = , a )
remove( filename)
DESCRIOApaga o arquivo nomeado filename.
ARGUMENTOSfilename path fsico do arquivo a ser apagado.
RETORNOSe a funo no conseguir apagar o arquivo, ela retorna nil e uma stringdescrevendo o erro.
EXEMPLOO cdigo
a, error = remove( "c:\doc\arq.txt" )
if not a thenprint( error )
end
tenta apagar o arquivo c:\doc\arq.txt. Em caso de erro, impressa uma mensagemexplicando a causa.
rename( name1, name2)
DESCRIORenomeia o arquivo nomeado name1 para name2.
ARGUMENTOSname1 nome do arquivo a ser renomeadoname2 novo nome do arquivo
-
8/3/2019 Noc Oesde Lua
44/5544
RETORNOSe a funo no conseguir renomear o arquivo, ela retorna nil e uma stringdescrevendo o erro.
EXEMPLOO cdigo
a, error = rename( "arq.txt", "arquivo.txt" )if not a then
print( error )end
tenta renomear o arquivo arq.txt para arquivo.txt. Em caso de erro, impressauma mensagem explicando a causa.
tmpname( )
DESCRIOObtem um nome de arquivo que pode ser usado para criar um arquivo temporrio.O arquivo precisa ser explicitamente apagado quando no for mais necessrio.
ARGUMENTOSNenhum.
RETORNORetorna uma string com o nome do arquivo.
EXEMPLOO cdigo
filename = tmpname()writeto( filename )
cria um arquivo temporrio para escrita.
date( [format] )
DESCRIOConsulta a data atual, retornando-a formatada de acordo com o parmetro format(opcional). O formato uma string com cdigos na forma %c, que especificam os
componentes da data (ms, dia, ano, hora etc.). A funco retorna a string formatcom os cdigos substitudos pelos valores correspondentes data no momento dachamada. O formato usado quando o parmetro no especificado dependente dosistema.
ARGUMENTOSformat opcional; descrio de como a data deve ser formatada
-
8/3/2019 Noc Oesde Lua
45/5545
RETORNOUma stringcom a data atual.
EXEMPLOO cdigo
print( date( "hoje dia %d do ms %B" ) )
imprime a string hoje dia 14 do ms Agosto (considerando a execuo no dia14/ 8 em um sistema que utiliza a lngua portuguesa).
OBSERVAESA tabela abaixo lista os cdigos aceitos no formato:
%a nome do dia da semana, abreviado%A nome do dia da semana, completo%b nome do ms, abreviado%B nome do ms, completo%c data e hora, no formato usado pelo sistema%d dia do ms, de 01 a 31%H hora, de 00 a 23%I hora, de 01 a 12%j dia do ano, de 001 a 366%m nmero do ms, de 01 a 12%M minuto, de 00 a 59%P indicao am/ pm%S segundo, de 00 a 60%U semana do ano (considerando domingo como o primeiro dia da
%w nmero do dia da semana, de 0 a 6 (0 domingo)%W semana do ano (considerando segunda-feira como o primeiro dia da
%x data no formato usado pelo sistema%X hora no formato usado pelo sistema%y ano sem o sculo, de 00 a 99%Y ano (completo) com o sculo%z time zone%% caracter %
exit( [code] )
DESCRIOTermina a execuo do programa, retornando code a quem o executou. Caso oparmetro code no seja especificado, usado o valor 1.
ARGUMENTOScode opcional; o cdigo a ser retornado
RETORNOEsta funo no retorna.
-
8/3/2019 Noc Oesde Lua
46/5546
EXEMPLOO cdigo
if termina_programa then
exit()end
termina a execuo do programa caso a varivel termina_programa contenha um valordiferente denil..
getenv( varname)
DESCRIOConsulta o valor da varivel de ambiente nomeada varname.
ARGUMENTOSvarname nome da varivel a ser consultada.
RETORNORetorna uma string com o valor da varivel varname, ou nil se esta no estiverdefinida.
EXEMPLOO cdigo
print( getenv( "REMOTE_HOST" ) )
imprime o valor da varivel de ambiente REMOTE_HOST.
execute( command)
DESCRIOExecuta o comando commandno sistema operacional.
ARGUMENTOScommand comando a ser executado
RETORNOO valor de retorno desta funo dependente do sistema operacional. Normalmente um valor retornado pelo comando executado.
EXEMPLOO cdigo
execute( "mkdir c:\data" )
executa um comando no sistema operacional para criar o diretrio c:\data.
-
8/3/2019 Noc Oesde Lua
47/5547
Apndice. Relevncia de Lua
Um dos aspectos mais marcantes de Lua sua dualidade acadmico-industrial. No
aspecto industrial, Lua vem sendo usada em dezenas de produtos, desenvolvidostanto na PUC-Rio quanto fora, inclusive no exterior. No aspecto acadmico, Lua deuorigem e influenciou diversos trabalhos, refletidos em dezenas de dissertaes, teses,e publicaes.
Relevncia Tecnolgica
Lua vem sendo disponibilizada na Internet desde fevereiro de 1994. Esse fato, aliado qualidade da linguagem, vem tornando Lua uma linguagem amplamente utilizadaem diversos tipos de aplicao, tanto no Brasil quanto no exterior. Abaixo relatamos
alguns usos de Lua em produtos tecnolgicos. Essa lista est longe de ser exaustiva, eprocura apenas exemplificar a diversidade de projetos industriais em que Lua vemsendo utilizada.
importante frizar que, devido distribuio pela Internet, os prprios autores notem controle do nmero total de usurios ou produtos/ prottipos que utilizam alinguagem.
TeCGraf
O TeCGraf uma parceria entre a PUC-Rio e o Centro de Pesquisas daPETROBRS (CENPES) com o objetivo de desenvolver, implantar e mantersoftware de computao grfica e de interface com o usurio para aplicaes tcnico-cientficas. Como a linguagem Lua foi desenvolvida no TeCGraf, bastante naturalque o grupo tenha adotado Lua em diversos projetos. Atualmente, mais de vintepessoas programam regularmente em Lua no TeCGraf, e em torno de mais dezpessoas usam Lua eventualmente. No total, os diversos sistemas produzidos noTeCGraf com tecnologia Lua incluem mais de cem mil linhas de cdigo Lua, emdezenas de produtos finais. O artigo da Software: Practice & Experience tambmdescreve algumas aplicae de Lua no TeCGraf. (Maiores informaes sobre oTeCGraf e seus produtos podem ser obtidas em http://www.tecgraf.puc-rio.br/publico/prodtec.html.)
Sistema RPA@PUC
O RPA@PUC (Rede de Perfis Acadmicos da PUC-Rio) um sistema Intranetdesenvolvido pela Vice-Reitoria Acadmica da PUC-Rio, para acompanhamento daproduo acadmica do corpo docente da Universidade. Para suportar mais decinquenta diferentes tipos de produo (Artigos de Peridicos, Captulos de
-
8/3/2019 Noc Oesde Lua
48/5548
Livros, Resenhas, Tradues e Verses, Material Didtico e Instrucional,Participao em Bancas, etc.) o sistema utiliza tabelas Lua para descrio abstratade cada tipo de item. Baseados nessas tabelas, programas escritos em Lua soacionados, atravs do protocolo CGI, para gerar dinamicamente formulrios,relatrios, crtica de dados, e outros documentos WWW. Com isso, a incluso oualterao de um tipo de produo implica apenas em modificaes na descrioabstrata de itens, sem envolver nenhum tipo de programao. Atualmente, o sistemaest sendo usado regularmente por aproximadamente cento e cinquenta docentes efuncionrios de oito Departamentos da PUC-Rio, e em breve dever estar sendousado por toda a Universidade. (Outras informaes sobre o projeto RPA@PUCpodem ser obtidas em http://www.inf.puc-rio.br/~info-rpa/projeto/).
Um sistema semelhante est sendo usado para manuteno do site do PESC(Programa de Engenharia de Sistemas e Computao) da COPPE/ UFRJ (maioresinformaes em http://www.cos.ufrj.br/equipe/webmaster.html).
Medialab
A Medialab, empresa responsvel pelos sites brasileiros na Internet de empresascomo Shell e Microsoft, tem usado Lua na construo de diversas pginas dinmicas(protocolo CGI). Ao todo, mais de dez sites j esto em funcionamento compartes dinmicas escritas em Lua, entre eles o sistema de busca de endereos etelefones da Volkswagen do Brasil (http://www.volkswagen.com.br/indbusca.htm)e o sistema de busca do Guia de Restaurantes Danusia Brbara(http://www.brazilweb.com/rio/).4
Non-Linear Control Consultants Ltd
O uso de Lua relatado abaixo de Mark Ian Barlow, que trabalha na empresa Non-Linear Control Consultants Ltd., na Inglaterra. Em uma mensagem, ele relata seuprimeiro contato com a linguagem; aparentemente, ele soube de Lua atravs doartigo na Dr. Dobbs:
4 Os URLs fornecidos no so de pginas criadas com Lua, mas sim pginas estticas que acessam as pginas dinmicas criadas com a linguagem. O usode Lua pode ser conferido, se necessrio, vendo-se as fontes dessas pginas, onde as aes de botes referem-se a roteiros Lua (terminao .luaviaprograma CGILua). Maiores informaes sobre a biblioteca CGILua podem ser obtidas emhttp://www.tecgraf.puc-rio.br/manuais/cgilua.
-
8/3/2019 Noc Oesde Lua
49/5549
From [email protected] Mon Jan 13 12:59:13 1997Date: Mon, 13 Jan 1997 01:24:47 GMT
From: [email protected] (Mark Ian Barlow)Reply-To: [email protected]
Message-Id: [email protected]?
To: [email protected]: Thanks!
Hi, For some time now I've been looking for a portable,
compact interpreted or incrementally compiled language touse in various robotic applications. [] I think lua is
going to be just what I need! Writing to hardware is of
course simple with CFunctions, but the debug interface(omitted from almost all the embedded languages I've seen
before) allows me to arrange for incoming data to appear"magically" in reserved global variables. [] Thanks again
for so accurately spotting the need for lua. Is there a
mailing list for it, and have you heard of anyone elseconsidering using it as a front-end for operating custom
hardware?
Uma segunda mensagem, a pedido dos autores, relata seu uso atual:
From [email protected] Sat Apr 5 09:56:02 1997
From: [email protected] (Mark Ian Barlow)To: [email protected]
Subject: Re: applications that use Lua
I'm using Lua to sequence high-level commands to robots,
connected to the host either via a serial line or transputerlink; perhaps in future via USB or FireWire. Lua is
particularly valuable here because the debugger hooks give
me a means to make external asynchronous events (eg: touch-sensors) look like atomic actions as far as the Lua program
is concerned, and allow users to assign call-back functions
to them. Essentially the robot is a "manipulation server"and the Lua program it's client. The second major advantage
is the portability; I can easily compile a stripped-down Luaclient for an embedded processor on the robot's motherboard.
The user can then download their final debugged applicationinto non-volatile memory, disconnect the host and leave the
robot to get on with the job.
Relevncia Acadmica
Apesar de sua motivao tecnolgica, Lua tem tido uma grande relevncia acadmica
desde o incio de seu projeto. As sub-reas da computao nas quais o trabalho coma linguagem Lua se mostrou mais relevante foram Linguagens de Programao eEngenharia de Software.
Na linha de Linguagens, Lua oferece diversos mecanismos inovadores; porm, omais importante sua economia de conceitos, que a torna significativamente maissimples e menor que outras linguagens com recursos semelhantes. Entre outras
-
8/3/2019 Noc Oesde Lua
50/5550
estruturas que contribuem para isso, podemos destacar o mecanismo de tabelas e suaidentificao com o conceito de objetos, e o mecanismo de fallbacks (tag method).
Na linha de Engenharia de Software, o principal impacto de Lua foi promover omtodo bottom-up de desenvolvimento, com uso intensivo de componentes. Ouso de Lua como glue-language permite que partes significativas de um sistemapossam ser desenvolvidas como bibliotecas, com um pequeno roteiro em Luadefinindo a arquitetura final de uma aplicao.
Publicaes
Uma das maneiras de mostrar a relevncia acadmica de Lua atravs daspublicaes geradas em torno da linguagem. Abaixo, apresentamos a lista dessaspublicaes. Essa lista dividida em duas partes: a primeira contm artigosdiretamente relacionados com a linguagem. A segunda contm trabalhos baseadosem Lua. Vale frizar que os trabalhos baseados em Lua, de maneira geral, no s
utilizaram a linguagem em sua implementao, mas tambm sofreram influncia deLua em suas arquiteturas, sendo desenvolvidos segundo a linha bottom-uppromovida pela linguagem.
Trabalhos Sobre Lua
R. Ierusalimschy, L. H. de Figueiredo, and W. Celes. Lua an extensibleextension language. Software: Practice and Experience, 26(6):635652, 1996.
Luiz Henrique de Figueiredo, Roberto Ierusalimschy, and Waldemar Celes. Lua:An extensible, portable embedded language. Dr. Dobbs Journal, 21(12):2633,December 1996.
Toms G. Gorham and Roberto Ierusalimschy. Um sistema de depuraoreflexivo para uma linguagem de extenso. I Simpsio Brasileiro de Linguagensde Programao, pginas 103114, Belo Horizonte, setembro 1996.
Noemi Rodriguez, Cristina Ururahy, Roberto Ierusalimschy, and RenatoCerqueira. The use of interpreted languages for implementing parallelalgorithms on distributed systems. In L. Boug, P. Fraigniaud, A. Mignotte, andY. Robert, editors, Euro-Par96 Parallel Processing Second International Euro-Par Conference, pginas 597600, Volume I, Lyon, France, August 1996.Springer-Verlag. (LNCS 1123).
Toms Guisasola Gorham. Um sistema de depurao para a linguagem deextenso Lua. Dissertao de Mestrado, Dep. Informtica, PUC-Rio, maro1996.
L. H. de Figueiredo, R. Ierusalimschy, and W. Celes. The design andimplementation of a language for extending applications. XXI Semish, pginas273284, Caxambu, 1994.
-
8/3/2019 Noc Oesde Lua
51/5551
Roberto Ierusalimschy, Waldemar Celes Filho, Luiz Henrique de Figueiredo,Roberto Murilo de Sousa. Lua: uma linguagem para customizao deaplicaes. Caderno de Ferramentas do VII Simpsio Brasileiro de Engenhariade Software, pgina 55, 1993.
Trabalhos Baseados em Lua
Andr Oliveira Costa. TkVIX um toolkit para construo de interfacesgrficas em Lua. Dissertao de Mestrado, Dep. Informtica, PUC-Rio, abril1997.
Paulo Henrique Mascarenhas SantAnna. Modelos de extenso de agentes paragerenciamento de redes. Dissertao de Mestrado, Dep. Informtica, PUC-Rio,abril 1997.
R. O. Prates, C. S. de Souza, A. C. B. Garcia. A Semiotic Framework for Multi-User Interfaces. ACM SIGCHI Bulletin 29(2):2839, 1997.
Nick Lehtola. Ambiente para o desenvolvimento de sistemas CAD integradoem edificaes de ao. Tese de doutorado, Dep. Engenharia Civil, PUC-Rio,Abril 1996.
Andr Luiz Clnio dos Santos. VIX um framework para suporte a objetosvisuais interativos. Dissertao de Mestrado, Dep. Informtica, PUC-Rio,dezembro 1996.
Neil Armstrong Rezende. GLB: Uma ferramenta para manipulao de objetosgrficos procedurais. Dissertao de Mestrado, Dep. Informtica, PUC-Rio,maro 1996.
Carlos Roberto Serra Pinto Cassino. Uma ferramenta para programao literriamodular. Dissertao de Mestrado, Dep. Informtica, PUC-Rio, agosto 1996.
Waldemar Celes Filho. Modelagem configurvel de subdivises planareshierrquicas. Tese de doutorado, Dep. Informtica, PUC-Rio, julho 1995.
Marcelo Tlio Monteiro de Carvalho. Uma estratgia para o desenvolvimento deaplicaes configurveis em mecnica computacional. Tese de doutorado, Dep.Engenharia Civil, PUC-Rio, junho 1995.
A. Carregal, R. Ierusalimschy. Tche a visual environment for the Lualanguage. VIII Simpsio Brasileiro de Computao Grfica, pginas 227232,So Carlos, 1995.
R. Cerqueira, N. Rodriguez, R. Ierusalimschy. Uma experincia emprogramao distribuda dirigida por eventos. PANEL95 XXI ConfernciaLatino Americana de Informtica, pginas 225236, 1995.
-
8/3/2019 Noc Oesde Lua
52/5552
Waldemar Celes Filho, Luiz Henrique de Figueiredo, Marcelo Gattass. EDG:uma ferramenta para criao de interfaces grficas interativas. VIII SimpsioBrasileiro de Computao Grfica, pginas 241248, So Carlos, 1995.
M. T. de Carvalho, L. F. Martha. Uma arquitetura para configurao demodeladores geomtricos: aplicao a mecnica computacional. PANEL95 XXI Conferncia Latino Americana de Informtica, pginas 123134, 1995.
Neil Armstrong Rezende, Waldemar Celes Filho, Marcelo Gattass, nio E.Ramos Russo. PRE-GO: Um editor de objetos grficos procedurais. VIIISimpsio Brasileiro de Computao Grfica, pginas 309310, So Carlos, 1995.
Siome Klein Goldenstein, Paulo Cezar Pinto Carvalho, Luiz Henrique deFigueiredo. IG: um sistema de construes geomtricas com vnculos. VIIISimpsio Brasileiro de Computao Grfica, pginas 311312, So Carlos, 1995.
Andr Filipe Lessa Carregal. Tche: Um ambiente visual Lua. Dissertao de
Mestrado, Dep. Informtica, PUC-Rio, maro 1995.
Eduardo Setton Sampaio da Silveira. Um sistema de modelagem bidimensionalconfigurvel para simulao adaptativa em mecnica computacional. Dissertaode Mestrado, Dep. Engenharia Civil, PUC-Rio, agosto 1995.
Lua na Internet
Lua vem sendo disponibilizada na Internet desde fevereiro de 1994. (sua home-pagepode ser acessada em http://www.inf.puc-rio.br/~roberto/lua.html). Aps apublicao de um artigo de divulgao na Dr. Dobbs, no final de 1996, o interesse
externo pela linguagem tem crescido constantemente. O pacote est disponvel emquatro locais, no Brasil, Canad, Alemanha e Grcia, sendo os dois ltimos mantidospor grupos totalmente independentes.
Atualmente, a linguagem conta com uma lista de discusses ([email protected]) com mais de setenta participantes, sendo a maioria deles de fora do pas (alista de participantes pode ser obtida enviando-se review lua-l [email protected]).
Vrias colees de linguagens e/ ou ferramentas na Internet j incluem Lua. Entreoutras, citamos as seguintes:
http://www.KachinaTech.COM/~hjjou/new-SAL/F/1/LUA.html. Pgina mantidapela SAL: SAL (Scientific Applications on Linux) is a collection of informationand links of software that scientists and engineers will be interested in. The broadcoverage on Linux applications will also benefit the whole Linux/ Unixcommunity.
http://www.idiom.com/free-compilers/TOOL/lua-1.html. Parte do Catalogof Free Compilers and Interpreters: This list is primarily aimed at developers
-
8/3/2019 Noc Oesde Lua
53/5553
rather than researchers, and consists mainly of citations for production qualitysystems.
Abaixo listamos alguns comentrios sobre Lua que circularam pela rede. Algunsforam mandados diretamente para os autores, outros apareceram em grupos dediscusso (newsgroups) sobre linguagens. interessante observar a diversidade dasinstituies, atravs dos endereos dos remetentes.
From: W.Boeke, Lucent Technologies, the Netherlands
From [email protected] Thu Jul 18 04:31:22 1996
After the article in 'Software, P.&E.' you must have had alot of responses. Everyone with some knowledge of computer
languages will have been struck by the original concepts of
the language.
[]
From: "Francis L.Burton'' [email protected]?
From udcf.gla.ac.uk!gpaa29 Fri Jan 26 14:20:34 1996
[] Lua is a splendid piece of software, imho -- very cleanlanguage design, powerful through its reflexivity, nice API.
The documentation is a pleasure to read. Would that allsoftware were as neat as Lua! [] Frankly, I was amazed and
delighted. []
From: Joshua Jensen [email protected]?
[] Congratulations on Lua. It was exactly what I was
looking for, and I've been using it as my primary scriptlanguage for a month and a half now. It's powerful, small,
and very easy to use (and expand upon). [] Good luck withit. I'd recommend the language to anyone.
From: ''Rodney A. Ludwig''[email protected]?
[] I have been using interpreters in my code since theearly 80s for testing and prototyping and to add a macro
language [] so far this looks like the best I have seen andI have tried most everything around during that time. []
From: [email protected] (Francis Burton)
-
8/3/2019 Noc Oesde Lua
54/5554
Article: 8741 of comp.compilersMessage-ID: [email protected]?
Organization: University of Denver, Math/CS Dept.
[] If you really want to learn about elegance and power inthe design of little languages, take a look at the papers
published about Lua (metapage at
http://csg.uwaterloo.ca/~lhf/lua/) and study the sourcecode. Neat!
From: Bret Mogilefsky [email protected]?
After reading the Dr. Dobbs article on Lua I was very eagerto check it out, and so far it has exceeded my expectationsin every way! It's elegance and simplicity astound me.
Congratulations on developing such a well-thought out
language. []
Newsgroups: comp.lang.ml
Message Id: [email protected]?
[] I'm not so happy with Tcl as language design, and for CI think Lua does a better job than Tcl. []
Norman Ramsey -- moderator, comp.programming.literatehttp://www.cs.virginia.edu/~nr
From: [email protected] (Jack Jansen)
Message-Id: [email protected]?Newsgroups: comp.lang.python
[] From a glance athttp://csg.uwaterloo.ca/~lhf/lua/home.html it looks like apretty decent and small language, "Tcl done right" is whatimmedeately came to mind []
From: [email protected] (James Logajan)
-
8/3/2019 Noc Oesde Lua
55/55
Message-Id: [email protected]?Newsgroups: comp.lang.scheme, comp.lang.scheme.scsh,
comp.lang.lisp,comp.lang.tcl