src
Directory actions
More options
Directory actions
More options
src
Folders and files
| Name | Name | Last commit date | ||
|---|---|---|---|---|
parent directory.. | ||||
CppParser ========= [](https://github.com/satya-das/cppparser/actions/workflows/cmake-multi-platform.yml) [](https://www.codacy.com/app/satya-das/cppparser?utm_source=github.com&utm_medium=referral&utm_content=satya-das/cppparser&utm_campaign=Badge_Grade) [](https://opensource.org/licenses/MIT) An easy, fast, and robust library to parse C/C++ source code. ## Features - No preprocessing; preprocessor constructs are part of the AST. - Preserves most comments. - Implemented from scratch using backtracking Yacc (BtYacc), so **no dependency on libclang**. - Parses into a structured AST where file elements form a tree. - Minimal dependencies: [Flex](https://github.com/westes/flex) on Unix-like platforms (Linux, macOS, etc.). On Windows, [Flex for Windows](http://gnuwin32.sourceforge.net/packages/flex.htm) is bundled for out-of-the-box usage. - Supports parsing multi-file programs. ## Motivation CppParser can be used to build tools that need parsing of C/C++ files. It is also used to develop [cib](https://github.com/satya-das/cib/), which implements ABI-stable SDK architecture for C++ libraries. ## Example To begin with we will see an example of parsing a hello-world program and see the AST that `CppParser` creates: !INCLUDECODE "cppparser/test/unit/test-files/hello-world.cpp" (c++) For the above hello-world program we can expect the generated AST to look like the following:  So, how do we access these elements of AST using `CppParser`? Below is the program written as a unit test for validating the correctness of the generated AST: !INCLUDECODE "cppparser/test/unit/test-hello-world.cpp" (c++) **This example is real and is part of the actual unit tests for CppParser**. For AST traversal, see [CppWriter](cppwriter), which uses the generated AST to create files. ## Building CppParser ### Get the source ```sh git clone https://github.com/satya-das/CppParser.git ``` ## Configure and build ```sh cd cppparser mkdir builds cd builds cmake .. make ``` *Alternatively, if you prefer `Ninja` instead of `make`*: ```sh cd cppparser mkdir builds cd builds cmake -G Ninja .. ninja ``` ## For contributors who need to run tests Make sure you also clone the dependencies. Run the following command in the parent directory of the root of `cppparser`. ```sh git clone https://github.com/satya-das/common.git ``` After this command the `common` and `cppparser` folders should be side by side. ## Configure and run tests ```sh cd cppparser mkdir builds cd builds cmake -G Ninja .. -DCPPPARSER_BUILD_TESTS=ON ninja && ninja test ``` Modify the command by removing `-G Ninja` if you prefer `make`.