Adriano Melo

Ciência da Computação

Quero ter minha própria sintaxe!

by Adriano Melo on mai.20, 2010, under Ciência da Computação, Desenvolvimento, Teoria e Implementação de Linguagens Computacionais (if688)

Um problema difícil de ser solucionado e que é recorrente para alguns desenvolvedores é de ter um arquivo que atenda a uma sintaxe bem específica em seus projetos de software.

O HTML, por exemplo, possui uma sintaxe bem característica que é de ter uma árvore de conceitos encadeados e encapsulados por “tags”.

Como fazer um programa ou aplicação que tenha arquivos com uma sintaxe singular e que possa ser complexo em relação às regras, e ainda assim legíveis e organizados?

A resposta, que é o motivo desse post, empresta alguns conceitos de compiladores. As duas primeiras etapas de um projeto de compilador são as análises léxica e sintática. A análise léxica identifica palavras-chave nos dados de entrada, e a análise sintática explora as regras definidas para a sua linguagem utilizando as palavras-chave encontradas na fase anterior.

Se o seu projeto é em C, existem duas ferramentas que são as mais difundidas e utilizadas: o lex para análise léxica e o yacc para análise sintática. Essas duas são as ferramentas mais tradicionais, elas foram reescritas e há versões mais recentes com mais suporte da comunidade e documentação atualizada. São os projetos flex e bison, o primeiro substitui o lex, e o segundo o yacc.

Para a linguagem python existem os projetos plex, antlr, ragel e outros.

Em java você pode usar o antlr, jflex, jlex, BYACC/J.

Uma lista mais completa de desses tipos de ferramentas pode ser encontrada através do link: http://en.wikipedia.org/wiki/List_of_parser_generators

Popularity: 7% [?]

1 Comment more...

Monitoria de Sistemas Inteligentes

by Adriano Melo on nov.11, 2009, under Centro de Informática, Ciência da Computação

Apresentações

Documentação Oficial das Ferramentas

Scripts para estudo

Downloads

Jess

Protégé

Ontologias biológicas

Popularity: 21% [?]

Leave a Comment :, , , , , more...