2016-03-30 28 views
1

Projem için C++ dosyasını belirtmem gerekiyor. Bunun için ben tokenize.generate_tokens kullanıyorum. Her satırda '' r '' yüzünden garip bir char alıyorum ve bir belirteç olarak ayrıştırılır. Jetonu saymak için bu karakterden kaçınmam gerekiyor. Dosyayı belirtebilmem için bunu nasıl yapacağımı bilmiyorum.python'da C++ programı tokenize

f = open("BM1A1.cpp","r") 
g = tokenize.generate_tokens(f.readline) 

ben şerit çalıştı() ancak, kendi özel işlevi oluşturmak gerekir generate_tokens yana

g = tokenize.generate_tokens(f.readline.strip()) 
error: 
'builtin_function_or_method' object has no attribute 'strip' 
+3

Şu anda sahip olduğunuz sorun bu değil, ancak daha sonra 'tokenize.generate_tokens' dosyasının C++ kaynak kodu değil Python kaynak kodu için olduğunu öğreneceksiniz. – orlp

+2

[Bu bağlantı] 'ya göz atmak isteyebilir (http://eli.thegreenplace.net/2011/07/03/parsing-c-in-python-with-clang). –

cevap

2

giriş argüman olarak çağrılabilir gerektiren hatayı vermek verir: Aşağıdaki kullanıyorum benim kodudur.

generate_tokens() jeneratörü taleb() yöntemiyle aynı arayüzü sağlayan bir çağrılabilir nesne olmalıdır bir bağımsız değişken, readline gerektirir dahili dosya nesneleri (bölüm dosya nesneleri bakınız). Fonksiyona yapılan her çağrı, bir giriş dizisini bir dizge olarak döndürmelidir. Diğer bir deyişle, readline, StopIteration'ı yükselterek tamamlandığını belirten bir satır olabilir. tokenize modül Python sözdizimi, C++ sözdizimi için tanımlanmış olması nedeniyle, Açıkçası

f = open("BM1A1.cpp","r") 
g = tokenize.generate_tokens(lambda: f.readline().strip()) 

, sen ayrıştırma garip sonucu karşılaşacağınız:

kolay yolu bir lambda yaratmaktır.

+0

Sadece bir satırdan geçmek, bundan sonra tokenize edilmez. – denis

+0

Jeneratör Tükettin mi? 'listesi (g) 'size jeton listesi verecektir. Ya da g: 'deyiminde belirteci için üzerlerinde yineleme yapabilirsiniz. –

+0

Evet, that.It sadece bu baskı yoktu: #include namespace std kullanarak; – denis