All Projects → TheSYNcoder → JuCC

TheSYNcoder / JuCC

Licence: Apache-2.0 license
JuCC - Jadavpur University Compiler Compiler

Programming Languages

C++
36643 projects - #6 most used programming language
javascript
184084 projects - #8 most used programming language
CMake
9771 projects
GAP
223 projects
python
139335 projects - #7 most used programming language
shell
77523 projects

Projects that are alternatives of or similar to JuCC

CaptCC
A tiny C compiler written purely in JavaScript.
Stars: ✭ 175 (+414.71%)
Mutual labels:  parsing, compiler-design, compiler-construction
librxvm
non-backtracking NFA-based regular expression library, for C and Python
Stars: ✭ 57 (+67.65%)
Mutual labels:  parsing, compiler-design
tiny-lang
tiny-lang — A different programming language. Supports a bunch of spoken languages.
Stars: ✭ 26 (-23.53%)
Mutual labels:  compiler-design, compiler-construction
PigletC
A toy C-like language compiler for PigletVM
Stars: ✭ 51 (+50%)
Mutual labels:  compiler-design, compiler-construction
cppcombinator
parser combinator and AST generator in c++17
Stars: ✭ 20 (-41.18%)
Mutual labels:  parsing, compiler-construction
MP4Parse
C++ library for MP4 file parsing.
Stars: ✭ 55 (+61.76%)
Mutual labels:  parsing
cvscan
Your not so typical resume parser
Stars: ✭ 46 (+35.29%)
Mutual labels:  parsing
SwiftTreeSitter
Swift wrappers for the tree-sitter incremental parsing system
Stars: ✭ 116 (+241.18%)
Mutual labels:  parsing
jacoco-report
Github action that publishes the JaCoCo report as a comment in the Pull Request
Stars: ✭ 31 (-8.82%)
Mutual labels:  codecoverage
Concrete-Syntax-Tree
Concrete Syntax Trees represent s-expressions with source information
Stars: ✭ 48 (+41.18%)
Mutual labels:  parsing
kaliningraph
🕸️ Graphs, finite fields and discrete dynamical systems in Kotlin
Stars: ✭ 62 (+82.35%)
Mutual labels:  parsing
SpringBootRestAPI
A ready-to-use Template for Rest API using spring-boot-microservices, MongoDB as Database, Integrated with codecov and sonarqube, deployable to cloud.
Stars: ✭ 24 (-29.41%)
Mutual labels:  codecoverage
fauton
An ecosystem of packages to work with automaton and parsers (dfa/nfa/e-nfa/regex/cfg/pda)
Stars: ✭ 36 (+5.88%)
Mutual labels:  ll1-parser
episode-parser
A javascript utility for parsing file names in a format that sometimes is used for tv shows.
Stars: ✭ 24 (-29.41%)
Mutual labels:  parsing
http-accept
Parse Accept and Accept-Language HTTP headers in Ruby.
Stars: ✭ 69 (+102.94%)
Mutual labels:  parsing
jmockit2
The evolution of JMockit APIs: smaller, simpler, safer, and still powerful
Stars: ✭ 33 (-2.94%)
Mutual labels:  codecoverage
Singulink.IO.FileSystem
Reliable cross-platform strongly-typed file/directory path manipulation and file system access in .NET.
Stars: ✭ 16 (-52.94%)
Mutual labels:  parsing
memology
Memes - why so popular?
Stars: ✭ 32 (-5.88%)
Mutual labels:  parsing
Compiler-written-in-Haskell
A Turing complete language 😉
Stars: ✭ 31 (-8.82%)
Mutual labels:  parsing
kataw
An 100% spec compliant ES2022 JavaScript toolchain
Stars: ✭ 303 (+791.18%)
Mutual labels:  parsing

JuCC

JuCC logo


build codecov

This is the official Jadavpur University Compiler Compiler repository.

Key Features

  • Supports a subset of the C language for now.
  • Custom grammar files to easily extend the language.
  • LL(1) parsing with panic mode error recovery.
  • Generates .json parse tree outputs for easy visualization with Treant.js.
  • 100% Open Source (Apache-2.0 License)

Quickstart

The JuCC project is built and tested on Ubuntu 20.04.

$ git clone https://github.com/TheSYNcoder/JuCC
$ cd JuCC
$ sudo ./script/installation/packages.sh
$ cd server
$ npm i
$ cd ..
$ mkdir build
$ cd build
$ cmake -GNinja -DCMAKE_BUILD_TYPE=Release ..
$ ninja jucc
$ ./bin/jucc -g <grammar_file> -f <input_file> -o <output_json_file>

To run the unit tests provided,

$ mkdir build
$ cd build
$ cmake -GNinja -DCMAKE_BUILD_TYPE=Release ..
$ ninja
$ ./bin/jucc_test

To run the benchmarks, Note: -DCMAKE_BUILD_TYPE=Release is needed

$ mkdir build
$ cd build
$ cmake -GNinja -DCMAKE_BUILD_TYPE=Release ..
$ ninja
$ ./bin/jucc_benchmark

Before pushing or making a pull request ( The tests must pass, compulsory !! )

$ ninja
$ ninja check-format
$ ninja check-clang-tidy
$ ninja check-lint
$ ninja test

To add a new unit test, make a folder with the same relative path as in the src folder, and define your test. Please refer to docs for more details about writing tests using the googletest framework.

Additional Notes:

  • If you know what you're doing, install the prerequisite packages from ./script/installation/packages.sh manually.

For Developers

Please see the docs.

Contributing

Contributions from everyone are welcome!

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].