\documentclass[11pt,a4paper]{article}
\usepackage[portuguese]{babel}
\usepackage[latin1]{inputenc}
\usepackage{vector}
\usepackage{fullpage}
\usepackage{amssymb}
\usepackage{amstext}

\begin{document}

\selectlanguage{portuguese}

\begin{tabular*}{\linewidth}{l@{\extracolsep{\fill}}r}
  Graduação em Ciência da Computação           & DCC/ICEx/UFMG \\
  \textit{Fundamentos da Teoria da Computação} & $1^{\uvec{o}}$ semestre de 2003\\
  Professor: Newton José Vieira                & \\
  email: \texttt{nvieira@dcc.ufmg.br}          & \\
  \textbf{Terceiro Trabalho Prático}           & Entrega: 30/07/2003
\end{tabular*}

\bigskip

\noindent {\bf Observações:}
\begin{itemize}
\item O trabalho deverá ser feito por 1 ou 2 alunos. Em hipótese alguma serão aceitos grupos com mais de 2 alunos.
\item Deverá ser entregue um relatório completo em papel.
\item O trabalho deverá ser entregue todo de uma vez. Ou seja, após a entrega, não será aceita complementação {\bf em hipótese alguma}.
\item Se o trabalho for entregue com $n$ dias de atraso, {\bf qualquer que seja o motivo}, serão descontados $2^n$ pontos.
\end{itemize}

\section{Um calculador}

O objetivo deste trabalho prático \'e gerar um calculador baseado em uma gramática livre de contexto. Para gerar o programa, a ferramenta \emph{Bison}\footnote{Ver \texttt{http://www.gnu.org/software/bison/bison.html}\\. O programa está instalado nas máquinas do DCC.} deve ser usada.

Responda às perguntas:

\begin{enumerate}
\item Fa\c ca uma gramática livre do contexto que gera expressões aritméticas da forma seguinte:
  \begin{itemize}
  \item Uma expressão é constituída de um ou mais termos ($T$) somados/subtraídos.
  \item Um termo é constituído de um ou mais fatores ($F$) multiplicados/divididos.
  \item Um fator é formado por uma parte ($P$) positiva ou negativa.
  \item Uma parte é um terminal $t$ ou, recursivamente, uma expressão aritmética entre parênteses.
  \end{itemize}
\item Escreva um programa que indica se uma expressão aritmética é correta ou não. Para isso, você deve implementar a GLC da questão anterior e usar o programa \emph{bison}, disponível no rede do DCC, para gerar um código \texttt{C}. Verifique o bom funcionamento do seu programa com algumas expressões aritméticas.
\item Modifique seu programa para que ele:
  \begin{itemize}
  \item ignore espa\c cos em branco;
  \item permita o reconhecimento de uma expressão por linha;
  \item termine quando o usuário digitar o caráter \texttt{EOF} ($^{\wedge}$\texttt{d}).
  \end{itemize}
\item Modifique seu programa para que ele retorne o valor da expressão formecida, se ela estiver correta, assumindo que os terminais são inteiros.  Verifique o bom funcionamento do seu programa com algumas expressões aritméticas.
\end{enumerate}

\section{A ser entregues}

Vocês devem entregar, no papel, as respostas às perguntas. Além disso, vocês têm que mandar compactados (zip, tar, tgz, etc) os arquivos fontes das diferentes versões do seu programa, com um \texttt{Makefile}, para o endereço seguinte: \texttt{ghuiban@dcc.ufmg.br}. Os arquivos fontes devem ficar num diretório que tem por nome o(s) login(s) da(s) pessoa(s). Por exemplo, no caso do monitor, os arquivos deveriam ficar num diretório \texttt{ghuiban/}.

Todos os comentários relacionados com este trabalho prático (dificuldade, quantidade de trabalho, etc.) são bem-vindos.

\end{document}

% LocalWords:  complementação Bison Sun GLC bison EOF zip tar tgz Makefile
% LocalWords:  login ghuiban
