Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda em criar um simulador de compilador


murilojssilva

Pergunta

Olá, gostaria de ajuda. Estou fazendo um programa que simula um compilador, cuja entrada é essa:
"Curso " + " de" + "Programação" // string + string + string
"Dia " + 8 + "de Outubro" // string + int
"Brasil, " + (3 + (2+1) + 5) + " de Setembro de " + 2000 // string + (soma de inteiros) + string + int
"Dia " + (2+1) // string + concatenação de int
"Dia " + 2 + 1 // string + soma de int
1 + 1.5 + 2 // soma de int + float + int com int sendo convertido em float
1 + 2 + 3 // soma de int
"Semestre " + 2000.1 // string + float retornando string
E a saída deve ser essa:
"Curso de Programação"
"Dia 8 de Outubro"
"Brasil, de Setembro de 2000"
"Dia 3"
"Dia 21"
4.50
6
"Semestre 2000.10"

Por enquanto meu código está assim: // Sei que têm alguns erros

#include <stdio.h>

#include <string.h>

#include <stdlib.h>

#define IN 1 // dentro das aspas

#define OUT 0 // fora das aspas

#define INA 2

void main()

{

char c,d,s[400],aux[100],auxf[100],a[20];

int n,i=0,j=0, soma = 0,stai = OUT,staf = OUT, par = OUT,estpar = 0,estasp = 0,state = OUT,estnum = 0,k=0;

float num, somaf = 0.0;

while ((c=getchar())!=EOF)

{

if (c == '.' && par == IN && estasp == IN)

{

staf = IN;

if (isdigit(d))

auxf[j++] = d;

auxf[j++] = c;

}

else if (isdigit© && par == IN)

{

estnum = 1;

if (staf == OUT)

{

n = c - '0';

soma += n;

n = 0;

}

else if (staf == IN)

{

auxf[j++] = c;

auxf[j++] = '0';

auxf[j++] = '\0';

num = atof(auxf);

somaf += num;

auxf[0]='\0';

j=0;

staf = OUT;

}

}

else if (c == '\n')

{

if (estasp == IN ||estpar == IN || estnum == IN && estasp == IN)

{

s[i++] = '"';

s[i++] = c;

}

if (par == IN)

{

if (soma != 0 && somaf == 0.0)

{

sprintf(aux, "%d", soma);

for (j = 0; j<strlen(aux);j++)

a[k++] = aux[j];

aux[0] = '\0';

j=0;

soma = 0;

}

else if (soma != 0 && somaf != 0.0)

{

somaf += (float) soma;

sprintf(aux, "%f", somaf);

for (j = 0; j<strlen(aux);j++)

a[k++] = aux[j];

aux[0] = '\0';

}

else if (soma == 0 && somaf != 0.0)

{

sprintf(aux, "%f", somaf);

for (j = 0; j<strlen(auxf);j++)

s[i++] = auxf[j];

aux[0] = '\0';

}

}

staf = OUT;

j = 0;

k = 0;

soma = 0;

somaf = 0.0;

state = OUT;

estpar = OUT;

estasp = OUT;

estnum = OUT;

}

if (c == '"')

{

estasp = IN;

if (state == OUT)

{

s[i++] = c;

state = IN;

}

else if (state == IN)

{

state = INA;

}

}

else if (c == '(')

{

estpar = IN;

if (par == OUT)

par = IN;

else if (par = IN)

par = INA;

}

else if (c == ')')

{

if (par == INA)

par == IN;

else if (par ==IN)

par == OUT;

}

else if (c == '+')

{

i --;

}

else if (isalpha© || c == ' ' && state == IN || state == INA)

s[i++] = c;

d = c;

}

s = '\0';

puts(s);

}

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,7k
×
×
  • Criar Novo...