Ctags: C : ๋งคํฌ๋กœ ๋ผ์ธ ํ›„ ํ•จ์ˆ˜๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2014๋…„ 12์›” 21์ผ  ยท  8์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: universal-ctags/ctags

์•ˆ๋…•ํ•˜์„ธ์š”,
ctags๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ C๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค (ํ™œ๊ธฐ์ฐฌ ctags์—๋„ ์žˆ์Œ).

๋ฌธ์ œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

#include <stdio.h>

#define PRAGMA(x) _Pragma(#x)
PRAGMA(bar)
int foo() {
    int a = 1;
    printf("a = %d\n", a);
}

void main(void) {
    foo();
}

ctags ํŒŒ์ผ์˜ ์ถœ๋ ฅ์—๋Š” ์•„๋ž˜์™€ ๊ฐ™์€ foo() ํ•จ์ˆ˜๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

PRAGMA  f.c /^#define PRAGMA(/;"    d   file:
PRAGMA  f.c /^PRAGMA(bar)$/;"   f
main    f.c /^void main(void) {$/;" f

๊ฐ์‚ฌ!!

Parser buenhancement

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‚˜๋Š” ํŠธ๋ฆญ์„ ๋ชจ๋ฅด์ง€๋งŒ ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ ๋ถ„์„์ด ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์–ป์—ˆ๋‹ค :

PRAGMA  /tmp/enum.c /^#define PRAGMA(/;"    d   file:
foo /tmp/enum.c /^int foo() {$/;"   f
main    /tmp/enum.c /^void main(void) {$/;" f

๋ชจ๋“  8 ๋Œ“๊ธ€

์‹ ๊ณ  ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.
์ค‘์š”ํ•˜์ง€๋งŒ์ด๋ฅผ ๊ณ ์น˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ ์ฐธ๊ณ  : get.c์˜ directiveDefine์— ๋งคํฌ๋กœ ์ •์˜๋ฅผ ๊ธฐ๋กํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
๋‚ด๊ฐ€ ์ผํ•˜๋Š” ์ฝ”๋ฅดํฌ ์ธต์€ ๊ฐ€์ง€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ํ•ดํ‚นํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.
geany์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜ ์ž…๋ ฅ ์ŠคํŠธ๋ฆผ์„ ํ™•์ธํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

๋ฟก ๋นต๋€จ
์ง„์ „์ด ์žˆ์—ˆ์Šต๋‹ˆ๊นŒ?
์ง€์ ์ด ์–ด๋”˜๊ฐ€์— ์žˆ์Šต๋‹ˆ๊นŒ?

์•„๋‹ˆ์š”.์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ์•„๋ฌด๊ฒƒ๋„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

ctags -I 'PRAGMA+' ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งคํฌ๋กœ ํ™•์žฅ ๋ถ€๋ถ„์„ ๊ฑด๋„ˆ ๋›ธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋น„๊ณต๊ฐœ ์ฐธ๊ณ  : get.c ์ฝ”๋ฅดํฌ ๋ ˆ์ด์–ด์˜ directiveDefine์— ๋งคํฌ๋กœ ์ •์˜๋ฅผ ๊ธฐ๋กํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ชจ๋“  ๋งคํฌ๋กœ ์‚ฌ์šฉ์„ ํ•ด๊ฒฐํ•˜๊ธฐ์— ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋งŽ์€ ๊ฒƒ์ด ํฌํ•จ ๋œ ํ—ค๋”์—์„œ ๋น„๋กฏ๋˜๊ณ  ์ด์ƒํ•œ ๊ฒƒ์œผ๋กœ ํ™•์žฅ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™„์ „ํ•œ C ์ „์ฒ˜๋ฆฌ ๊ธฐ๊ฐ€ ์—†์œผ๋ฉด ์™„๋ฒฝํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ๋งคํฌ๋กœ ํ™•์žฅ์„ ์ถ”์ ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๋ชจ๋“  ๋ณต์žก์„ฑ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์  ์ผ์ง€ ๊ถ๊ธˆํ•ฉ๋‹ˆ๋‹ค.

@ b4n , ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ํŠธ๋ฆญ์„ ๋ชจ๋ฅด์ง€๋งŒ ์ƒˆ๋กœ์šด ๊ตฌ๋ฌธ ๋ถ„์„์ด ์ด๊ฒƒ์„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.
๋‚˜๋Š” ์–ป์—ˆ๋‹ค :

PRAGMA  /tmp/enum.c /^#define PRAGMA(/;"    d   file:
foo /tmp/enum.c /^int foo() {$/;"   f
main    /tmp/enum.c /^void main(void) {$/;" f
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