⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 programaprincipal.java

📁 small compiler written in java lexic, syntatic, semantic, and code generation implemented in java
💻 JAVA
字号:
/*
 *Programa Principal do compilador
 *cont閙 as regras de gram醫ica do parser
 *e as chamadas ao Analisador Lexico
 *
 * Autores:
 * Andre Luis Durao Abdo - 283999 
 * Mariana Izabella Seabra - 246946
 */

import java.io.*;
public class ProgramaPrincipal{

    final static int BEGIN =1;
    final static int END=2;
    final static int BYTE=3;
    final static int INTEGER=4;
    final static int BOOLEAN=5;
    final static int STRING=6;
    final static int FINAL=7;
    final static int WHILE=8;
    final static int IF=9;
    final static int THEN=10;
    final static int ELSE=11;
    final static int ENDIF=12;
    final static int ENDELSE=13;
    final static int ENDWHILE=14;
    final static int ATRIBUICAO=15;
    final static int ABREPARENTESES=16;
    final static int FECHAPARENTESES=17;
    final static int MENOR=18;
    final static int MAIOR=19;
    final static int IGUAL=20;
    final static int DIFERENTE=21;
    final static int MENORIGUAL=22;
    final static int MAIORIGUAL=23;
    final static int VIRGULA=24;
    final static int SOMA=25;
    final static int SUB=26;
    final static int MULT=27;
    final static int DIV=28;
    final static int PONTOEVIRGULA=29;
    final static int READLN=30;
    final static int WRITE=31;
    final static int WRITELN=32;
    final static int NOT=33;
    final static int AND=34;
    final static int OR=35;
    final static int ID=36;    
    final static int CONST=37; 
	 
    //tipos definidos para tipo-inteiro, tipo-l骻ico, tipo-byte e tipo-string
    final static int tipo_inteiro = 1;
    final static int tipo_logico  = 2;
    final static int tipo_byte    = 3;	 	 
    final static int tipo_string  = 4;	 	 
    //tipos definidos para classes classe-var  e classe-const.
    final static int classe_vazio = 0;	
    final static int classe_var   = 1;	 	 
    final static int classe_const = 2;		 	    
        
    int enderecoDados=16384;//inicio da memoria de dados
    int enderecoTemporarios=0;
    int contadorRotulos=0;

    //flag criado para sintetizar atributo [+|-] de Exps
    int flagExps=0;
    
    
    AnalisadorLexico AnLexico;
    int token;
    
    PrintWriter arquivo;
    
    
    void geraCodigo(String txt){        
        arquivo.println(txt);
    }
    
    int novoDadoConstanteString(int tamanho){
        int salvaVar=enderecoDados;
        enderecoDados+=tamanho;
        return salvaVar;
    }
    
    int novoDado(int tipoDado){
        int salvaVar=enderecoDados;
        if (tipoDado == tipo_byte || tipoDado == tipo_logico ){
            enderecoDados++;
        }else
            if (tipoDado == tipo_inteiro ){
                enderecoDados+=2;
            }else
                if (tipoDado == tipo_string ){
                    enderecoDados+=256;            
                }
        return salvaVar;           
    }
    
    int novoTemp(int tipoDado){
        int salvaVar=enderecoTemporarios;
        if (tipoDado == tipo_byte || tipoDado == tipo_logico ){
            enderecoTemporarios++;
        }else
            if (tipoDado == tipo_inteiro ){
                enderecoTemporarios+=2;
            }else
                if (tipoDado == tipo_string ){
                    enderecoTemporarios+=256;            
                }
        return salvaVar;
    }
    
    String novoRot(){
        int salvaVar = contadorRotulos;
        contadorRotulos++;
        String txt = "R"+contadorRotulos;
        return txt;        
    }
    

    //metodo converte valor inteiro devolvendo String com valor correspondente em hexa
    public String converteDec2Hex(int num){
        String saida="";        
        saida+=Integer.toHexString(new Integer(num))+"h";        
        return saida;
    }
    
    public ProgramaPrincipal(String nomeArq, String arqDestino){
        try{
            arquivo = new PrintWriter(new FileWriter(arqDestino));
        }
        catch(IOException e){
            System.out.println("Erro do sistema: "+e);
            System.exit(0);
        }
        AnLexico = new AnalisadorLexico(nomeArq);
        token=AnLexico.leProximo();
        S();
    }

    //M閠odo passa ERRO ocorrido para que possa ser parado o programa no momento em que o erro 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -