📄 programaprincipal.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 + -