Activism, Apple, Computer Science, Culture, DB, Drupal, Guitar, Languages Processing, LaTeX, Left, Linux, Mac, National Geographic, Open Source, Perl, Portugal, XML, World, ...

Português

Porque é que se usam duas gramáticas para a mesma linguagem?

Antes de propor uma explicação linear, seria interessante apresentar uma citação que, após devidamente argumentada, poderá servir para orientar a resposta final:

The grammar needed to specify a programming language can be classified by its position in the Chomsky hierarchy. The syntax of most programming languages can be specified using a Type-2 grammar, i.e., they are context-free grammars.

Michael Sipser (1997). Introduction to the Theory of Computation. PWS Publishing. ISBN 0-534-94728-X. Section 2.2: Pushdown Automata, pp.101–114.

Nela surge o conceito de classificação de uma gramática. Essa classificação é -- não só -- efectuada através de formas normais que servem de moldes onde se podem encaixar as produções de uma gramática.


Formas Normais de Gramáticas

Gramáticas de Atributos


Gramática de atributos

Uma gramática de atributos é uma maneira formal de definir atributos para as produções de uma dada textgramática, associando esses atributos a valores. A avaliação ocorre no nós da árvore de derivação quando a linguagem é tratada por um analisador sintáctico (ou um compilador).

Existem dois tipos distintos de atributos, sendo uns sintetizados e outros herdado. Os primeiros resultam das regras de produção da gramática, sendo que também podem usar o valor de atributos herdados. Os segundos são atributos que são passados para as folhas a partir de nós parentes.

Desta forma, as gramáticas de atributos podem transportar a informação de qualquer sítio para qualquer sítio na árvore sintáctica, isto de maneira controlada e formal. Assim sendo, ilustram-se as razões que tornam as gramáticas de atributos serem poderosas.


Herança

Parser Recursivo Descendente vs Parser LL


Parser LL

Os parsers LL usam um algoritmo iterativo sendo que a escolha da produção a usar encontra-se numa tabela auxiliar de decisão. A análise das entradas é efectuada da esquerda para a direita (Left to right) e constrói uma derivação mais à esquerda (Leftmost derivation). Convém igualmente referir que um parser LL é um analisador sintáctico descendente (top-down) pois tenta deduzir as produções da gramática a partir do axioma da mesma. Mais, as gramáticas que podem ser analisadas sintacticamente por estes parsers são qualificadas de gramáticas LL.

Por vezes é usado o termo LL(k), onde k é o número de tokens (em Português, "lexemas"[1]). Estes k lexemas correspondem aos primeiros k símbolos actuais da frase de entrada ainda não consumidos e são usados para tomar decisões na análise.

O analisador sintáctico LL tem pelo menos de receber os seguintes argumentos de entrada:

Algoritmo top-down

No algoritmo top-down, ou em Português "análise sintáctica descendente", o reconhecimento é feito por expansão de regras sintácticas, substituindo símbolos não-terminais do lado esquerdo de produções pelo lado direito das produções. Isto significa que a recursividade é feita à direita, tal como acontece no LL(*). Seguidamente, a expansão das regras sintácticas verifica-se por emparelhamento dos símbolos da frase de entrada com os símbolos terminais das regras sintácticas.

De seguida descreve-se o algoritmo top-down de uma forma linear constituída por quatro passos fundamentais.

parâmetros de entrada
uma gramática G e um frase da linguagem L
resultado de retorno
um árvore de derivação
  1. Criar a raiz da árvore com o símbolo inicial da gramática.
  2. Substituir sucessivamente o símbolo não-terminal mais à esquerda da árvore de derivação pela expressão do lado direito numa produção onde o lado esquerdo é o símbolo em questão.
    Este passo termina quando o primeiro símbolo da produção for um símbolo terminal.
  3. Caso o primeiro símbolo não processado da entrada não emparelhar com o primeiro símbolo da produção seleccionada (como descrito no ponto 2) ter-se-á de recuar um passo atrás e reverter o símbolo não-terminal então substituído. Depois, pesquisar outra alternativa na gramática, isto é, procurar outra produção cujo lado esquerdo corresponda ao símbolo não-terminal em questão. Esta técnica é apelida de "backtracking". Caso não existam alternativas, o algoritmo termina sem sucesso.
  4. Emparelhar, da esquerda para a direita, os símbolos da frase de entrada com os símbolos terminais nas folhas da árvore de derivação até que aconteça umas das três hipóteses:
    • o emparelhamento de símbolos falha => o algoritmo termina sem sucesso ;
    • detecta-se um símbolo não-terminal numa folha da árvore de derivação => regressa-se ao segundo passo do algoritmo ;
    • todos os símbolos da frase de entrada foram emparelhados com todas as folhas da árvore de derivação, sendo que estas apenas contêm símbolos terminais => o algoritmo termina com sucesso.

Quem quer brincar às Escolinhas?

eescolinha

Sou leitor diário do Público online e a notícia sobre o lançamento oficial do Magalhães de hoje de manhã mereceu um comentário especial que rescrevo aqui:

O homem-urso e o homem-lobo

Acabei de assistir a duas excelentes reportagens no canal National Geographic.

