30.2. "codeop" --- Compilar código Python
*****************************************

**Código Fonte:** Lib/codeop.py

======================================================================

O módulo "codeop" fornece utilitários sobre os quais o loop de
leitura-execução-exibição do Python pode ser emulado, como é feito no
módulo "code". Como resultado, você provavelmente não deseja usar o
módulo diretamente; se você deseja incluir tal loop em seu programa,
você provavelmente deseja usar o módulo "code".

Há duas partes para esta tarefa:

1. Ser capaz de dizer se uma linha de entrada completa uma instrução
   Python: em suma, dizer se deve exibir '">>>"' ou '"..."' em
   seguida.

2. Lembrar quais instruções futuras o usuário inseriu, para que as
   entradas subsequentes possam ser compiladas com essas declarações
   em vigor.

O módulo "codeop" fornece uma maneira de fazer cada uma dessas coisas
e uma maneira de fazer as duas coisas.

Para fazer apenas a primeira:

codeop.compile_command(source, filename="<input>", symbol="single")

   Tenta compilar *source*, que deve ser uma string de código Python e
   retornar um objeto código se *source* for um código Python válido.
   Nesse caso, o atributo de nome de arquivo do objeto código será
   *filename*, cujo padrão é "'<input>'". Retorna "None" se *source*
   *não* é um código Python válido, mas é um prefixo de código Python
   válido.

   Se houver um problema com *source*, uma exceção será levantada.
   "SyntaxError" é levantada se houver sintaxe Python inválida, e
   "OverflowError" ou "ValueError" se houver um literal inválido.

   The *symbol* argument determines whether *source* is compiled as a
   statement ("'single'", the default) or as an *expression*
   ("'eval'").  Any other value will cause "ValueError" to  be raised.

   Nota:

     É possível (mas não provável) que o analisador sintático pare de
     analisar com um resultado bem-sucedido antes de chegar ao final
     da fonte; neste caso, os símbolos finais podem ser ignorados em
     vez de causar um erro. Por exemplo, uma barra invertida seguida
     por duas novas linhas pode ser seguida por lixo arbitrário. Isso
     será corrigido quando a API para o analisador for melhor.

class codeop.Compile

   Instâncias desta classe têm métodos "__call__()" idênticos em
   assinatura à função embutida "compile()", mas com a diferença de
   que se a instância compilar o texto do programa contendo uma
   instrução "__future__", a instância se "lembra" e compila todos os
   textos de programa subsequentes com a instrução em vigor.

class codeop.CommandCompiler

   Instâncias desta classe têm métodos "__call__()" idênticos em
   assinatura a "compile_command()"; a diferença é que se a instância
   compila o texto do programa contendo uma instrução "__future__", a
   instância se "lembra" e compila todos os textos do programa
   subsequentes com a instrução em vigor.
