Compiladores/Aula Prática 04: Difference between revisions
From Wiki**3
Created page with "== Tópicos == == Problema == == Resolução == category:Compiladores category:Ensino" |
No edit summary |
||
| (7 intermediate revisions by the same user not shown) | |||
| Line 1: | Line 1: | ||
{{TOCright}} | |||
== Tópicos == | == Tópicos == | ||
Análise lexical com a ferramenta Flex. | |||
== | == Exercício 1: Identificação de referências em HTML == | ||
== | * [[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 15: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).