E-folioA 2017/2018

Da wiki Wiki Universidade Aberta
Revisão em 10h41min de 21 de janeiro de 2019 por 1100896 (Discussão | contribs) (Criou a página com "E-fólio A: máximo 4 valores Pretende-se construir um compilador da linguagem LittleC. No e-fólio A, reportar-nos-emos apenas às análises léxica e sintática. O progra...")
(dif) ← Revisão anterior | Revisão atual (dif) | Revisão seguinte → (dif)

E-fólio A: máximo 4 valores

Pretende-se construir um compilador da linguagem LittleC. No e-fólio A, reportar-nos-emos apenas às análises léxica e sintática. O programa deve ler um ficheiro de entrada, detectar eventuais erros e no fim escrever uma mensagem a dizer se o reconhecimento foi feito com sucesso ou não.

Assim, deve começar por construir um analisador léxico, em flex, com as seguintes características: Deve reconhecer números nos seguintes formatos: números inteiros (positivos, negativos e zero); números com casas decimais (separadas por um ponto); números em notação científica (ex: 5e-10); Deve reconhecer as seguintes palavras-chave da linguagem: if, else, while, for. Deve reconhecer os operadores condicionais e aritmáticos: ==,!=,>,<,>=,<=,+,-,*,/. Deve reconhecer o operador de atribuição: = Deve reconhecer identificadores (variáveis e nomes de funções), que podem começar por uma letra ou pelo caráter '_', seguido de letras, dígitos ou '_'. Deve reconhecer os outros símbolos usados na linguagem: ;,(,),{,}. Deve reconhecer os espaços em branco, isto é, os carateres ' ' (espaço), a tabulação e a mudança de linha.

Após a conclusão do analisador léxico, pode iniciar a construção de um analisador sintáctico (bison ou C) que reconheça a linguagem LittleC, onde: - a instrução condicional if-else tem a forma if(condição){bloco de instruções} else {bloco de instruções} (NOTA: o else é sempre obrigatório, bem como as chavetas, podendo o bloco de instruções ser vazio) - o ciclo while tem a forma while(condição){bloco de instruções} - o ciclo for tem a forma para(atribuição do valor inicial;condição;incremento na forma de atribuição) {bloco de instruções} - todas as instruções de atribuição terminam com ';' - qualquer identificador que não seja uma palavra chave será uma variável e não precisa ser declarada; - o programa correrá sequencialmente a partir da primeira instrução, não sendo precisa nenhuma função (como a função main no C) para iniciar o programa.

Bom trabalho!

Nota: se tiver alguma dúvida ou verificar alguma falha no enunciado, coloque essa questão no fórum.

Exemplo de um programa em LittleC:

i=0; x=0;

while(i<10){

 x=x+i;
 i=i+1;

}

if(x<50){

 x=50;

} else{}

y=0; for(j=0;j<5;j=j+1){

 y = y + x - j;

}

Formato de entrega: o trabalho deve ser enviado com todos os ficheiro contidos num ficheiro ZIP, incluindo os analisadores léxicos e sintáticos, bem como um pequeno relatório (não mais de 3 páginas) a explicar as opções tomadas, e um ficheiro readme.txt a explicar como devem ser compilados os ficheiros de modo a obter o compilador, bem como a explicar os argumentos do mesmo.