Difference between revisions of "Compiladores/Projecto de Compiladores/Perguntas e Respostas sobre o Desenvolvimento (FAQ)"

From Wiki**3

< Compiladores‎ | Projecto de Compiladores
(Compilação e localização de "expression_type")
Line 4: Line 4:
 
{{TOCright}}
 
{{TOCright}}
  
== Bibliotecas e Interfaces ==
+
== Problemas Gerais de Compilação ==
  
 
'''Q:''' Se tiver uma biblioteca '''libteste.a''' compilada a partir de '''a.h''' e de '''b.h''' e um programa que a usa fazendo #include de '''a.h''' e de '''b.h''', não consigo compilar o programa sem ter os '''.h''' originais?<br>
 
'''Q:''' Se tiver uma biblioteca '''libteste.a''' compilada a partir de '''a.h''' e de '''b.h''' e um programa que a usa fazendo #include de '''a.h''' e de '''b.h''', não consigo compilar o programa sem ter os '''.h''' originais?<br>
 
'''R:''' Se o programa cliente usa os nomes '''a.h''' e '''b.h''', então eles têm de existir (mesmo que não sejam os originais). Em geral, a interface ('''.h''') de uma biblioteca é independente do código utilizado na sua produção: podem existir '''.h''' (C/C++) para bibliotecas produzidas a partir de Fortran, por exemplo. Um exemplo concreto é a interface para o standard I/O do C: em C está acessível via '''stdio.h''' e em C++ via '''cstdio'''.
 
'''R:''' Se o programa cliente usa os nomes '''a.h''' e '''b.h''', então eles têm de existir (mesmo que não sejam os originais). Em geral, a interface ('''.h''') de uma biblioteca é independente do código utilizado na sua produção: podem existir '''.h''' (C/C++) para bibliotecas produzidas a partir de Fortran, por exemplo. Um exemplo concreto é a interface para o standard I/O do C: em C está acessível via '''stdio.h''' e em C++ via '''cstdio'''.
 
== Compilação e localização de "expression_type" ==
 
  
 
'''Q:''' Ao executar "make" para construir o projecto, estou a ter o seguinte erro:
 
'''Q:''' Ao executar "make" para construir o projecto, estou a ter o seguinte erro:
  /usr/include/cdk/ast/expression_node.h:47:38: fatal error: semantics/expression_type.h: No such file or directory
+
  /usr/include/cdk/ast/expression_node.h:47:38: fatal error: target/expression_type.h: No such file or directory
 
  compilation terminated.
 
  compilation terminated.
 
  make: *** [zu_parser.tab.o] Error 1
 
  make: *** [zu_parser.tab.o] Error 1
Line 20: Line 18:
 
(ou seja, a variável tem de ser definida sem qualquer valor)
 
(ou seja, a variável tem de ser definida sem qualquer valor)
  
== Bibliotecas e Interfaces ==
+
'''Q:''' Estou a compilar o projecto e ocorre o erro: "undefined referente to vtable" na class basic_ast_visitor. Que se está a passar?<br/>
 +
'''R:''' O erro ocorre no projecto, geralmente na hierarquia dos "visitors", devido a não terem sido definidos todos os métodos declarados nos "visitors". Note-se que não basta declará-los no cabeçalho da classe: é necessário definir os seus corpos, mesmo que sejam vazios.
 +
 
 +
== Compilação de Programas "Simple" ==
 +
 
 +
O nome do compilador corresponde sempre ao nome da linguagem. O processo envolve três etapas: compilação do código fonte, compilação do código gerado (pelo yasm/nasm) e ligação dos módulos binários no executável final (incluindo a '''librts.a''').
 +
 
 +
Assumindo a distribuição do Simple na directoria actual e a directoria "examples" com os programas de teste, as seguintes acções seriam necessárias para compilar o exemplo 1 ('''ex1.spl'''):
 +
 
 +
./simple examples/ex1.spl
 +
yasm -felf examples/ex1.asm
 +
ld -o examples/ex1 examples/ex1.o -lrts
 +
 
 +
Os vários comandos podem diferir nos parâmetros exactos (dependendo do ambiente). Por exemplo, se a '''librts.a''' não estiver numa localização conhecida pelo '''ld''', então é necessário dar o comando da seguinte forma:
 +
 
 +
ld -o examples/ex1 examples/ex1.o -L$HOME/compiladores/root/usr/lib -lrts
  
 
[[category:Projecto de Compiladores]]
 
[[category:Projecto de Compiladores]]
 
[[category:Compiladores]]
 
[[category:Compiladores]]
 
[[category:Ensino]]
 
[[category:Ensino]]

Revision as of 14:06, 24 January 2017

AVISOS - Avaliação em Época Normal

Esclarecimento de dúvidas:

  • Consultar sempre o corpo docente atempadamente: presencialmente ou através do endereço oficial da disciplina [1].
  • Não utilizar fontes de informação não oficialmente associadas ao corpo docente (podem colocar em causa a aprovação à disciplina).
  • Não são aceites justificações para violações destes conselhos: quaisquer consequências nefastas são da responsabilidade do aluno.

