2012-05-29 11 views
5

dizelerini ayrıştırmak için javascript kodunda Rhino ayrıştırıcısını kullanıyorum Rhino ayrıştırıcısında yeniyim. Herhangi bir html dosyasında javascript kodunun Özet Sözdizimi Ağacı'nı ayıklamak için bu rhino ayrıştırıcısını javascript kodunda kullanabilir miyim? Eğer bu kadarını başlatmalıyım. Bu, javascript'te kullanılan anahtar kelimeler ve sözcükler arasındaki oranın hesaplanması için kodun AST'sini analiz etmek, ortak şifre çözme düzenlerini tanımlamak ve fromCharCode() gibi belirli işlev çağrısı çağrılarının oluşumlarını hesaplamak içindir. şifre çözme işlemi için sıkça kullanılan eval() ve bazı dize işlevleri ve sürücü tarafından indirilen exploitlerin çalıştırılması.javascript

+0

: AST API [Rhino 1.7R3] (eklenmiştir https://developer.mozilla.org/en-US/ Burada

oranı tanımlayıcısına anahtar kelimeyi hesaplar basit bir örnek docs/New_in_Rhino_1.7R3) – McDowell

cevap

3

Bildiğim kadarıyla, Rhino'daki JavaScript'ten AST'ye erişemezsiniz. Yine de Esprima ayrıştırıcısına bakarım. JavaScript ile yazılmış eksiksiz bir JavaScript ayrıştırıcısıdır ve kod analizi yapmak için basit bir API'ye sahiptir. Bilginize

var tokens = esprima.parse(script, { tokens: true }).tokens; 
var identifierCount = 0; 
var keywordCount = 0; 

tokens.forEach(function (token) { 
    if (token.type === 'Keyword') { 
     keywordCount++; 
    } 
    else if (token.type === 'Identifier') { 
     identifierCount++; 
    } 
}); 

var ratio = keywordCount/identifierCount; 
+0

Bu ayrıştırıcı, yukarıdaki kodun benim için çalıştığı gerçekten çok iyiydi Teşekkür ederim. Bu ayrıştırıcı için bir öğretici sağlayabilir miyim böylece javscript – user1335906

+0

içinde bir web sayfasının javascript kodunun AST ayıklamak için henüz çok şey yapmadım, bu yüzden böyle şeyler ile herhangi bir deneyimim yok. 'Parse' işlevi AST'yi döndürür, bu yüzden çok zor olmamalıdır. Dokümantasyon http://esprima.org/doc/index.html adresindedir ve yazarın blogunda (http://ariya.ofilabs.com/) bunun nasıl kullanılacağına dair bazı örnekleri vardır. Umarım bu yardımlar. –