1.1.27 • Published 7 months ago

cxx-frontend v1.1.27

Weekly downloads
-
License
MIT
Repository
github
Last release
7 months ago

A compiler front end for the C++ language

cxx-frontend is a work-in-progress compiler frontend for C++23

The compiler frontend is designed to be a powerful tool for developers, enabling them to parse, analyze, and modify C++ source code. This project aims to provide a robust foundation for building a complete C++ frontend, staying up-to-date with the latest language features and standards.

Changelog and What's New

For updates, improvements, and recent features in cxx-frontend, please consult the Changelog.

Key Features

  • Syntax Analysis: APIs to scan, preprocess, parse, and inspect the syntax of source code, making it a versatile tool for various code analysis tasks.

  • Multi-Language Support: In addition to C++, the library provides APIs for TypeScript and JavaScript.

  • C++-23 Support: Latest language enhancements, syntax, and features (WIP).

Syntax Checker and AST Browser Showcase

Storybook and CodeMirror are used to demonstrate how to create a syntax checker and navigate the Abstract Syntax Tree (AST)

https://robertoraggi.github.io/cplusplus/

Installing from npm

To integrate the latest stable version of the C++ Compiler Frontend bindings into your project, you can install them from npm:

npm install cxx-frontend

Once installed, you can use the bindings in your Node.js or web projects as needed.

Getting Started Using Example Projects

These projects are pre-configured and serve as starting points for various use cases.

For Node.js

npx degit robertoraggi/cplusplus/templates/cxx-parse cxx-parse
cd cxx-parse
npm install
node .

For web-based applications, use these commands to clone, set up, and start a development server:

npx degit robertoraggi/cplusplus/templates/cxx-browser-esm-vite cxx-browser-esm-vite
cd cxx-browser-esm-vite
npm install
npm run dev

Build the npm package (requires docker)

cd packages/cxx-frontend

# prepare the package
npm ci

# compile WASM and TypeScript code
npm run build

# build the package
npm pack

Build the WASM/WASI (requires docker)

# build for WASI and install it under build.em/install/
./scripts/build-wasi.sh

# run the C++ front end CLI tool using wasmtime
wasmtime \
  --mapdir=/::build.wasi/install \
  --mapdir tests::tests \
  build.wasi/install/usr/bin/cxx.wasm -- \
  tests/manual/source.cc -ast-dump

Native Build and CLI tools

On Linux, macOS and Windows:

# install the python packages required to run the unit tests (optional)
pip install -r tests/unit_tests/requirements.txt

# configure the source code
cmake . \
 -G Ninja \
 -B build \
 -DCMAKE_BUILD_TYPE=Release \
 -DCXX_INTERPROCEDURAL_OPTIMIZATION=1

# build
cmake --build build

# run the unit tests
cd build
ctest --progress

Serialize the AST

Use -emit-ast to serialize the AST of a C++ program to a flatbuffer binary file

# serialize the AST
$ ./build/src/frontend/cxx -emit-ast source.cc -o source.ast

You can use any flatbuffers supported decoder to read the AST, e.g.

# Use flatc to dump the AST to JSON
$ ./build/_deps/flatbuffers-build/flatc --raw-binary -t build/src/parser/cxx/ast.bfbs  -- source.ast

$ ll source.*
source.ast source.cc source.json

License

Copyright (c) 2023 Roberto Raggi roberto.raggi@gmail.com

Licensed under the MIT license.

1.1.19

9 months ago

1.1.18

9 months ago

1.1.17

10 months ago

1.1.23

8 months ago

1.1.22

8 months ago

1.1.21

8 months ago

1.1.20

9 months ago

1.1.27

7 months ago

1.1.26

8 months ago

1.1.25

8 months ago

1.1.24

8 months ago

1.1.16

11 months ago

1.1.15

11 months ago

1.1.14

2 years ago

1.1.12

2 years ago

1.1.13

2 years ago

1.1.9

2 years ago

1.1.8

2 years ago

1.1.7

2 years ago

1.1.6

3 years ago

1.1.5

3 years ago

1.1.11

2 years ago

1.1.10

2 years ago

1.1.1

3 years ago

1.1.0

3 years ago

1.1.4

3 years ago

1.1.3

3 years ago

1.1.2

3 years ago

1.0.0

3 years ago