2012-12-05 32 views
2

我有這樣的代碼,我想用計算霍爾斯特德複雜:在計算Halstead複雜度時,什麼算作PHP中的運算符和操作數?

<?php 
$words = explode("\n", file_get_contents('http://www.puzzlers.org/pub/wordlists/unixdict.txt')); 
foreach ($words as $word) { 
    $chars = str_split($word); 
    sort($chars); 
    $anagram[implode($chars)][] = $word; 
} 

$best = max(array_map('count', $anagram)); 
foreach ($anagram as $ana) 
    if (count($ana) == $best) 
     print_r($ana); 
?> 

我理解它是如何做的原則(見http://en.wikipedia.org/wiki/Halstead_complexity_measures),但我不明白,也不能徹底搜索後找出,是:算什麼算作操作符,什麼算作操作數?似乎沒有商定的定義。

下面是一個簡單的示例(http://www.win.tue.nl/~aserebre/2IS55/2009-2010/9.pdf),我可以遵循,但不能在上面的示例中應用。

+0

對於php而言不是一個很好的方法 – 2012-12-05 22:54:10

回答

1

我的理解這個指標,運營商所有運營商(==+++,等等)和關鍵字(forifbreakfunction)您所使用的語言。 操作數將是每個標識符,即函數名稱(自寫函數和內置函數),變量名稱和常量。

要將例如:
運營商foreachas是強制性的,所以我不指望它),[](這就像+=,只是appanding,而不是添加某事),if==
操作數$wordsexplode$wordstr_split$charssort$anagramimplode$bestmaxarray_map$anacoundprint_r

通知:此代碼指標似乎並沒有被經常使用PHP,所以我也沒有找到這個指標上的PHP代碼中使用的任何參考或示例。

+0

根據維基百科,他們甚至計算開放'('爲'printf('。https://en.wikipedia.org/wiki/Halstead_complexity_measures。除非我計算錯誤? –

+0

@AlexKwitny是的,他們將每一對括號都算作一個操作符 – AbcAeffchen

+0

我讀過「(因爲是強制性的,所以我沒有計算它」,我看到你突出顯示'as',我以爲你在談論' ('也許你對我的Halstead問題有意見http://stackoverflow.com/questions/32364095/how-to-count-operators-and-operands-for-halstead-complexity-measures?noredirect=1#comment52602473_32364095 –