亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊(cè) 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫(kù)
最近訪問(wèn)板塊 發(fā)新帖
查看: 2384 | 回復(fù): 8
打印 上一主題 下一主題

[文本處理] 怎樣從c代碼文件中抽取出完整函數(shù)函數(shù)信息 [復(fù)制鏈接]

論壇徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-12 06:20:002016科比退役紀(jì)念章
日期:2016-05-31 15:47:20CU十四周年紀(jì)念徽章
日期:2016-05-27 12:24:562015年亞洲杯之阿曼
日期:2015-05-03 21:01:352015年辭舊歲徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-11 06:20:00
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2014-06-17 09:45 |只看該作者 |倒序?yàn)g覽
RT,函數(shù)里面的信息可以是任意滿足c語(yǔ)法的內(nèi)容

抽取出來(lái)的函數(shù)信息應(yīng)該是
void fun()
{
  ....
}

論壇徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉雞
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥豬
日期:2014-04-22 16:13:09獅子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53處女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
2 [報(bào)告]
發(fā)表于 2014-06-17 09:47 |只看該作者
回復(fù) 1# liion631818
我的理解是把除了函數(shù)定義之外的一些全局變量
和結(jié)構(gòu)體等的數(shù)據(jù)結(jié)構(gòu)定義代碼刪掉?
   

論壇徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-12 06:20:002016科比退役紀(jì)念章
日期:2016-05-31 15:47:20CU十四周年紀(jì)念徽章
日期:2016-05-27 12:24:562015年亞洲杯之阿曼
日期:2015-05-03 21:01:352015年辭舊歲徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-11 06:20:00
3 [報(bào)告]
發(fā)表于 2014-06-17 09:50 |只看該作者
回復(fù) 2# Herowinter


    需要的抽取指定函數(shù)的信息,不是全部的,有什么好辦法嗎

論壇徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉雞
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥豬
日期:2014-04-22 16:13:09獅子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53處女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
4 [報(bào)告]
發(fā)表于 2014-06-17 09:51 |只看該作者
回復(fù) 3# liion631818
那你的輸入是指定的幾個(gè)函數(shù)名,
輸出是那幾個(gè)指定的函數(shù)名的具體實(shí)現(xiàn)代碼,
不需要考慮頭文件中的那幾個(gè)函數(shù)的聲明吧?
   

論壇徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉雞
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥豬
日期:2014-04-22 16:13:09獅子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53處女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
5 [報(bào)告]
發(fā)表于 2014-06-17 09:57 |只看該作者
不大理解為什么要用shell來(lái)做這個(gè)事,CDT或
vi或emacs應(yīng)該都提供這種功能了吧。

論壇徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-12 06:20:002016科比退役紀(jì)念章
日期:2016-05-31 15:47:20CU十四周年紀(jì)念徽章
日期:2016-05-27 12:24:562015年亞洲杯之阿曼
日期:2015-05-03 21:01:352015年辭舊歲徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-11 06:20:00
6 [報(bào)告]
發(fā)表于 2014-06-17 10:01 |只看該作者
回復(fù) 5# Herowinter


    好吧,我只是想把他寫(xiě)在腳本里。我用c寫(xiě)了個(gè)可執(zhí)行文件,配合我自己的環(huán)境,目前可用。

論壇徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉雞
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥豬
日期:2014-04-22 16:13:09獅子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53處女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
7 [報(bào)告]
發(fā)表于 2014-06-17 10:11 |只看該作者
回復(fù) 6# liion631818
你來(lái)一段具體的文本吧,這樣需求不是很清晰。
比如,文本里會(huì)不會(huì)同時(shí)出現(xiàn)函數(shù)fun
的聲明、實(shí)現(xiàn)、調(diào)用。
  1. int func(int a, int b);
  2. int func(int a, int b){
  3. ....

  4. }
  5. func(a,b);
復(fù)制代碼
如果你指定抽取函數(shù)func的信息,這3種形式都要嗎?

還有這問(wèn)題其實(shí)是找到函數(shù)名,然后匹配"{" 和"}",
這其實(shí)一定程度上會(huì)受coding style的影響,比如"{"
是和函數(shù)名同一行還是在下一行。
   

