Compiladores
Trimestre 2011 Invierno
Tarea 2 (para el 8 de marzo de 2011)

Revise las definiciones de operadores, palabras reservadas, espacios en blanco, números enteros e identificadores en C (un buen lugar es el apéndice del libro El lenguaje de programación C, 2da edición de Kernighan y Ritchie). Escriba un programa lexlexNN.c o lexlexNN.cpp que lea un archivo de texto llamado entrada.txt y que escriba un archivo de texto llamado salida.txt que contenga una secuencia de tokens. Estos tokens quedarán representados por las cadenas:
y en la salida estarán separados por nuevas líneas. Cualquier token de la entrada que no corresponda con uno de estos tokens será indicado en la salida con la cadena ERROR.

Ejemplo de archivo entrada.txt Ejemplo de parte del archivo salida.txt Explicación de qué fue lo que pasó en esta línea
read x; { entrada de un entero }
if 0 < x then { no calcula si x <= 0 }
   fact := 1;
   repeat
      fact := fact * x;
      x := x - 1;
   until x = 0;
   write fact { salida factorial de x }
end
IDENT
IDENT
ERROR
ERROR
IDENT
IDENT
IDENT
IDENT
ERROR
IF
ENTERO
MENOR
IDENT
IDENT
...
read
x
;
{
entrada
de
un
entero
}
if
0
<
x
then
...


* Palabras reservadas en C para esta tarea

auto default float register struct volatile
break do for return switch while
case double goto short typedef
char else if signed union asm
const enum int sizeof unsigned fortran
continue extern long static void noalias
* Operadores en C para esta tarea

() [] -> PIZQ PDER CIZQ CDER FLECHA
! ~ ++ -- NOT NOTBIT INC DEC
* / % POR DIV MOD
+ - MAS MENOS
< <= > >= MENOR MENIG MAYOR MAYIG
== != IGUAL DIF
& ANDBIT
^ XORBIT
| ORBIT
&& AND
|| OR
= ASIG
, COMA