ccmt - grep comments from c-lang srccode
#include "ccmt.h"
char*
ccmt(void*
src [,
const
char*
mode]
);
char*
ccmt_v(void*
src [,
const
char*
mode]
);
//needs free rtnptr
#include "ccmt.h"
int main(int argc, char** argv) {
const char* src = "//1.cmt\n 2."//nocmt"\n /*3.cmt\n *" "/\n";
char* p = ccmt(src);
puts(p); free(p); //: 1. (2.removed) 3.
char* p = ccmt_v(src); //: grep -v
puts(p); free(p); //: (1.) 2. (3.)
p = ccmt(stdin, "fp"); //: ag1 == filepointer
free(p);
p = ccmt("mysrc.c", "file"); //: ag1 == filename
free(p);
return 0;
}
//~$ gcc src.c
//~$ printf '//1\n 2\n' | ./a.out
ccmt greps c-lang cmt(// or /*..+/) using posix-ERE/BRE regex from src and rtn
malloc()ed ptr. param is:
- src
- src str/fp/filename pointer. treat as strptr if ag2 isnt.
- mode
- optional. set ag1 pointer type with string.
"p"/"str"/noset >> src is literal string, cosnt
char*
"fp" >> src is opened file pointer, FILE*
"file" >> src is filename. do open-read-close sequence.
ccmt_v() gets cmt removed string as 'grep -v XXX'.
ccmt assumes the src doesnt holds trigraphs ??X and long-line syntax \(\n).
malloc()ed pointer. rtn NULL + set errno if error.
posix-2001+
Copyright 2022 momi-g, GPLv3+
2022-03-16 v1.0.0 (2022-03-16 v1.0.0)
regex(3)
https://gcc.gnu.org/onlinedocs/gcc-3.2.3/cpp/Initial-processing.html
https://math.stackexchange.com/questions/2482191/how-do-you-draw-a-dfa-from-a-regular-expression
https://cs.stackexchange.com/questions/311/deriving-the-regular-expression-for-c-style-comments
https://cyberzhg.github.io/toolbox/nfa2dfa?regex=KChiKikoYWIpKGIqKSkq