A primeira era sobre um grande senhor (Ben Kilham) autodidacta que esteve 14 anos a estudar ursos, educando uma fêmea e vivendo o seu dia-a-dia com esses animais para melhor entendê-los. Isto, remando contra a maré de cientistas que argumentava as suas experiências pouco "ortodoxas". Seguem aqui links interessantes sobre o assunto:

Como configurar o servidor para suportar as "clean URL" no Drupal

As clean URL (não gosto de dizer "URL limpas") são aquele toque especial que faça com que o site seja mais agradável. Dirá que poucas são as pessoas que ligam ao URL, principalmente os utilizadores comuns. Ora eu não vejo isso dessa forma. Quando dispo o meu fato crítico de Webdeveloper e visto a pele de mero navegador, gostos de sites limpos, isto é, possuindo uma interface agradável, simples, rápida e intuitiva. Sim, sou contra sites em Flash...

Voltando ao assunto das URL, é bem mais agradável ter algo do tipo exemplo.com/utilizador/12345/editar do que exemplo.com/index.php?class=user&uid=12345&action=edit, não? O Drupal possui um suporte nativo para tornar as URLs mais limpas. No entanto, serão necessárias umas afinações rápidas para poder activar esta funcionalidade. Note-se que este tutorial é orientado para sistemas Unix. Note-se ainda que esta configuração é uma versão simplificada da documentação do Drupal sobre o assunto (http://drupal.org/node/15365).

O meu primeiro módulo para a comunidade Drupal

Foi com muito orgulho (e muita paciência para o CSV) que disponibilizei na passada 3ª feira o meu primeiro módulo para a comunidade Drupal! Smile

No meio dos "grandes módulos" que tenho feito, nenhum é suficientemente genérico para contribuir para a comunidade. A ideia foi proposta por José Fernandes que me impulsionou no mundo do Drupal, a quem agradeço. A orientação constante permitiu levar a cabo o projecto. Conclusões: este módulo tem todas as condições para integrar o core do Drupal 7 e... o SVN é bem melhor do que o CVS Wink)

Bem, passo a descrever o módulo...

O nome: Content Management Filter (Filtro de Gestão de Conteúdo). Para quem conhece o Drupal, e principalmente para quem administra sites em Drupal este módulo proporciona um filtro avançado sobre conteúdo (nós ou comentários). Revela-se uma alternativa à ferramenta Administer >> Content management >> Content disponibilizando as seguintes opções:

  • Lista nós, comentários ou ambos
  • Filtra por autor (lista drop-down ou pesquisa AJAX)
  • Filtra por role (mostra qualquer conteúdo cujo autor pertence ao role selecionado)
  • Filtra por estado do utilizador (activo ou bloqueado)
  • Mostra uma coluna com a data de criação do conteúdo
  • Qualquer coluna é sortable (ordem ascendente ou descendente) por título, tipo, autor, estado ou data

Mais: cada tipo de conteúdo possui acções globais tais como publicação, despublicação ou ainda remoção em massa.

O CMF também adiciona opicionalmente uma tab aos perfis dos utilizadores com a listagem de conteúdo da autoria do utilizador seleccionado. Existem 2 níveis de permissões: gestor de conteúdo e utilizador normal.

Fica aqui o testemunho que um administrador deixou acerca do módulo:

Very useful -- Drupal's built-in Content tool was sorely missing the sort and filter-by-author features. I was also pleased that I could enable CMF so users can manage content without having to grant full "Administer nodes" permission. ("Administer nodes" permission is required to have the default Content tool to appear and it grants users full access to create/edit all content.)

Mais infos em: http://drupal.org/project/cmf.

Como traduzir a interface do Drupal para a sua língua?

O Drupal possui uma documentação extremamente completa (e por vezes complexa). Um dos maiores problemas de tal extensibilidade é a centralização da informação. De facto, a organização de quase todos os manuais manuais não é a melhor, sendo que na maior parte das vezes o utilizador é constantemente "desviado" para outra página tornando a linearidade dos tutoriais nula.

Um exemplo disso é o tutorial de tradução da interface do Drupal. Por isso, decidi concatenar a informação toda neste tópico para facilitar a vida ao utilizador lusófono. Note-se que este texto é dirigido para a versão 5.x do Drupal, sendo ela a mais utilizada e compatível de momento.

Aqui vai:

Moeda de 1 Euro de Homer Simpson

Um comerciante de gomas da cidade de Avilés (Astúrias, Espanha) encontrou há uma dezena de dias uma moeda de um euro com a cara do famoso Homer Simpson.

Estava o homenzinho (que dá pelo nome de Jose Martinez) a contar as receitas daquele dia quando se depara com isto:

Pode-se observar que em vez do real busto de Sua Majestade o Rei Juan Carlos de Espanha constava o místico rei dos donuts, da cerveja e dos arrotos. Citando o comerciante, "a moeda deve ter sido feita por um profissional, o trabalho é impressionante". Aparentemente trata-se de uma moeda única pois ainda não foram encontradas semelhantes a circular. Há que salientar que já foram oferecidos 20€ pela dita cuja. De doidos! Laughing out loud

Syndicate content