Analisador Sintático - Compiladores

Evaluando propuestas

Publicado: Hace 3 meses Plazo: No definido Propuestas: 2 Freelancers interesados: 2

Abierto

Descripción:

Analisador Sintático:
Construir uma classe que implemente um analisador sintático. Essa classe deve se chamar
“Sintatico”, e deve ser um analisador descendente recursivo.
O objetivo desse módulo é verificar se uma seqüência de tokens pode ser gerada pela gramática
definida abaixo. O analisador sintático deve ser montado num esquema Produtor/Consumidor,
com o analisador léxico (classe Lexico).
O analisador sintático deve ser o ponto de entrada do compilador, e deve chamar o
procedimento lexico.nextToken() cada vez que um novo token seja necessário.
O uso da tabela de símbolos torna-se fundamental neste ponto, auxiliando no controle de escopo.
Esse controle será realizado no próximo passo de implementação.
Verificações Semânticas:
O módulo Sintático deve também executar as diversas verificações semânticas requeridas pela
linguagem. No caso do presente projeto, será exigida minimamente as verificações semânticas
definidas abaixo:
1. Todo identificador deve ser declarado ANTES de ser utilizado em qualquer operação.
Considere que o identificador usado como nome do programa é declarado na cláusula que inicia
um programa.
2. Um identificador só pode ser declarado uma vez. Não haverá controle de escopo no programa
(todos os identificadores compartilham o mesmo escopo global).
Gramática:
A gramática abaixo descreve as regras sintáticas da linguagem de programação que deve ser
implementada. O aluno deve dedicar um tempo ao estudo dessa gramática antes de iniciar a
implementação do analisador sintático. Esse estudo tem como objetivo identificar pontos de
melhoria, como ambigüidades, recursões à esquerda e possibilidades de fatoração.
O aluno deve construir uma tabela sintática preditiva, que auxiliará na construção das funções de
reconhecimento do analisador.
Como parte da entrega desta etapa, o aluno deve incluir um relatório contendo todas as
alterações que julgou serem necessárias.
Notação: palavras em letras minúsculas representam tokens (símbolos terminais da gramática).
Tratam-se dos mesmos tokens definidos na 1a Etapa do projeto, mas grafados em letras
minúsculas. Espaços em branco são usados para fins de clareza na leitura das produções, não
devendo interferir no processo de reconhecimento.
Produções
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
S -> program id term BLOCO end_prog term
BLOCO -> begin CMDS end
| CMD
CMDS -> declare DCFLW
| if IFFLW CMDS
| REPF CMDS
| REPW CMDS
| id IDFLW
| ε
IFFLW -> l_par EXP_L r_par then BLOCO CNDB
IDFLW -> attrib_op ATRIB2 term CMDS
DCFLW -> id type term CMDS
CMD -> DECL
| COND
| REP
| ATRIB
DECL -> declare id type term
COND -> if l_par EXP_L r_par then BLOCO CNDB
CNDB -> else BLOCO
| ε
ATRIB -> id attrib_op ATRIB2 term
ATRIB2 -> id ATR_ID
| VAL_N ATR_VN
| l_par EXP_N r_par EXP_L2
| literal | logic_val /* para não mudar numeração */
ATR_ID -> EXP_L2
ATR_VN -> EXP_N2 AT_VN2
AT_VN2 -> rel_op EXP_N
| ε
EXP_L -> logic_val EXP_L2
| id EXP_L2
| VAL_N EXP_N2 rel_op EXP_N
| l_par EXP_N r_par
EXP_L2 -> rel_op EXP_N EXP_L3
| EXP_L3
EXP_L3 -> logic_op EXP_L
| ε
EXP_N -> id EXP_N2
| VAL_N EXP_N2
| l_par EXP_N r_par EXP_N2
EXP_N2 -> addsub_op EXP_N
| multdiv_op EXP_N
| ε
VAL_N -> num_int
| num_float
REP -> REPF
| REPW
REPF -> for id attrib_op EXP_N to EXP_N BLOCO
REPW -> while l_par EXP_L r_par BLOCO

Posso enviar o pdf.

Categoria: IT & Programação
Subcategoria: Programação
Isso é um projeto ou uma posição de trabalho?: Um projeto
Tenho, atualmente: Eu tenho especificações
Experiência nesse tipo de projeto: Não (Eu nunca gerenciei esse tipo de projeto)
Disponibilidade requerida: Conforme necessário
Funções necessárias: Desenvolvedor

Freelancers que ya aplicaron para este trabajo

Adilson Neto Me considero um desenvolvedor de soluções, tenho experiência com desenvolvimento web e de sistemas, porém meu foco principal é resolver problemas e não utilizar tecnologias. + detalles

Crea tu propio proyecto

¿Buscas un freelancer para realizar un proyecto similar? Crea tu propio proyecto y recibirás ofertas de los mejores freelancers.