|
Posted by Abhinav on September 23, 2004, 7:54 pm
Please log in for more thread options
Hi,
I have a piece of code which parses a file using C::Scan, and takes in the
declarations :
use strict;
use warnings;
use C::Scan;
my $c = new C::Scan 'filename' => $name;
my $fdec = $c->get('fdecls');
I am able to get the declarations in $fdec, but I also get the following
warnings:
In file included from :1:
sample_main.oc:4:8: macro names must be identifiers
sample_main.oc:4:15: s.h: No such file or directory
sample_main.oc:8:20: adcore.h: No such file or directory
sample_main.oc:12:20: adxstf.h: No such file or directory
I basically am interested *only* in the *prototypes* of the functions.[1]
How can I remove the warnings given below ? I tried looking through Scan.pm
and Data/Flow.pm, but without success.
Thanks
Abhinav
[1] : $fdec contains info for functions with only prototypes, as well as
definitions. I need only the prototypes. I am currently checking if the
result matches with m/[)]s*[;]s*$/ to get what I need. Anyway to do it
through C::Scan itself?
|
|
Posted by Ilya Zakharevich on September 24, 2004, 4:43 am
Please log in for more thread options
[A complimentary Cc of this posting was sent to
Abhinav
> my $fdec = $c->get('fdecls');
>
> I am able to get the declarations in $fdec, but I also get the following
> warnings:
>
> In file included from :1:
> sample_main.oc:4:8: macro names must be identifiers
> sample_main.oc:4:15: s.h: No such file or directory
> sample_main.oc:8:20: adcore.h: No such file or directory
> sample_main.oc:12:20: adxstf.h: No such file or directory
>
> I basically am interested *only* in the *prototypes* of the functions.[1]
You did not explain why the headers are missing. Without headers,
what makes you think the prototypes make sense?
> How can I remove the warnings given below ? I tried looking through Scan.pm
> and Data/Flow.pm, but without success.
Install the headers? What do you mean by "removing"?
> [1] : $fdec contains info for functions with only prototypes, as well as
> definitions. I need only the prototypes. I am currently checking if the
> result matches with m/[)]s*[;]s*$/ to get what I need. Anyway to do it
> through C::Scan itself?
Sorry, I cannot understand what you are talking about...
Hope this helps,
Ilya
|
|
Posted by Abhinav on September 24, 2004, 1:42 pm
Please log in for more thread options Ilya Zakharevich wrote:
> [A complimentary Cc of this posting was sent to
> Abhinav
>
>> my $fdec = $c->get('fdecls');
>>
>>I am able to get the declarations in $fdec, but I also get the following
>>warnings:
>>
>>In file included from :1:
>>sample_main.oc:4:8: macro names must be identifiers
>>sample_main.oc:4:15: s.h: No such file or directory
>>sample_main.oc:8:20: adcore.h: No such file or directory
>>sample_main.oc:12:20: adxstf.h: No such file or directory
>>
>>I basically am interested *only* in the *prototypes* of the functions.[1]
>
>
> You did not explain why the headers are missing. Without headers,
> what makes you think the prototypes make sense?
>
I am checking the C File to ensure that all function definitions have
proper documentation. I do this using doxygen (http://www.doxygen.org).
I do not need to check whether any function prototypes are having any
documentation.
I do the checking on a per-file basis, and do not care about included files
- I will check them individually.
I want to "skip" all the #defines, #includes, etc ..
Hence,
C:Scan should (for my case) ignore any preprocessor directives. (It would
be as if I am removing these before running C::Scan on the file.
This includes #ifdef as well as #include
>
>>How can I remove the warnings given below ? I tried looking through Scan.pm
>>and Data/Flow.pm, but without success.
>
>
> Install the headers? What do you mean by "removing"?
As I said above, I do not want to.
>
>
>>[1] : $fdec contains info for functions with only prototypes, as well as
>>definitions. I need only the prototypes. I am currently checking if the
>>result matches with m/[)]s*[;]s*$/ to get what I need. Anyway to do it
>>through C::Scan itself?
>
>
> Sorry, I cannot understand what you are talking about...
I do not need to check if prototypes are having comments, but doxygen
apparently has no way to differentiate this, so I used C::Scan to get all
the declarations. C::Scan returns declarations for prototypes as well as
definitions*, and I see if it really is a prototype by iterating over the
returned arrayref and checking whether it ends with a ';'.
I then comment out the prototypes before passing the file to doxygen.
>
> Hope this helps,
> Ilya
>
>
>
|
|
Posted by Ilya Zakharevich on September 26, 2004, 8:06 am
Please log in for more thread options [A complimentary Cc of this posting was sent to
Abhinav
> > You did not explain why the headers are missing. Without headers,
> > what makes you think the prototypes make sense?
> I am checking the C File to ensure that all function definitions have
> proper documentation. I do this using doxygen (http://www.doxygen.org).
I still do not have a slightest idea what you want to achieve, and why
do you want to achieve it in the way you do it.
> I want to "skip" all the #defines, #includes, etc ..
> Hence,
>
> C:Scan should (for my case) ignore any preprocessor directives. (It would
> be as if I am removing these before running C::Scan on the file.
I have no idea what "ignore" means here. If you want a broken
pre-processor, write one, and set up C::Scan to use it. However, I'm
not sure that a C preprocessor is a completely trivial program (well,
probably to write one is trivial, but to *understand* what it must do
from the C standard may be a non-trivial task).
> > Sorry, I cannot understand what you are talking about...
>
> I do not need to check if prototypes are having comments, but doxygen
> apparently has no way to differentiate this, so I used C::Scan to get all
> the declarations. C::Scan returns declarations for prototypes as well as
> definitions*, and I see if it really is a prototype by iterating over the
> returned arrayref and checking whether it ends with a ';'.
This is still not a full enough description to understand what you
want to do. However, why not just redirect STDERR to /dev/null?
Yours,
Ilya
|
|
Posted by Abhinav on September 27, 2004, 1:55 pm
Please log in for more thread options Ilya Zakharevich wrote:
> [A complimentary Cc of this posting was sent to
> Abhinav
>
>>>You did not explain why the headers are missing. Without headers,
>>>what makes you think the prototypes make sense?
>
>
>>I am checking the C File to ensure that all function definitions have
>>proper documentation. I do this using doxygen (http://www.doxygen.org).
>
>
> I still do not have a slightest idea what you want to achieve, and why
> do you want to achieve it in the way you do it.
>
>
>>I want to "skip" all the #defines, #includes, etc ..
>>Hence,
>>
>>C:Scan should (for my case) ignore any preprocessor directives. (It would
>>be as if I am removing these before running C::Scan on the file.
>
>
> I have no idea what "ignore" means here. If you want a broken
> pre-processor, write one, and set up C::Scan to use it. However, I'm
> not sure that a C preprocessor is a completely trivial program (well,
> probably to write one is trivial, but to *understand* what it must do
> from the C standard may be a non-trivial task).
>
>
>>>Sorry, I cannot understand what you are talking about...
>>
>>I do not need to check if prototypes are having comments, but doxygen
>>apparently has no way to differentiate this, so I used C::Scan to get all
>>the declarations. C::Scan returns declarations for prototypes as well as
>>definitions*, and I see if it really is a prototype by iterating over the
>>returned arrayref and checking whether it ends with a ';'.
>
>
> This is still not a full enough description to understand what you
> want to do. However, why not just redirect STDERR to /dev/null?
I have no doubt that C::Scan is an excellent module. Maybe I am the one wh
is expecting to do things with it which it isn;t meant for..
I have a C source file, sample.c :
#include <stdio.h>
int func1( int x,
int y, /*This is a comment*/
int z);
int main(void){
print ("Hello, Worldn");
}
int func1( int x,
int y, /* This is a comment*/
int x)
{
return 0;
}
I used C::Scan (fdecls) to read this files and get a list of the function
declarations.
For the above file, it rightly gives
int func1( int x,
int y,
int z);
I am using this string, returned from C::Scan, to match the protoype in the
file, and comment it out. Thus, the modified file I have should have the
prototype for func1 commented out.
However, since C::Scan->get('fdecls') strips of comments, I am having a
problem. Thus, In the above case. the comment "/* This is a comment*? is
not present in the searcj expression.
I thought using C::Scan's fdecl would help me out here, as it already
provides me with the list of prototypes..
Is there any way I could get the whole prototype text as it is ? Or should
I just stop using C::Scan ?
Thanks for your help ..
Abhinav
|
|