http://www.zago.eti.br/linguag/java.txt Neste FAQ mensagens, links e dicas sobre programação em JAVA, veja também o FAQ sobre instalação e uso do JAVA em GNU/Linux: http://www.zago.eti.br/java.txt Use CTRL+F para refinar a pesquisa. Linha de: **************** separa mensagens ou tópicos. ******************************************************** Zago http://www.zago.eti.br/menu.html FAQ e artigos sobre Linux ****************************** ****************************** ****************************** ****************************** ****************************** ****************************** ******************************
****************************** Aqui tem alguns links ... http://www.mass.eti.br/java/20.html ****************************** ****************************** De: Dicas-L-Owner@unicamp.br Assunto: [Dicas-L] Utilização do JavaCC na construção de um compilador Data: Sat, 31 Jul 2004 04:01:15 -0300 Introdução à Arquitetura TCP/IP Campinas, 28 de agosto de 2004 GNU Solutions: http://www.gnus.com.br telefone: (19) 3231 4511 --------------------------------------------------------------- Treinamento Linguagem Java: Fundamentos *** Desconto de 10% para assinantes da Dicas-L *** Dextra Sistemas - 29 e 30 de julho http://www.dextra.com.br/servicos/treinamento/java/jfund.htm --------------------------------------------------------------- Utilização do JavaCC na construção de um compilador =================================================== O programa JavaCC é um gerador de analisador sintático que produz código Java. Ele permite que uma determinada linguagem seja definida de maneira simples, por meio de uma notação semelhante à EBNF. Como saída produz o código-fonte de algumas classes Java que implementam os analisadores léxico e sintático para aquela linguagem. Provê também maneiras de incluir, junto à definição da linguagem, código Java para, por exemplo, construir-se a árvore de derivação do programa analisado. O JavaCC foi inicialmente desenvolvido pela Sun que depois de algum tempo passou seu desenvolvimento para a Metamata Inc. que, depois, foi incorporada pela Webgain Inc. Sua versão encontra-se num repositório da própria Sun. Para os interessados em conhecer melhor o JavaCC, sua página na Internet é https://javacc.dev.java.net/. Na página pode-se encontrar ainda um link para uma série de gramáticas prontas para utilização pelo JavaCC. São gramáticas, por exemplo, de Java, C, C++, SQL, HTML, e muitas outras. O JavaCC define uma linguagem própria para descrição, em um único arquivo, do analisador léxico e do analisado sintático. Iniciando com o analisador léxico, esta linguagem permite que cada token seja definido na forma de uma expressão regular que pode ser tão simples como TOKEN : { < CLASS: "class" > } ou mais complexos como TOKEN : { < string_constant: // constante string como "abcd bcda" "\""( ~["\"","\n","\r"])* "\"" > } Em ambos os casos, os tokens definidos entre < > serão utilizados como constantes inteiras, acessíveis dentro do analisador léxico. Além de tokens, podem ser definidos no analisador léxico quais caracteres ou expressões devem ser ignorados e também os tokens especiais que são tokens que não são passados para o analisador sintático mas são armazenados e podem ser recuperados a partir de um token normal. As declarações para o analisador sintático correspondem às produções da gramática que se deseja implementar. O JavaCC utiliza a técnica descendente recursiva de análise. Nessa abordagem cada não terminal da gramática é implementado através de um método que, quando chamado, procura reconhecer na entrada a estrutura do não terminal. Seguindo a filosofia da análise descendente recursiva, as declarações dos não terminais são parecidas com a declaração de um método. A diferença é que o corpo do não terminal possui as produções descritas através de seqüências de tokens e estruturas de repetição, escolhas ou opcionais. Um exemplo simples retirado dos exemplos do próprio JavaCC é mostrado a seguir. Nele, além da produção propriamente dita, associou-se código Java que é executado quando ocorre o casamento da entrada com uma parte da produção. void Input() : { int count; } { count=MatchedBraces()