2015-03-19 33 views
0

我聽說有一些使用C++編寫的類/庫可用於解析C/C++代碼。我需要的是從源文件中讀取所有函數並對它們進行比較,以瞭解它們之間的區別。我真的不知道我該怎麼做到這一點。我可以使用的只是頭文件/庫/類和沒有軟件解決方案。使用C++解析C++函數?

+0

您正在尋找這樣的事情:http://stackoverflow.com/questions/10912349/similar-code-detector? – 2015-03-19 09:24:22

+0

不完全是,但是,非常接近它。我需要寫我自己的工具。我需要的是從2個源文件獲取函數名稱,並比較它們之間是否存在變化。但我真的不知道如何正確地做到這一點。 – user3416803 2015-03-19 09:29:50

+1

只是爲了確定,你的意思是*在你自己的C++代碼*中做這件事,而不僅僅是一般? (因爲這裏有相當不錯的diff工具...) – DevSolar 2015-03-19 09:41:34

回答

3

解析C++語法並不是一項簡單的任務。然而,爲了不重新發明輪子(解析C++語法工具必須已經做對了嗎?),您可以使用lex和bison與已定義的C++解析器,如:http://www.computing.surrey.ac.uk/research/dsrg/fog/CxxGrammar.y 然後根據您的需要修改它。我想你還需要lex和bison的基礎知識。從例如這個: http://aquamentus.com/flex_bison.html

祝你好運!

+0

考慮到當今C++的複雜性,它不可能成功。 +請參閱[C++ faq](http://isocpp.org/wiki/faq/compiler-dependencies#yaccable-grammar) – 2015-03-19 19:14:20

+0

@DmitryLedentsov您可能是對的,另一方面,據我所知C++可以被感知作爲一種上下文無關的語法,因此如果沒有一個開源社區遲早會提供它,yacc-able C++語法就可以創建。 「 – 2015-03-19 19:35:35

+2

」據我所知C++可以被視爲一個上下文無關的語法「No. – 2015-03-20 11:37:51

4
+0

這看起來不錯,但是否可以將clang作爲頭文件包含在我的項目中使用?我沒有找到如何在MSVS 2008左右。 – user3416803 2015-03-19 10:16:30

+0

@ user3416803:否。您還需要鏈接libclang。 – MSalters 2015-03-19 14:07:02

+0

@ user3416803問題仍然存在,你想做什麼,爲什麼,你是否真的需要這樣做?你想通過區分C++源代碼來實現什麼? – 2015-03-19 14:12:43