功能單元最大行數

2022-12-09 01:24:05 字數 3637 閱讀 9221

文件名稱:功能單元最大有效行數

作者日期功能單元這裡指的是函式,即整個專案中所有.c檔案的函式的最大有效行數,針對找到的開源工具,有個可以利用:c and c++ code counter

和makeheaders,其中c and c++ code counter在《功能單元最大扇入扇出工具分析》中已經介紹,其中有這樣的功能,即列出所有函式的loc。makeheaders能夠把.c檔案中的全域性變數和函式定義抽取出來,自動生成標頭檔案。

因此一種思路是根據makeheaders和c and c++ code counter的**抽取出來,在此基礎上進行字串的匹配,這種思路雖然可以實現,但是不如解析c的語法來實現可靠。第二種方法即是基於c的語法分析來實現。

本文的主要目的就是介紹蒐集到的常用的c的解析器。

cscope的功能通過它的子命令「find」來實現。

cs find c|d|e|g|f|i|s|t name

s:查詢c**符號

g:查詢本定義

d:查詢本函式呼叫的函式

c:查詢呼叫本函式的函式

t:查詢本字串

e:查詢本egrep模式

f:查詢本檔案

i:查詢包含本檔案的檔案

cscope是at&t官方發布的unix的一部分,cscope 是乙個 c 語言的瀏覽工具,通過這個工具可以很方便地找到某個函式或變數的定義位置、被呼叫的位置等資訊。目前支援 c 和 c++。cscope 自身帶乙個基於文字的使用者介面,不過 **im 提供了cscope介面,因此可以在 **im 中呼叫 cscope,方便快捷地瀏覽源**。

也可以使用單獨的命令列。

缺點:linux平台下使用。

在有sergey khorev預編譯的乙個win32版本的cscope,這個版本的cscope可以很好的與windows版本的vim搭配使用。

下面是乙個最簡單的將cscope跑起來的例子。

安裝  ./configure

make

make install

2. 建立符號資料庫

cscope -rbq

3. 執行cscope,出現下面選單:

find this c symbol:

find this function definition:

find functions called by this function:

find functions calling this function:

find this text string:

change this text string:

find this egrep pattern:

find this file:

find files #including this file:

一些介紹本工具的**:

是乙個自動化工具,可以按照定義好的規則自動生成乙個c函式yylex(),也成為掃瞄器(scanner)。這個c函式把文字串作為輸入,按照定義好的規則分析文字串中的字元,找到符合規則的一些字串行後,就執行在規則中定義好的動作(action)。例如在規則中可以這樣定義:

如果遇到乙個換行字元\n,那麼就把行計數器的值加一。

flex檔案就是乙個文字檔案,內容包括定義好的一系列詞法規則。檔案的命名習慣上以小寫字母l(l)來作為檔案字尾。如果為了清晰,也可以用.

flx或者.flex作為檔案的字尾名。flex檔案完成後,就執行下列命令:

$ flex

這個命令執行後將生成乙個c檔案,預設檔名為這個c檔案主要內容就是函式yylex()的定義。

如果要直接將這個檔案編譯成為乙個可執行程式,還有一些要注意的地方。如果在flex檔案中沒有提供main()函式的定義,那麼這個c檔案中不會有main()函式。此時單獨編譯這個c檔案的時候,一定要加上-lfl的連線庫引數;若提供了main()函式,就不必要提供這個連線庫引數了。

連線庫libfl提供了乙個預設的main函式。預設的main()函式中只是簡單地呼叫yyflex()函式,而自己提供的main()函式則可以根據需要加入許多其他的處理**。

bison 是替代yacc的語法分析程式生成器. yacc是 yet another compiler compiler的縮寫. bison又是什麼吶是乙個生成可以分析文字檔案結構的程式的程式.

使用者不用直接編寫程式而只用確定好如何分析這些文字檔案的規則就可以了. 這種文字結構應用的例子舉不勝舉, 其中乙個就是計算器(calculator).

給定乙個字串:

1+2*3

人可以馬上計算出結果是7。為什麼呢?因為結構。

我們的大腦知道如何解釋這個字串。但是,計算機並不知道,bison就是乙個通過將這個字串用如下方法提供給編譯器以幫助計算機理解工具:+/\

*1/\

23從數的底部開始,遇到數2和3,它們通過乘法符號連線在一起,於是計算機將2和3進行乘積運算。計算結果暫時儲存起來,然後計算機發現2*3的結果與數1通過加法符號連線在一起。將前面的結果再加1就得到了7。

在計算過程中,無論多複雜的計算也都能夠分解成樹形結構,計算機只需要從底層開始,一級一級地向上計算,直到計算到最頂層就可以得到正確的答案。

下面根據bison手冊中的說明,給出乙個完整的「中綴符號計算器」的bison輸入檔案——語法規則檔案(包括了詞法分析器):

/* infix notation calculator. */ %

/* bison declarations. */

%token num

%left '-' '+'

%left '*' '/'

%left neg /* negation--unary minus */

%right '^' /* exponentiation */

%% /* the grammar follows. */

input: /* empty */

| input line ;

line: '\n'

| exp '\n' ;

exp: num

| exp '+' exp

| exp '-' exp

| exp '*' exp

| exp '/' exp

| '-' exp %prec neg2; }

| exp '^' exp

| '(' exp2; }

; %%

//詞法分析器

int yylex (void)

/* return end-of-input. */

if (c == eof)

return 0;

/* return a single char. */

return c;

}int main (void)

void yyerror (char const *s)

根據上面的語法規則檔案(包括詞法分析器),用bison生成計算器的**:

bison

會產生檔案,編譯檔案:

cc -lm -o calc

就產生了calc可執行檔案,執行示例如下:

$ ./calc

4 + 4.5 - (34/(8*3+-3))

6.880952381

-56 + 2

-543 ^ 2

9優點:功能強大,可以實現大所屬的靜態分析,而且具有很高的精度。

資料齊全。

缺點:比較複雜,掌握起來有一些難度。

單元練習第八單元核酸結構與功能 習題及答案

一 名詞解釋 1 dna 的雙螺旋結構 2 dna 的變性和復性 3 增色效應和減色效應 4 髮夾結構 5 tm 6 chargaff 定律 7 鹼基配對 8 探針 9 核小體 10 稀有鹼基 11 核酶 12 camp 13 退火 14 z dna 二 填空題 1 在典型的 dna 雙螺旋結構中,...

第十九單元抗慢性心功能不全藥

字型 大中小 列印 省紙版 清晰版 自定義 慢性心功能不全 chf 又稱充血性心力衰竭,是各種 引起的心臟疾病的終末階段。在血流動力學方面表現為心臟排出量絕對或相對的不足。chf時心臟收縮性減弱,心率加快,前後負荷增高,氧耗量增加。抗慢性心功能不全藥主要通過加強心肌收縮力或減輕心臟的前後負荷而發揮 ...

第二單元細胞的基本結構和物質運輸功能含答案

學案6 細胞膜與細胞核的結構和功能 教學目標 1.細胞膜的結構和功能 2.細胞核的結構和功能 教學重難點 1 簡述細胞膜的成分和功能,理解細胞膜在組成 結構和功能之間的關係 2.體驗製備細胞膜的方法 3.認同細胞膜作為系統的邊界,對於細胞這個生命系統的重要意義。4.簡述細胞核的結構與功能及相關實驗設...