論壇徽章:
10
天蝎座
日期:2013-09-22 22:32:23程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-07 06:20:00lufei
日期:2016-06-17 17:38:40程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-06-12 06:20:002016科比退役紀(jì)念章
日期:2016-05-31 15:47:20CU十四周年紀(jì)念徽章
日期:2016-05-27 12:24:562015年亞洲杯之阿曼
日期:2015-05-03 21:01:352015年辭舊歲徽章
日期:2015-03-03 16:54:15天蝎座
日期:2013-10-20 21:05:24程序設(shè)計(jì)版塊每日發(fā)帖之星
日期:2016-08-11 06:20:00
8 [報(bào)告]
發(fā)表于 2014-06-17 12:49 |只看該作者
回復(fù) 7# Herowinter


    只要函數(shù)的實(shí)現(xiàn),格式不固定哦,所以有點(diǎn)麻煩,我用c代碼實(shí)現(xiàn)的被中文搞死了,唉

論壇徽章:
780
金牛座
日期:2014-02-26 17:49:58水瓶座
日期:2014-02-26 18:10:15白羊座
日期:2014-04-15 19:29:52寅虎
日期:2014-04-17 19:43:21酉雞
日期:2014-04-19 21:24:10子鼠
日期:2014-04-22 13:55:24卯兔
日期:2014-04-22 14:20:58亥豬
日期:2014-04-22 16:13:09獅子座
日期:2014-05-05 22:31:17摩羯座
日期:2014-05-06 10:32:53處女座
日期:2014-05-12 09:23:11子鼠
日期:2014-05-21 18:21:27
9 [報(bào)告]
發(fā)表于 2014-06-17 13:47 |只看該作者
回復(fù) 8# liion631818
Just a simple example, hope it can be useful to you.
  1. awk -vf="ngx_create_chain_of_bufs" '$0~f&&$0!~/;/{in_func=1} in_func{left+=gsub(/{/,"{");right+=gsub(/}/,"}");print;if(left>0&&left==right)in_func=0}' ngx_buf.c
  2. ngx_create_chain_of_bufs(ngx_pool_t *pool, ngx_bufs_t *bufs)
  3. {
  4.     u_char       *p;
  5.     ngx_int_t     i;
  6.     ngx_buf_t    *b;
  7.     ngx_chain_t  *chain, *cl, **ll;

  8.     p = ngx_palloc(pool, bufs->num * bufs->size);
  9.     if (p == NULL) {
  10.         return NULL;
  11.     }

  12.     ll = &chain;

  13.     for (i = 0; i < bufs->num; i++) {

  14.         b = ngx_calloc_buf(pool);
  15.         if (b == NULL) {
  16.             return NULL;
  17.         }

  18.         /*
  19.          * set by ngx_calloc_buf():
  20.          *
  21.          *     b->file_pos = 0;
  22.          *     b->file_last = 0;
  23.          *     b->file = NULL;
  24.          *     b->shadow = NULL;
  25.          *     b->tag = 0;
  26.          *     and flags
  27.          *
  28.          */

  29.         b->pos = p;
  30.         b->last = p;
  31.         b->temporary = 1;

  32.         b->start = p;
  33.         p += bufs->size;
  34.         b->end = p;

  35.         cl = ngx_alloc_chain_link(pool);
  36.         if (cl == NULL) {
  37.             return NULL;
  38.         }

  39.         cl->buf = b;
  40.         *ll = cl;
  41.         ll = &cl->next;
  42.     }

  43.     *ll = NULL;

  44.     return chain;
  45. }
