Lista1 - Lista de Exerccios 1 Os exerccios desta lista...

Info iconThis preview shows pages 1–3. Sign up to view the full content.

View Full Document Right Arrow Icon
Lista de Exercícios 1 Os exercícios desta lista foram retirados das provas da disciplina Construção de Compiladores ministrada pelo Prof. José de Oliveira Guimarães. 1. Abaixo é mostrado parte da gramática de uma linguagem. Program ::= Command { Command } Command ::= IfCommand | … | ForEachCommand ForEachCommand ::= “foreach” Id “in” Id “do” Command A partir destas regras, faça: a) as classes Command e ForEachCommand da ASA. Estas classes devem ter um método para gerar código em C. Não é necessário fazer o construtor, mas faça todos os outros métodos. Não se esqueça das heranças. Você pode assumir que existe apenas um comando foreach em todo o programa e que nomes de variáveis nesta linguagem nunca começam com sublinhado (_). Estas observações o ajudaram na hora de gerar código em C. abstract class Command{ abstract public void GenC(); } Class forEachCommand() extends Command{ Private Variable x, v; Private Command command; Public void genC(){ ArrayType t = (ArrayType) v.getType(); Sout(“ for (int _i = 0;” + (t.limiteSuperior() – t.limiteInferior()) +”; _i++){”); Sout(“ “ + x.getName() + “=” + v.getName() + “[_i]”); Command.genC(); Sout(“ } “); } }
Background image of page 1

Info iconThis preview has intentionally blurred sections. Sign up to view the full version.

View Full DocumentRight Arrow Icon
b) o método forEachCommand do analisador sintático. Naturalmente, construa a ASA durante esta análise e faça a análise semântica. O primeiro Id do comando foreach deve ser uma variável de um tipo básico. O segundo Id deve ser uma variável cujo tipo é um vetor e os elementos deste vetor devem ter tipo igual ao tipo da primeira variável. Por exemplo, em foreach x in v do write(x); se v tiver sido declarado como “var v : array[1. .10] of integer;”, então o tipo de x deve ser integer. Admita que a ASA possua uma classe Array Type subclasse de Type com os seguintes métodos: int getLimInferior(), int getLimSuperior(), Type getElemType(). Estes métodos retornariam, para o objeto da ASA que representa o tipo de v, 1, 10 e um ponteiro para o objeto apontado por Type.integerType. O comando foreach acima imprime todos os elementos do vetor v. Você possivelmente usará a classe Type. Esta possui subclasses IntegerType, CharType, BooleanType e ArrayType. Type possui variáveis estáticas integerType, charType e booleanType. Cada uma delas aponta para o único objeto do programa de cada subclasse de Type que é tipo básico. A tabela de símbolos é referenciada pela variável st e possui métodos Object put(Object name, Object value) e Object get(Object name). O primeiro insere um símbolo e o segundo faz a busca por símbolo. 2. a) Faça uma tabela de símbolos a ser utilizada em um compilador de Java. Assuma que existem três níveis léxicos: um para classes, um para métodos e variáveis de instância e outro para variáveis locais e parâmetros. Faça a classe que é a tabela de símbolos com as interfaces dos métodos e a declaração dasvariáveis de instância. Naturalmente, coloque nomes dos métodos e das variáveis de instância auto-
Background image of page 2
Image of page 3
This is the end of the preview. Sign up to access the rest of the document.

Page1 / 14

Lista1 - Lista de Exerccios 1 Os exerccios desta lista...

This preview shows document pages 1 - 3. Sign up to view the full document.

View Full Document Right Arrow Icon
Ask a homework question - tutors are online