| 
				     | 
				
| (One intermediate revision by the same user not shown) | 
| Line 1: | 
Line 1: | 
 | == Tópicos ==
  |  | #REDIRECT [[ist:Compiladores/Aula Prática 04]]  | 
 | 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:Ensino]]
  |  |