Difference between revisions of "Compiladores/Aula Prática 04"

From Wiki**3

< Compiladores
(Tópicos)
 
(6 intermediate revisions by the same user not shown)
Line 1: Line 1:
 +
{{TOCright}}
 
== Tópicos ==
 
== Tópicos ==
 
Análise lexical com a ferramenta Flex.
 
Análise lexical com a ferramenta Flex.
  
== Problema ==
+
== Exercício 1: Identificação de referências em HTML ==
  
== Resolução ==
+
* [[Extracting HREF attributes from HTML files]]
 +
 
 +
== Exercício 2: Identificação de literais em Pascal ==
 +
 
 +
Realize um programa que identifique os seguintes elementos de um programa em Pascal: identificadores, números inteiros, números reais em vírgula flutuante de precisão simples e cadeias de caracteres. Ignore a possibilidade de a cadeia de caracteres conter aspas (").
 +
 
 +
Na realização do exercício, assuma as seguintes definições feitas pelo YACC (nesta fase, apenas interessa saber que as definições correspondem a tokens e que a %union serve para comunicar dados entre o Flex e o YACC -- ver exemplos no Compact):
 +
 
 +
%union{ int i; float r; char *s; }
 +
%token<nowiki><s></nowiki> ID STR
 +
%token<nowiki><i></nowiki> INT
 +
%token<nowiki><r></nowiki> REAL
 +
%token ASSIGN LE GE NE DIV MOD AND NIL NOT BEGin END
 +
%token IF THEN ELSE WHILE DO REPEAT UNTIL FOR TO DOWNTO
 +
%token PROGRAM LABEL CONST TYPE VAR PROCEDURE FUNCTION
 +
%token PACKED ARRAY RECORD OF SET FILe CASE WITH GOTO
 +
 
 +
Note-se que os nomes dos tokens correspondem a macros em C/C++ e que devem ser escolhidos por forma a não colidirem com outras definições (e.g., nomes de classes).
 +
 
 +
== Exercício 3: Identificação de Cadeias de Caracteres ==
 +
Realize um programa que permita extrair, imprimindo no terminal, as cadeias de caracteres em programas nas linguagens: Smalltalk, C e PostScript.
 +
 
 +
Em Smalltalk, uma cadeia de caracteres é delimitada pelo carácter <nowiki>'\''</nowiki>, podendo este carácter ser introduzido no cadeira através da sua duplicação: '''<nowiki>'batata''cebola'</nowiki>'''.
 +
 
 +
Em C, uma cadeia de caracteres é delimitada pelo carácter aspa <nowiki>'\"'</nowiki>, podendo este carácter ser introduzido na cadeia através da sequência <nowiki>(\")</nowiki>: '''<nowiki>"batata\"cebola"</nowiki>'''.
 +
 
 +
Em PostScript, uma cadeia de caracteres é delimitada por parenteses curvos, podendo os parenteses ser introduzidos livremente no texto se estiverem emparelhados. Parenteses não emparelhados podem também ser introduzidos se precedidos do carácter (\): '''<nowiki>(batata()cebola)</nowiki>'''.
 +
 
 +
== Resoluções ==
 +
 
 +
* Ver [[The Flex Lexical Analyzer]].
  
 
[[category:Compiladores]]
 
[[category:Compiladores]]
 
[[category:Ensino]]
 
[[category:Ensino]]

Latest revision as of 17:31, 9 February 2015

Tópicos

Análise lexical com a ferramenta Flex.

Exercício 1: Identificação de referências em HTML

Exercício 2: Identificação de literais em Pascal

Realize um programa que identifique os seguintes elementos de um programa em Pascal: identificadores, números inteiros, números reais em vírgula flutuante de precisão simples e cadeias de caracteres. Ignore a possibilidade de a cadeia de caracteres conter aspas (").

Na realização do exercício, assuma as seguintes definições feitas pelo YACC (nesta fase, apenas interessa saber que as definições correspondem a tokens e que a %union serve para comunicar dados entre o Flex e o YACC -- ver exemplos no Compact):

%union{ int i; float r; char *s; } 
%token<s> ID STR 
%token<i> INT 
%token<r> REAL 
%token ASSIGN LE GE NE DIV MOD AND NIL NOT BEGin END 
%token IF THEN ELSE WHILE DO REPEAT UNTIL FOR TO DOWNTO 
%token PROGRAM LABEL CONST TYPE VAR PROCEDURE FUNCTION 
%token PACKED ARRAY RECORD OF SET FILe CASE WITH GOTO

Note-se que os nomes dos tokens correspondem a macros em C/C++ e que devem ser escolhidos por forma a não colidirem com outras definições (e.g., nomes de classes).

Exercício 3: Identificação de Cadeias de Caracteres

Realize um programa que permita extrair, imprimindo no terminal, as cadeias de caracteres em programas nas linguagens: Smalltalk, C e PostScript.

Em Smalltalk, uma cadeia de caracteres é delimitada pelo carácter '\'', podendo este carácter ser introduzido no cadeira através da sua duplicação: 'batata''cebola'.

Em C, uma cadeia de caracteres é delimitada pelo carácter aspa '\"', podendo este carácter ser introduzido na cadeia através da sequência (\"): "batata\"cebola".

Em PostScript, uma cadeia de caracteres é delimitada por parenteses curvos, podendo os parenteses ser introduzidos livremente no texto se estiverem emparelhados. Parenteses não emparelhados podem também ser introduzidos se precedidos do carácter (\): (batata()cebola).

Resoluções