·
Ciência da Computação ·
Compiladores
Send your question to AI and receive an answer instantly
Recommended for you
4
Compilador-Portugol-Analise-Lexica-Sintatica
Compiladores
MACKENZIE
6
Análise Léxica e Sintática para uma Linguagem Baseado em C
Compiladores
MACKENZIE
1
Algoritmo para Encontrar o Maior de Dois Números Inteiros
Compiladores
MACKENZIE
4
Compilador Portugol Analise Lexica e Sintatica Trabalho Academico
Compiladores
MACKENZIE
2
Orientações Éticas para Desenvolvimento de Trabalhos Práticos em Programação
Compiladores
MACKENZIE
1
Algoritmo para Encontrar o Maior de Dois Numeros Inteiros - Exemplo
Compiladores
MACKENZIE
4
Análise Léxica e Sintática
Compiladores
MACKENZIE
4
Compilador-Analise-Semantica-e-Geracao-de-Codigo-Intermediario
Compiladores
MACKENZIE
4
Análise Léxica e Sintática para uma Linguagem Baseada em C
Compiladores
MACKENZIE
6
Análise Léxica e Sintática para uma Linguagem Baseado em C
Compiladores
MACKENZIE
Preview text
Na fase 1 do projeto foi implementado um Compilador que fazia a leitura de um arquivofonte na linguagem CLite e realizava a análise léxica e sintática do programa fonte O objetivo dessa fase da implementação do Compilador é implementar as fases de Análise Semântica e Geração de Código Intermediário a implementação dessa fase será baseada na implementação realizada na fase 1 Análise Semântica Na Análise Semântica o seu Compilador deverá verificar se as construções sintáticas da fase anterior estão coerentes o Compilador implementado na fase anterior deve manter as funcionalidades de identificação de erros léxicos e sintáticos e adicionalmente emitir as mensagens de erros semânticos caso ocorram Basicamente o Compilador fará somente a verificação semântica para variáveis em dois momentos Declaração Na seção de declaração de variável declaracao o Compilador deve garantir que os identificadores usados no nome de variável sejam únicos ou seja não podemos ter duas variáveis declaradas com o mesmo identificador caso aconteça uma repetição de identificador o Compilador deve ser finalizado informando que ocorreu um erro semântico Para isso deverá ser implementado uma minitabela de símbolos que armazenará as variáveis declaradas identificador endereço e tipo O endereço da variável seria a ordem em que a variável foi declarada dessa forma a primeira variável tem endereço 0 a segunda endereço 1 e assim sucessivamente Corpo do programa As variáveis declaradas na seção de declaração podem ser referenciadas nos comandos de atribuição nas expressões e nas chamadas das funções de entrada e saída Assim toda vez que uma variável for referenciada no corpo de programa o Compilador deve verificar se a variável foi declarada corretamente na seção de declaração de variáveis caso não tenha sido declarada é gerado um erro semântico explicativo e compilador é finalizado Para simplificar a análise semântica e geração de código intermediário o Compilador não precisará realizar a distinção entre expressões inteiras e lógicas assim o Compilador só terá variáveis e expressões do tipo int portanto não teremos construções do tipo 25xy e nem atribuição das constantes true e false às variáveis por exemplo varfalse Geração de Código Intermediário A Geração de Código Intermediário será baseada na proposta do livro do professor Tomasz Kowaltowiski Implementação de Linguagem de Programação Seção 103 Análise Sintática e Geração de Código basicamente será necessário inserir a geração das instruções da MEPA nas funções mutuamente recursivas que implementam a gramática do analisador sintático para tanto basta imprimir as instruções da MEPA nas mesmas funções que fazem análise sintática e semântica do Compilador Por exemplo considere a produção abaixo para o comando comandowhile conforme visto na gramática da fase 1 do Compilador comandowhile while expressao comando A implementação da função correspondente que gera código intermediário para produção do comandowhile seria Suponha que a função proximorotulo retorna o próximo rótulo consecutivo positivo por exemplo L1 L2 L3 Importante Como todas as funções são recursivas devese tomar o cuidado na atribuição das variáveis que vão receber o retorno da função e a ordem de chamadas da função proximorotulo Como explicado acima vamos considerar somente variáveis do tipo int dessa forma a produção operando precisa ser modificada para operando identificador numero expressao E a sua implementação seria A função buscatabelasimbolos recebe como parâmetro o atributo atributoID do átomo corrente um vetor de caracteres e retorna o endereço da variável armazenado na minitabela de símbolos caso o identificador não conste da tabela de símbolos a função gera um erro semântico que é informado na tela do computador em seguida o processo de compilação é finalizado Lembrese que a variável InfoAtomo é uma variável global do tipo TInfoAtomo e é atualizada na função consome e armazena os atributos do átomo reconhecido no analisador léxico Importante Com o compilador é case sensitive ou seja para var1 e Var1 são considerados identificadores distintos Execução do Compilador fase 2 A seguir temos um outro programa em CLite que calcula o fatorial de um número informado ao programa considere que o programa exemplo1 não possui erros léxicos e sintáticos 1 2 3 4 5 6 7 8 9 10 11 12 13 14 programa calcula o fatorial de um numero lido int mainvoid int fatNumcont scanfNum fat 0x1 cont 0x2 whilecont Num fat fatcont cont cont 0x1 printffat imprime o fatorial calculado Saída do compilador L1 L2 INPP AMEM 3 LEIT ARMZ 1 CRCT 1 ARMZ 0 CRCT 2 ARMZ 2 NADA CRVL 2 CRVL 1 CMEG DVSF L2 CRVL 0 CRVL 2 MULT ARMZ 0 CRVL 2 CRCT 1 SOMA ARMZ 2 DSVS L1 NADA CRVL 0 IMPR PARA declaração de variáveisfat end0 Num end1 e cont end2 scanfNum fat 1 cont 2 tradução da expressão condicional do while cont Num fat fatcont cont cont 1 printffat Observações importantes O trabalho será avaliado de acordo com os seguintes critérios Funcionamento do programa caso programa apresentarem warning ao serem compilados serão penalizados Após a execução o programa deve finalizar com retorno igual a 0 Caso o programa não compile ou não execute será penalizado com a NOTA 00 O trabalho deve ser desenvolvido na linguagem C e será testado usando o compilador do MinGW com VSCode para configurar sua máquina no Windows acesse httpswwwdougdevbr2022InstalacoeseconfiguracoesparaprogramaremCusandooVS Code O quão fiel é o programa quanto à descrição do enunciado principalmente ao formato de do arquivo de entrada Clareza e organização programas com código confuso linhas longas variáveis com nomes não significativos e desorganizado sem indentação sem comentários também serão levados em consideração na correção
Send your question to AI and receive an answer instantly
Recommended for you
4
Compilador-Portugol-Analise-Lexica-Sintatica
Compiladores
MACKENZIE
6
Análise Léxica e Sintática para uma Linguagem Baseado em C
Compiladores
MACKENZIE
1
Algoritmo para Encontrar o Maior de Dois Números Inteiros
Compiladores
MACKENZIE
4
Compilador Portugol Analise Lexica e Sintatica Trabalho Academico
Compiladores
MACKENZIE
2
Orientações Éticas para Desenvolvimento de Trabalhos Práticos em Programação
Compiladores
MACKENZIE
1
Algoritmo para Encontrar o Maior de Dois Numeros Inteiros - Exemplo
Compiladores
MACKENZIE
4
Análise Léxica e Sintática
Compiladores
MACKENZIE
4
Compilador-Analise-Semantica-e-Geracao-de-Codigo-Intermediario
Compiladores
MACKENZIE
4
Análise Léxica e Sintática para uma Linguagem Baseada em C
Compiladores
MACKENZIE
6
Análise Léxica e Sintática para uma Linguagem Baseado em C
Compiladores
MACKENZIE
Preview text
Na fase 1 do projeto foi implementado um Compilador que fazia a leitura de um arquivofonte na linguagem CLite e realizava a análise léxica e sintática do programa fonte O objetivo dessa fase da implementação do Compilador é implementar as fases de Análise Semântica e Geração de Código Intermediário a implementação dessa fase será baseada na implementação realizada na fase 1 Análise Semântica Na Análise Semântica o seu Compilador deverá verificar se as construções sintáticas da fase anterior estão coerentes o Compilador implementado na fase anterior deve manter as funcionalidades de identificação de erros léxicos e sintáticos e adicionalmente emitir as mensagens de erros semânticos caso ocorram Basicamente o Compilador fará somente a verificação semântica para variáveis em dois momentos Declaração Na seção de declaração de variável declaracao o Compilador deve garantir que os identificadores usados no nome de variável sejam únicos ou seja não podemos ter duas variáveis declaradas com o mesmo identificador caso aconteça uma repetição de identificador o Compilador deve ser finalizado informando que ocorreu um erro semântico Para isso deverá ser implementado uma minitabela de símbolos que armazenará as variáveis declaradas identificador endereço e tipo O endereço da variável seria a ordem em que a variável foi declarada dessa forma a primeira variável tem endereço 0 a segunda endereço 1 e assim sucessivamente Corpo do programa As variáveis declaradas na seção de declaração podem ser referenciadas nos comandos de atribuição nas expressões e nas chamadas das funções de entrada e saída Assim toda vez que uma variável for referenciada no corpo de programa o Compilador deve verificar se a variável foi declarada corretamente na seção de declaração de variáveis caso não tenha sido declarada é gerado um erro semântico explicativo e compilador é finalizado Para simplificar a análise semântica e geração de código intermediário o Compilador não precisará realizar a distinção entre expressões inteiras e lógicas assim o Compilador só terá variáveis e expressões do tipo int portanto não teremos construções do tipo 25xy e nem atribuição das constantes true e false às variáveis por exemplo varfalse Geração de Código Intermediário A Geração de Código Intermediário será baseada na proposta do livro do professor Tomasz Kowaltowiski Implementação de Linguagem de Programação Seção 103 Análise Sintática e Geração de Código basicamente será necessário inserir a geração das instruções da MEPA nas funções mutuamente recursivas que implementam a gramática do analisador sintático para tanto basta imprimir as instruções da MEPA nas mesmas funções que fazem análise sintática e semântica do Compilador Por exemplo considere a produção abaixo para o comando comandowhile conforme visto na gramática da fase 1 do Compilador comandowhile while expressao comando A implementação da função correspondente que gera código intermediário para produção do comandowhile seria Suponha que a função proximorotulo retorna o próximo rótulo consecutivo positivo por exemplo L1 L2 L3 Importante Como todas as funções são recursivas devese tomar o cuidado na atribuição das variáveis que vão receber o retorno da função e a ordem de chamadas da função proximorotulo Como explicado acima vamos considerar somente variáveis do tipo int dessa forma a produção operando precisa ser modificada para operando identificador numero expressao E a sua implementação seria A função buscatabelasimbolos recebe como parâmetro o atributo atributoID do átomo corrente um vetor de caracteres e retorna o endereço da variável armazenado na minitabela de símbolos caso o identificador não conste da tabela de símbolos a função gera um erro semântico que é informado na tela do computador em seguida o processo de compilação é finalizado Lembrese que a variável InfoAtomo é uma variável global do tipo TInfoAtomo e é atualizada na função consome e armazena os atributos do átomo reconhecido no analisador léxico Importante Com o compilador é case sensitive ou seja para var1 e Var1 são considerados identificadores distintos Execução do Compilador fase 2 A seguir temos um outro programa em CLite que calcula o fatorial de um número informado ao programa considere que o programa exemplo1 não possui erros léxicos e sintáticos 1 2 3 4 5 6 7 8 9 10 11 12 13 14 programa calcula o fatorial de um numero lido int mainvoid int fatNumcont scanfNum fat 0x1 cont 0x2 whilecont Num fat fatcont cont cont 0x1 printffat imprime o fatorial calculado Saída do compilador L1 L2 INPP AMEM 3 LEIT ARMZ 1 CRCT 1 ARMZ 0 CRCT 2 ARMZ 2 NADA CRVL 2 CRVL 1 CMEG DVSF L2 CRVL 0 CRVL 2 MULT ARMZ 0 CRVL 2 CRCT 1 SOMA ARMZ 2 DSVS L1 NADA CRVL 0 IMPR PARA declaração de variáveisfat end0 Num end1 e cont end2 scanfNum fat 1 cont 2 tradução da expressão condicional do while cont Num fat fatcont cont cont 1 printffat Observações importantes O trabalho será avaliado de acordo com os seguintes critérios Funcionamento do programa caso programa apresentarem warning ao serem compilados serão penalizados Após a execução o programa deve finalizar com retorno igual a 0 Caso o programa não compile ou não execute será penalizado com a NOTA 00 O trabalho deve ser desenvolvido na linguagem C e será testado usando o compilador do MinGW com VSCode para configurar sua máquina no Windows acesse httpswwwdougdevbr2022InstalacoeseconfiguracoesparaprogramaremCusandooVS Code O quão fiel é o programa quanto à descrição do enunciado principalmente ao formato de do arquivo de entrada Clareza e organização programas com código confuso linhas longas variáveis com nomes não significativos e desorganizado sem indentação sem comentários também serão levados em consideração na correção