Requisitos para desenvolvimento, material de apoio e actualizações do enunciado (ver informação completa em Projecto de Compiladores):

  • O material de apoio é de uso obrigatório e não pode ser alterado.
  • Verificar atempadamente (mínimo de 48 horas antes do final de cada prazo) os requisitos exigidos pelo processo de desenvolvimento.

Processo de avaliação (ver informação completa em Avaliação do Projecto):

  • Datas: 2017/03/24 17:00 (inicial); 2017/04/21 17:00 (intercalar); 2017/05/22 17:00 (final); 2017/05/22-2017/05/25 (teste prático).
  • Todas as entregas são cruciais para o bom desenvolvimento do projecto, sendo obrigatórias: a não realização de uma entrega implica a exclusão da avaliação do projecto e, por consequência, da avaliação da disciplina.
  • Verificar atempadamente (até 48 horas antes do final de cada prazo) os requisitos exigidos pelo processo de avaliação, incluindo a capacidade de acesso ao repositório.
  • Apenas se consideram para avaliação os projectos existentes no repositório oficial. Apenas se considera para avaliação o ramo 'main'.
  • Trabalhos não presentes no repositório no final do prazo têm classificação 0 (zero) (não são aceites outras formas de entrega). Não são admitidas justificações para atrasos em sincronizações do repositório. A indisponibilidade temporária do repositório, desde que inferior a 24 horas, não justifica atrasos na submissão de um trabalho.
  • A avaliação do projecto pressupõe o compromisso de honra de que o trabalho correspondente foi realizado pelos alunos correspondentes ao grupo de avaliação.
  • Fraudes na execução do projecto terão como resultado a exclusão dos alunos implicados do processo de avaliação em curso.
Material de Uso Obrigatório
As bibliotecas CDK e RTS de apoio ao desenvolvimento do projecto são de uso obrigatório:
A máquina virtual, fornecida para desenvolvimento do projecto, já contém todo o material de apoio.
Uso Obrigatório: Repositório GIT
Apenas se consideram para avaliação os projectos existentes no repositório GIT oficial. Apenas se considera para avaliação o ramo main.

Trabalhos não presentes no repositório no final do prazo têm classificação 0 (zero) (não são aceites outras formas de entrega). Não são admitidas justificações para atrasos em sincronizações do repositório. A indisponibilidade temporária do repositório, desde que inferior a 24 horas, não justifica atrasos na submissão de um trabalho.

Problemas Gerais de Compilação

Q: Se tiver uma biblioteca libteste.a compilada a partir de a.h e de b.h e um programa que a usa fazendo #include de a.h e de b.h, não consigo compilar o programa sem ter os .h originais?
R: Se o programa cliente usa os nomes a.h e b.h, então eles têm de existir (mesmo que não sejam os originais). Em geral, a interface (.h) de uma biblioteca é independente do código utilizado na sua produção: podem existir .h (C/C++) para bibliotecas produzidas a partir de Fortran, por exemplo. Um exemplo concreto é a interface para o standard I/O do C: em C está acessível via stdio.h e em C++ via cstdio.

Q: Ao executar "make" para construir o projecto, estou a ter o seguinte erro:

/usr/include/cdk/ast/expression_node.h:47:38: fatal error: target/expression_type.h: No such file or directory
compilation terminated.
make: *** [zu_parser.tab.o] Error 1

Que se passa?
R: O problema ocorre devido ao valor incorrecto de uma variável no ficheiro Makefile do projecto. O valor da variável ROOT deve ser definido como se segue:

ROOT =

(ou seja, a variável tem de ser definida sem qualquer valor)

Q: Estou a compilar o projecto e ocorre o erro: "undefined referente to vtable" na class basic_ast_visitor. Que se está a passar?
R: O erro ocorre no projecto, geralmente na hierarquia dos "visitors", devido a não terem sido definidos todos os métodos declarados nos "visitors". Note-se que não basta declará-los no cabeçalho da classe: é necessário definir os seus corpos, mesmo que sejam vazios.

Compilação de Programas "Simple"

O nome do compilador corresponde sempre ao nome da linguagem. O processo envolve três etapas: compilação do código fonte, compilação do código gerado (pelo yasm/nasm) e ligação dos módulos binários no executável final (incluindo a librts.a).

Assumindo a distribuição do Simple na directoria actual e a directoria "examples" com os programas de teste, as seguintes acções seriam necessárias para compilar o exemplo 1 (ex1.spl):

./simple examples/ex1.spl
yasm -felf examples/ex1.asm
ld -o examples/ex1 examples/ex1.o -lrts

Os vários comandos podem diferir nos parâmetros exactos (dependendo do ambiente). Por exemplo, se a librts.a não estiver numa localização conhecida pelo ld, então é necessário dar o comando da seguinte forma:

ld -o examples/ex1 examples/ex1.o -L$HOME/compiladores/root/usr/lib -lrts