2011-04-07 26 views
2

嗨,我想開發靜態代碼分析規則,以便本地變量不會在其外部範圍中影子名稱。 你能幫助我確定是否使用與其外部範圍相同的名稱的塊/嵌套類,以及如何避免方法隱藏父母的成員方法。如何識別與其父/容器類相同名稱的本地變量

請幫我創建一個算法,以便我可以開發一個靜態代碼分析規則。

+0

你想分析哪種編程語言? – 2011-04-07 07:32:38

+0

我想爲c#.net編碼規則 – dotnetdeveloper 2011-04-07 08:23:20

回答

1

(編輯:OP最初沒有對目標語言清晰)

假設的Java,使用Java解析器,構建一個AST。實現以下算法:

for all Java source files F of interest 
    parse F 
    for all nodes N of F 
     if N is a "class declaration" for a class C 
      for all methods M under N 
       for all nodes m in M 
        if m is a declaration with name C 
         report "found " m " in " M " shadowing " C 
        endif 
       endfor 
      endfor 
     endif 
    endfor 
endfor 

這有點低效,因爲它可能會多次掃描一些子樹。

命名空間使這對C#和C++更爲複雜。如果你想爲這些語言做這個 ,我想你需要一個完整的解析器以及名稱解析(符號表)。 在這些語言中,聲明一個方法在類聲明「下」 ,所以簡單的樹搜索不會做到這一點。在這種情況下,您將爲 必須添加對名稱空間聲明的附加語法檢查,並驗證名稱空間 是否通過檢查符號表來引用已聲明的類。

對於C++,您可以使用Clang或我們的C++ Front End

我不確定你可以使用這個C#,因爲你需要符號表。也許Mono提供了足夠的訪問權限,但我認爲他們沒有處理C#3.0或4.0。

相關問題