开发者

Confusion in continuing the Project Related to C Syntax Analyser

开发者 https://www.devze.com 2023-02-18 03:10 出处:网络
My target is to make a program (using C++) which would take C source code as input and check for \"SYNTAX ERRORS ONLY\".

My target is to make a program (using C++) which would take C source code as input and check for "SYNTAX ERRORS ONLY".

Now for this, do i need to know about Regular Expressions, Grammar generation and Parsers??

I would like to use tools like Yacc/Flex/Bison - 开发者_如何学JAVAbut the problems i am facing are -

  1. How to use these tools? I mean i am only scratching at the surface when i read about these tools - i feel clueless.

  2. How can i use these tools in tandem with my C++ source code?

  3. How "The Hell" do i Get Started with this?


Use somebody else's C parser. For example, the parser used by the clang project. http://clang.llvm.org/

Then you can focus on the other hard part of your problem: detecting errors.


To get started with Yacc and Lex (or the Gnu versions, Bison and Flex) I can recommend Tom Niemann's A Compact Guide to Lex & Yacc.


I also suggest that you have a look of other projects doing the same thing. The are often named with lint in their name, as http://www.splint.org/


It all depends on what kind of errors you want to check.

In any cases you certainly need to learn more about compiler architectures. This book is a reference http://www.cs.princeton.edu/~appel/modern/c/

  • If you want to work at the syntactic level, you certainly want to work with lex and Yacc. This link may help you to get started with a working grammar (though outdated): http://www.lysator.liu.se/c/ANSI-C-grammar-y.html
    Less powerfull syntax checking can be done using regular expression. You can do less with regular expression than with an actual parser (see http://en.wikipedia.org/wiki/Chomsky_hierarchy). But it is certainly far more practical.

  • if you want to perform high level checking. Like "Does this group of function alway take const parameters ?" etc ... You can probably use GCC ability to dump abstract syntax trees (see http://digitocero.com/en/blog/exporting-and-visualizing-gccs-abstract-syntax-tree-ast). Checks other compilers or front-end as well. An abstract tree contains many information you can "check".

  • If you want to handle compilation errors: related to type checking etc... I can't help you, you probably want to look at other people projects before starting to write your own compiler.

see also:
http://decomp.ulb.ac.be/roelwuyts/playground/canalysistools/
http://wiki.altium.com/display/ADOH/Static+Code+Analysis+-+CERT+C+Secure+Code+Checking

Some people in my previous labs worked on C and C++ analysis and transformation http://www.lrde.epita.fr/cgi-bin/twiki/view/Transformers/ The project is now in standby, and has proved to be a complex subject even for people used to compiler writting (especially in the case of C++ transformation).

Finally your needs are maybe far simpler than this. Did you think about

FILE *output = popen("gcc -Wall my_c_file.c", "r");

(and then just checking the output of gcc)


How do you define "SYNTAX ERRORS ONLY"? If you just want to know what are the errors, why don't you call external gcc to perform a compilation and report the errors?

0

精彩评论

暂无评论...
验证码 换一张
取 消