復(fù)制代碼
ngx_buf.c

  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Nginx, Inc.
  4. */


  5. #include <ngx_config.h>
  6. #include <ngx_core.h>


  7. ngx_buf_t *
  8. ngx_create_temp_buf(ngx_pool_t *pool, size_t size)
  9. {
  10.     ngx_buf_t *b;

  11.     b = ngx_calloc_buf(pool);
  12.     if (b == NULL) {
  13.         return NULL;
  14.     }

  15.     b->start = ngx_palloc(pool, size);
  16.     if (b->start == NULL) {
  17.         return NULL;
  18.     }

  19.     /*
  20.      * set by ngx_calloc_buf():
  21.      *
  22.      *     b->file_pos = 0;
  23.      *     b->file_last = 0;
  24.      *     b->file = NULL;
  25.      *     b->shadow = NULL;
  26.      *     b->tag = 0;
  27.      *     and flags
  28.      */

  29.     b->pos = b->start;
  30.     b->last = b->start;
  31.     b->end = b->last + size;
  32.     b->temporary = 1;

  33.     return b;
  34. }


  35. ngx_chain_t *
  36. ngx_alloc_chain_link(ngx_pool_t *pool)
  37. {
  38.     ngx_chain_t  *cl;

  39.     cl = pool->chain;

  40.     if (cl) {
  41.         pool->chain = cl->next;
  42.         return cl;
  43.     }

  44.     cl = ngx_palloc(pool, sizeof(ngx_chain_t));
  45.     if (cl == NULL) {
  46.         return NULL;
  47.     }

  48.     return cl;
  49. }

  50. ngx_create_chain_of_bufs(p,q);
  51. ngx_chain_t *
  52. ngx_create_chain_of_bufs(ngx_pool_t *pool, ngx_bufs_t *bufs)
  53. {
  54.     u_char       *p;
  55.     ngx_int_t     i;
  56.     ngx_buf_t    *b;
  57.     ngx_chain_t  *chain, *cl, **ll;

  58.     p = ngx_palloc(pool, bufs->num * bufs->size);
  59.     if (p == NULL) {
  60.         return NULL;
  61.     }

  62.     ll = &chain;

  63.     for (i = 0; i < bufs->num; i++) {

  64.         b = ngx_calloc_buf(pool);
  65.         if (b == NULL) {
  66.             return NULL;
  67.         }

  68.         /*
  69.          * set by ngx_calloc_buf():
  70.          *
  71.          *     b->file_pos = 0;
  72.          *     b->file_last = 0;
  73.          *     b->file = NULL;
  74.          *     b->shadow = NULL;
  75.          *     b->tag = 0;
  76.          *     and flags
  77.          *
  78.          */

  79.         b->pos = p;
  80.         b->last = p;
  81.         b->temporary = 1;

  82.         b->start = p;
  83.         p += bufs->size;
  84.         b->end = p;

  85.         cl = ngx_alloc_chain_link(pool);
  86.         if (cl == NULL) {
  87.             return NULL;
  88.         }

  89.         cl->buf = b;
  90.         *ll = cl;
  91.         ll = &cl->next;
  92.     }

  93.     *ll = NULL;

  94.     return chain;
  95. }


  96. ngx_int_t
  97. ngx_chain_add_copy(ngx_pool_t *pool, ngx_chain_t **chain, ngx_chain_t *in)
  98. {
  99.     ngx_chain_t  *cl, **ll;

  100.     ll = chain;

  101.     for (cl = *chain; cl; cl = cl->next) {
  102.         ll = &cl->next;
  103.     }

  104.     while (in) {
  105.         cl = ngx_alloc_chain_link(pool);
  106.         if (cl == NULL) {
  107.             return NGX_ERROR;
  108.         }

  109.         cl->buf = in->buf;
  110.         *ll = cl;
  111.         ll = &cl->next;
  112.         in = in->next;
  113.     }

  114.     *ll = NULL;

  115.     return NGX_OK;
  116. }


  117. ngx_chain_t *
  118. ngx_chain_get_free_buf(ngx_pool_t *p, ngx_chain_t **free)
  119. {
  120.     ngx_chain_t  *cl;

  121.     if (*free) {
  122.         cl = *free;
  123.         *free = cl->next;
  124.         cl->next = NULL;
  125.         return cl;
  126.     }

  127.     cl = ngx_alloc_chain_link(p);
  128.     if (cl == NULL) {
  129.         return NULL;
  130.     }

  131.     cl->buf = ngx_calloc_buf(p);
  132.     if (cl->buf == NULL) {
  133.         return NULL;
  134.     }

  135.     cl->next = NULL;

  136.     return cl;
  137. }


  138. void
  139. ngx_chain_update_chains(ngx_pool_t *p, ngx_chain_t **free, ngx_chain_t **busy,
  140.     ngx_chain_t **out, ngx_buf_tag_t tag)
  141. {
  142.     ngx_chain_t  *cl;

  143.     if (*busy == NULL) {
  144.         *busy = *out;

  145.     } else {
  146.         for (cl = *busy; cl->next; cl = cl->next) { /* void */ }

  147.         cl->next = *out;
  148.     }

  149.     *out = NULL;

  150.     while (*busy) {
  151.         cl = *busy;

  152.         if (ngx_buf_size(cl->buf) != 0) {
  153.             break;
  154.         }

  155.         if (cl->buf->tag != tag) {
  156.             *busy = cl->next;
  157.             ngx_free_chain(p, cl);
  158.             continue;
  159.         }

  160.         cl->buf->pos = cl->buf->start;
  161.         cl->buf->last = cl->buf->start;

  162.         *busy = cl->next;
  163.         cl->next = *free;
  164.         *free = cl;
  165.     }
  166. }
復(fù)制代碼
您需要登錄后才可以回帖 登錄 | 注冊(cè)

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國(guó)互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過(guò)ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請(qǐng)注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP