Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
cpython
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
Batuhan Osman TASKAYA
cpython
Commits
5d42b5b7
Kaydet (Commit)
5d42b5b7
authored
Eki 22, 1998
tarafından
Guido van Rossum
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
Moved compile_command() to a file of its own (codeop.py).
üst
c41c1a98
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
3 additions
and
82 deletions
+3
-82
code.py
Lib/code.py
+3
-82
No files found.
Lib/code.py
Dosyayı görüntüle @
5d42b5b7
"""Utilities
dealing with code objects
.
"""Utilities
needed to emulate Python's interactive interpreter
.
Inspired by similar code by Jeff Epler and Fredrik Lundh.
"""
import
sys
import
string
import
traceback
def
compile_command
(
source
,
filename
=
"<input>"
,
symbol
=
"single"
):
r"""Compile a command and determine whether it is incomplete.
Arguments:
source -- the source string; may contain \n characters
filename -- optional filename from which source was read; default "<input>"
symbol -- optional grammar start symbol; "single" (default) or "eval"
Return value / exceptions raised:
- Return a code object if the command is complete and valid
- Return None if the command is incomplete
- Raise SyntaxError or OverflowError if the command is a syntax error
(OverflowError if the error is in a numeric constant)
Approach:
First, check if the source consists entirely of blank lines and
comments; if so, replace it with 'pass', because the built-in
parser doesn't always do the right thing for these.
Compile three times: as is, with \n, and with \n\n appended. If
it compiles as is, it's complete. If it compiles with one \n
appended, we expect more. If it doesn't compile either way, we
compare the error we get when compiling with \n or \n\n appended.
If the errors are the same, the code is broken. But if the errors
are different, we expect more. Not intuitive; not even guaranteed
to hold in future releases; but this matches the compiler's
behavior from Python 1.4 through 1.5.2, at least.
Caveat:
It is possible (but not likely) that the parser stops parsing
with a successful outcome before reaching the end of the source;
in this case, trailing symbols may be ignored instead of causing an
error. For example, a backslash followed by two newlines may be
followed by arbitrary garbage. This will be fixed once the API
for the parser is better.
"""
# Check for source consisting of only blank lines and comments
for
line
in
string
.
split
(
source
,
"
\n
"
):
line
=
string
.
strip
(
line
)
if
line
and
line
[
0
]
!=
'#'
:
break
# Leave it alone
else
:
source
=
"pass"
# Replace it with a 'pass' statement
err
=
err1
=
err2
=
None
code
=
code1
=
code2
=
None
try
:
code
=
compile
(
source
,
filename
,
symbol
)
except
SyntaxError
,
err
:
pass
try
:
code1
=
compile
(
source
+
"
\n
"
,
filename
,
symbol
)
except
SyntaxError
,
err1
:
pass
try
:
code2
=
compile
(
source
+
"
\n\n
"
,
filename
,
symbol
)
except
SyntaxError
,
err2
:
pass
if
code
:
return
code
try
:
e1
=
err1
.
__dict__
except
AttributeError
:
e1
=
err1
try
:
e2
=
err2
.
__dict__
except
AttributeError
:
e2
=
err2
if
not
code1
and
e1
==
e2
:
raise
SyntaxError
,
err1
from
codeop
import
compile_command
class
InteractiveInterpreter
:
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment