TrabalhosGratuitos.com - Trabalhos, Monografias, Artigos, Exames, Resumos de livros, Dissertações
Pesquisar

OS COMPILADORES

Por:   •  17/10/2019  •  Trabalho acadêmico  •  1.035 Palavras (5 Páginas)  •  145 Visualizações

Página 1 de 5

void atribui() : {} 
{
expressao()
}
void expressao() : {} 
{
fator() ( fator() )*
}
void fator() : {} 
{
| < INTEIRO> | numero()
}
void numero() : {} 
{
milhar() | centena() | dezena() (( unidade() )? | unidade())
}
void unidade() : {} 
{
| | | | | | | |
}
void dezena() : {} 
{
| | | | | | | |
}
void centena() : {} 
{
| | | < QUATROCENTOS> | | | | |  
}
void milhar() : {} 
{
| |  
}

a := 1;
a := DCCXX + MM;
exibe a;
x := I; 
y := II; 
z := 3;
soma := x + y + z + 47;
exibe soma;

quem quiser depois eu passo a resp.

/* CompiladorExemplo.jj - Gerador de código intermediário e destino para o programa fonte completo
- O gerador de código destino se encontra na chamada (linha 23) do método estático:
GeradorCodigoDestino.geraCodigoAssembler(listaComandos);
*/
options {
JDK_VERSION = "1.5";
DEBUG_PARSER = false;
DEBUG_TOKEN_MANAGER = false;
}
PARSER_BEGIN(CompiladorExemplo)
import java.io.*;
import java.util.LinkedList;
public class CompiladorExemplo {
static Tabela tabela = new Tabela();
static LinkedList listaComandos;
public static void main(String args[]) throws ParseException {
CompiladorExemplo analisador = null;
try {
analisador = new CompiladorExemplo(new FileInputStream("prog_fonte.my"));
listaComandos = analisador.inicio();
// System.out.println(tabela.toString());
// System.out.println(listaComandos);
GeradorCodigoDestino.geraCodigoAssembler(listaComandos);
}
catch(FileNotFoundException e) {
System.out.println("Erro: arquivo não encontrado");
}
catch(TokenMgrError e) {
System.out.println("Erro léxico\n" + e.getMessage());
}
catch(ParseException e) {
System.out.println("Erro sintático\n" + e.getMessage());
}
}
}
PARSER_END(CompiladorExemplo)

SKIP : { " " | "\t" | "\r" | "\n" }

TOKEN [IGNORE_CASE] : {

}
TOKEN : {
< IDENT: (["a"-"z"])+ > |
< ATRIB: ":=" > |
< ADICAO: "+" > |
< PT_VIRG: ";" > |
< UM: "I" > |
< DOIS: "II" > |
< TRES: "III" > |
< QUATRO: "IV" > |
< CINCO: "V" > |
< SEIS: "VI" > |
< SETE: "VII" > |
< OITO: "VIII" > |
< NOVE: "IX" > |
< DEZ: "X" > |
< VINTE: "XX" > |
< TRINTA: "XXX" > |
< QUARENTA:"XL" > |
< CINQUENTA:"L" > |
< SESSENTA:"LX" > |
< SETENTA: "LXX" > |
< OITENTA: "LXXX" > |
< NOVENTA: "XC" > |
< CEM: "C" > |
< DUZENTOS: "CC" > |
< TREZENTOS: "CCC" > |
< QUATROCENTOS: "CD" > |
< QUINHENTOS : "D" > |
< SEISCENTOS: "DC" > |
< SETECENTOS: "DCC" > |
< OITOCENTOS: "DCCC" > |
< NOVECENTOS: "CM" > |
< MIL: "M" > |
< DOISMIL: "MM" > |
< TRESMIL: "MMM" >
}
LinkedList inicio() : {Comando com = null; LinkedList listaComandos = new LinkedList();}
{
( com = linhaComando()
{
listaComandos.add(com);
}
)*
{
return listaComandos;
}
}
Comando linhaComando() : {Comando com;} 
{
com = comando()
{
return com;
}
}
Comando comando() : {Comando com;} 
{
(
com = exibe()
|
com = atribui()
)
{
return com;
}
}
Comando exibe() : {Comando com; Token t;}
{
t =
{
com = new Comando('E',t.image,"");
return com;
}
}
Comando atribui() : {Simbolo simb; Token t; LinkedList listaExp; Comando com;} 
{
t=
{
simb = new Simbolo(t.image);
tabela.inclui(simb);
}
listaExp = expressao()
{
//System.out.println(listaExp);
com = new Comando('A',t.image,listaExp);
return com;
}
}
LinkedList expressao() : {LinkedList listaExp = new LinkedList(); Item item = null;} 
{
item = fator()
{
listaExp.add(item);
}

item = fator()
{
listaExp.add(item);
listaExp.add(new Item('o',"+"));
}

)*
{
return listaExp;
}
}
Item fator() : {Token t;Item item = null; int valorNumero;} 
{
t =
{
if(!tabela.isExiste(t.image))
System.out.println("Erro semântico \n A variável "+t.image+
" não foi inicializada");
item = new Item('v',t.image);
return item;
}
|
valorNumero = numero()
{
item = new Item('n',""+valorNumero);
return item;
}
}
int numero() : {int valorUnidade = 0, valorDezena = 0, valorCentena = 0, valorMilhar = 0;} 
{
(
valorMilhar = milhar() (valorCentena = centena())? (valorDezena = dezena())? ( valorUnidade = unidade() )?| valorCentena = centena() (valorDezena = dezena())? ( valorUnidade = unidade() )?| valorDezena = dezena() ( valorUnidade = unidade() )? | valorUnidade = unidade()
)
{
return valorMilhar + valorCentena + valorDezena + valorUnidade;
}
}
int unidade() : {} 
{
{ return 1; } |
{ return 2; } |
{ return 3; } |
{ return 4; } |
{ return 5; } |
{ return 6; } |
{ return 7; } |
{ return 8; } |
{ return 9; }
}

...

Baixar como (para membros premium)  txt (8.2 Kb)   pdf (89.6 Kb)   docx (555.7 Kb)  
Continuar por mais 4 páginas »
Disponível apenas no TrabalhosGratuitos.com