A comprehensive C language grammar parser library written in Rust, implementing the C23 standard (ISO/IEC 9899:2023).
This library supports all major C23 features including:
- Lexical Elements: Keywords, identifiers, constants, string literals, and punctuators
- Expressions: All expression types from primary expressions to complex compound expressions
- Declarations: Variable declarations, function declarations, and type declarations
- Statements: Control flow, loops, jumps, and compound statements
- Functions: Function definitions with parameter lists and variadic arguments
- Preprocessor: Basic preprocessing token support
- Modern C Features:
- Binary constants (
0bprefix) - Digit separators in numeric literals
_BitInttype specifiertypeofandtypeof_unqualoperators_Decimal128,_Decimal32,_Decimal64types- And many more C23 additions
- Binary constants (
Add this to your Cargo.toml:
[dependencies] cgrammar = "0.2.0"
use cgrammar::*; fn main() { let source_code = r#" int main() { printf("Hello, World!\n"); return 0; } "#; // Tokenize the source code let (tokens, _) = lex(source_code, None); // Parse into AST let result = translation_unit().parse(tokens.as_input()); if let Some(ast) = result.output() { println!("Successfully parsed!"); println!("{:#?}", ast); } else { eprintln!("Parse failed!"); // Handle errors... } }
This project is licensed under the Apache-2.0 License - see the LICENSE file for details.