Você está na página 1de 8

Arquivo: /home/aluno/Download/Hotmail/AnalisadorLexico.

java

Pgina 1 de 8

/********************************************************************************* * * * * * esta classe herda da clase Analiza e recebe como argumento pelo seu construtor, uma string formada * pelo codigo lido do arquivo informado pelo usurio. * * o mtodo principal da classe o nucleoDeAnalise() responsvel pela analise lxica proprimente dita. * * * * */

import java.io.FileNotFoundException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.List; import java.util.Scanner;

public class AnalisadorLexico extends Analisador{

public AnalisadorLexico( String codigo ){ super( codigo ); }

public void nucleoDeAnalise( String nome_do_arquivo_do_codigo ){

if( codigo == null ){ System.out.print("\n\num erro ocorreu na referenciacao do arquivo!"); return; } if( !erro() ) geraTabelaDeSimbolos( nome_do_arquivo_do_codigo );

Arquivo: /home/aluno/Download/Hotmail/AnalisadorLexico.java

Pgina 2 de 8

return; }

public boolean erro(){ /* * retorna false se nenhum erro lexico for encontrado, ou true se houver erro. * * */

AnalisadorDeErro

analisadordeerro = new AnalisadorDeErro( super.codigo );

analisadordeerro.analisa(); System.out.print( analisadordeerro ); return analisadordeerro.getErro(); }

private boolean geraTabelaDeSimbolos(

String nome_do_arquivo_do_codigo ){

List List List List List

< < < < <

String String String String String

> > > > >

token_pal_reserv token_identif token_const_num token_opera token_st_saida

= = = = =

new new new new new

ArrayList ArrayList ArrayList ArrayList ArrayList

< < < < <

String String String String String

>(); >(); >(); >(); >();

PrintWriter Scanner

tabela entrada

= null; = new Scanner(System.in );

try{ tabela = new PrintWriter( String.format("%s_tabela_de_simbolos.txt", nome_do_arquivo_do_codigo)); } catch( SecurityException exception1 ){} catch( FileNotFoundException exception2 ){}

Arquivo: /home/aluno/Download/Hotmail/AnalisadorLexico.java
token_pal_reserv.add( "\r\n====================== token_identif.add( "\r\n====================== \n" );

Pgina 3 de 8

\r\nPALAVRAS RESERVADAS\r\n======================\r\n\r\n" ); \r\nIDENTIFICADORES\r\n======================\r\n\r

token_const_num.add( "\r\n====================== \r\nCONSTANTES NUMERICAS\r\n======================\r\n\r \n" ); token_opera.add( "\r\n====================== \r\nOPERADORES\r\n======================\r\n\r \n" ); token_st_saida.add( "\r\n====================== \r\nSTRINGS DE SAIDA\r\n======================\r\n\r\n" );

analisador( token_pal_reserv, token_identif, token_const_num, token_opera, token_st_saida

);

tabela.print( tabela.print( tabela.print( tabela.print( tabela.print(

token_pal_reserv token_identif token_const_num token_opera token_st_saida

+ + + + +

"\r\n\r\n" "\r\n\r\n" "\r\n\r\n" "\r\n\r\n" "\r\n\r\n"

); ); ); ); );

System.out.print("mostrar tabela de simbolos? ( 1 - sim , 0 - nao )" ); if( entrada.nextInt() == 1 ){ System.out.print( "\n\n\n============= System.out.print( System.out.print( System.out.print( System.out.print( System.out.print( } token_pal_reserv token_identif token_const_num token_opera token_st_saida + + + + + TABELA DE SIMBOLOS "\n\n" "\n\n" "\n\n" "\n\n" "\n\n" ); ); ); ); ); =============\n\n\n" );

if( tabela != null) tabela.close(); return true; }

private final void analisador( List < String > token_pal_reserv, List < String List < String List < String List < String

> > > >

token_identif, token_const_num, token_opera, token_st_saida

){

Arquivo: /home/aluno/Download/Hotmail/AnalisadorLexico.java

Pgina 4 de 8

String saida String lista char int

codigo string_aux cursor;

= ""; = "";

// recebe o codigo sem comentarios nem strings de // recebe o token para ser gravado na sua respectiva = ' '; // caractere corrente. // contem a posicao corrente.

car_lido

char simbolo_inicial_1[] = { 'a','b','c','d','e','f','g','h','i','j','l','m','n','o','p','q','r', 's','t','u','v','x','y','k','w','z',

'A','B','C','D','E','F','G','H','I','J','L','M','N','O','P','Q','R' 'S','T','U','V','X','Y','K','W','Z'};

char

simbolo_inicial_2[]

= { '0','1','2','3','4','5','6','7','8','9' };

boolean identificador = false; boolean const_numerica = false;

for( cursor = 0 ; cursor

<

super.codigo.length() ;

cursor++ ){ // remove os cursor++ ){

if( super.codigo.charAt( cursor ) == '['){ comentarios for( cursor++ ; cursor <

super.codigo.length() ;

if( super.codigo.charAt( cursor ) == ']') break; } continue; } if( super.codigo.charAt( cursor ) == '"'){ de saida string_aux = ""; string_aux += super.codigo.charAt( cursor ); for( cursor++ ; cursor < super.codigo.length() ; cursor++ ){ // e grava as strings

string_aux += super.codigo.charAt( cursor ); if( super.codigo.charAt( cursor ) == '"') break; } string_aux += "\r\n";

Arquivo: /home/aluno/Download/Hotmail/AnalisadorLexico.java
if( !jaIncluidoEmLista( string_aux , token_st_saida.add( string_aux); continue; } codigo += super.codigo.charAt( cursor ); } token_st_saida ) )

Pgina 5 de 8

for( cursor = 0 ;

cursor < codigo.length() ; cursor++ ){

car_lido = codigo.charAt( cursor );

if( car_lido == ' ' car_lido == car_lido == car_lido == continue;

|| car_lido == '\n'|| '(' || car_lido == ')' || '{' || car_lido == '}' || ' ' )

if( car_lido == '#'){ string_aux = ""; string_aux += car_lido;

// grava palavras reservadas.

for( cursor++ ; cursor < codigo.length() ; cursor++ ){ car_lido = codigo.charAt( cursor ); if( car_lido == ' ' car_lido == car_lido == car_lido == break; string_aux += car_lido; } string_aux += "\r\n"; if( !jaIncluidoEmLista( string_aux , token_pal_reserv.add( string_aux); continue; } token_pal_reserv ) ) || car_lido == '\n'|| '(' || car_lido == ')' || '{' || car_lido == '}' || ' ' )

Arquivo: /home/aluno/Download/Hotmail/AnalisadorLexico.java

Pgina 6 de 8

for( int i = 0 ; i < simbolo_inicial_1.length ; i++ ){ // grava identificadores. if( car_lido == simbolo_inicial_1[i] ){ string_aux = ""; identificador = true; string_aux += car_lido; for( cursor++ ; cursor < codigo.length() ; cursor++ ){ car_lido = codigo.charAt( cursor ); if( car_lido == ' ' car_lido == car_lido == car_lido == break; string_aux += car_lido; } string_aux += "\r\n"; break; } } if( identificador ){ identificador = false; if( !jaIncluidoEmLista( string_aux , token_identif ) ) token_identif.add( string_aux ); continue; } || car_lido == '\n'|| '(' || car_lido == ')' || '{' || car_lido == '}' || ' ' )

for( int i = 0 ; i < simbolo_inicial_2.length ; i++ ){ // grava constantes numericas.

Arquivo: /home/aluno/Download/Hotmail/AnalisadorLexico.java
if( car_lido == simbolo_inicial_2[i] ){ string_aux = ""; const_numerica = true; string_aux += car_lido;

Pgina 7 de 8

for( cursor++ ; cursor < codigo.length() ; cursor++ ){ car_lido = codigo.charAt( cursor ); if( car_lido == ' ' car_lido == car_lido == car_lido == break; string_aux += car_lido; } string_aux += "\r\n"; break; } } if( const_numerica ){ const_numerica = false; if( !jaIncluidoEmLista( string_aux , token_const_num ) ) token_const_num.add( string_aux ); continue; } || car_lido == '\n'|| '(' || car_lido == ')' || '{' || car_lido == '}' || ' ' )

if( car_lido == '<' || car_lido == '!' || car_lido == '>' || car_lido == '=' || ){ car_lido == '|' string_aux = ""; string_aux += car_lido; car_lido = codigo.charAt( ++cursor ); if( car_lido != ' ' && car_lido != '\n'&& car_lido != '(' && car_lido != ')' && ' ) car_lido != ' string_aux += car_lido; string_aux += "\r\n"; if( !jaIncluidoEmLista( string_aux , token_opera ) ) token_opera.add( string_aux );

// trata operadores

Arquivo: /home/aluno/Download/Hotmail/AnalisadorLexico.java
continue; } } return; }

Pgina 8 de 8

private final boolean jaIncluidoEmLista( String token , List < String > lista ){

for( int i = 0 ; i < lista.size() ; i++ ){ if( token.equals( lista.get( i )) ) return true; }

return false; }