2
嗨,我想開發靜態代碼分析規則,以便本地變量不會在其外部範圍中影子名稱。 你能幫助我確定是否使用與其外部範圍相同的名稱的塊/嵌套類,以及如何避免方法隱藏父母的成員方法。如何識別與其父/容器類相同名稱的本地變量
請幫我創建一個算法,以便我可以開發一個靜態代碼分析規則。
嗨,我想開發靜態代碼分析規則,以便本地變量不會在其外部範圍中影子名稱。 你能幫助我確定是否使用與其外部範圍相同的名稱的塊/嵌套類,以及如何避免方法隱藏父母的成員方法。如何識別與其父/容器類相同名稱的本地變量
請幫我創建一個算法,以便我可以開發一個靜態代碼分析規則。
(編輯: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。
你想分析哪種編程語言? – 2011-04-07 07:32:38
我想爲c#.net編碼規則 – dotnetdeveloper 2011-04-07 08:23:20