noc oesde lua

Upload: darlecio-almeida

Post on 06-Apr-2018

219 views

Category:

Documents


0 download

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