Skip to main content

Crate cgrammar

Crate cgrammar 

Source
Expand description

§CGrammar

A comprehensive C language grammar parser library written in Rust, implementing the C23 standard (ISO/IEC 9899:2023).

§Language Support

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 (0b prefix)
    • Digit separators in numeric literals
    • _BitInt type specifier
    • typeof and typeof_unqual operators
    • _Decimal128, _Decimal32, _Decimal64 types
    • And many more C23 additions

§Quick Start

Add this to your Cargo.toml:

[dependencies]
cgrammar = "0.2.0"

§Basic Usage

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...
    }
}

§License

This project is licensed under the Apache-2.0 License - see the LICENSE file for details.

Re-exports§

pub use visitor::Visitor;
pub use visitor::VisitorMut;
pub use parser::*;

Modules§

parser
Parser for C source code, producing an abstract syntax tree.
span
Span utilities.
visitor
Visitor pattern implementation for traversing the C AST.

Structs§

AssignmentExpression
Assignment expressions (6.5.16)
AtomicTypeSpecifier
Atomic type specifiers (6.7.2.4)
Attribute
Attribute (6.7.12.1)
BalancedTokenSequence
Balanced token sequence (6.4.4.3)
BinaryExpression
Binary expressions (6.5.14)
BracedInitializer
Braced initializers (6.7.10)
CharacterConstant
Character constants (6.4.4.4)
CommaExpression
Comma expressions (6.5.17)
CompoundLiteral
Compound literals (6.5.2.5)
CompoundStatement
Compound statements (6.8.2)
ConditionalExpression
Conditional expressions (6.5.15)
Declaration
Declarations (6.7)
DeclarationSpecifiers
Declaration specifiers (6.7)
DesignatedInitializer
Designated initializers (6.7.10)
Designation
Designation (6.7.10)
EnumSpecifier
Enum specifiers (6.7.2.2)
Enumerator
Enumerator (6.7.2.2)
Expression
Expression
ExpressionStatement
Expression statements (6.8.3)
FloatingConstant
Floating-point constants (6.4.4.2)
FunctionDefinition
Function definitions (6.9.1)
GenericSelection
Generic selection (6.5.1.1)
Identifier
Identifier (6.4.2.1)
InitDeclarator
Init declarators (6.7)
IntegerConstant
Integer constants (6.4.4.1)
LabeledStatement
Labeled statements (6.8.1)
ParameterDeclaration
Parameter declarations (6.7.6)
Pointer
Pointers (6.7.6)
SpecifierQualifierList
Specifier qualifier lists (6.7.2.1)
State
Parsing state.
Statement
Statements (6.8)
StaticAssertDeclaration
Static assert declarations (6.7.11)
StringLiteral
String literal (6.4.5)
StringLiterals
Concatenation of string literals (6.4.5)
StructOrUnionSpecifier
Struct or union specifiers (6.7.2.1)
TranslationUnit
Translation units (6.9)

Enums§

AbstractDeclarator
Abstract declarators (6.7.7)
AlignmentSpecifier
Alignment specifiers (6.7.5)
ArrayDeclarator
Array declarators (6.7.6)
AssignmentOperator
Assignment operators (6.5.16)
AttributeSpecifier
Attribute specifiers (6.7.12.1)
AttributeToken
Attribute tokens (6.7.12.1)
BalancedToken
Balanced tokens (6.4.4.3)
BinaryOperator
Binary operators (6.5.14)
BlockItem
Block items (6.8.2)
CastExpression
Cast expressions (6.5.4)
Constant
Constants (6.4.4)
ConstantExpression
Constant expressions (6.6)
DeclarationKind
Declaration kinds
DeclarationSpecifier
Declaration specifiers (6.7)
Declarator
Declarators (6.7.6)
Designator
Designators (6.7.10)
DirectAbstractDeclarator
Direct abstract declarators (6.7.7)
DirectDeclarator
Direct declarators (6.7.6)
EncodingPrefix
Encoding prefixes (6.4.4.4)
ExpressionKind
Expression kinds
ExternalDeclaration
External declarations (6.9)
FloatingSuffix
Floating-point suffixes (6.4.4.2)
ForInit
For initialization subclause (6.8.5)
FunctionSpecifier
Function specifiers (6.7.4)
GenericAssociation
Generic association (6.5.1.1)
Initializer
Initializers (6.7.10)
IntegerSuffix
Integer suffixes (6.4.4.1)
IterationStatement
Iteration statements (6.8.5)
JumpStatement
Jump statements (6.8.6)
Label
Labels (6.8.1)
MemberDeclaration
Member declarations (6.7.2.1)
MemberDeclarator
Member declarators (6.7.2.1)
ParameterDeclarationKind
Parameter declaration kinds (6.7.6)
ParameterTypeList
Parameter type lists (6.7.6)
PointerOrBlock
Pointer or block (clang extension)
PostfixExpression
Postfix expressions (6.5.2)
PredefinedConstant
Predefined constants (6.4.4.5)
PrimaryBlock
Primary blocks (6.8.4)
PrimaryExpression
Primary expressions (6.5.1)
Punctuator
Punctuators (6.4.6)
SelectionStatement
Selection statements (6.8.4)
StatementKind
Statement kinds
StorageClassSpecifier
Storage class specifiers (6.7.1)
StructOrUnion
Struct or union (6.7.2.1)
TypeName
Type names (6.7.7)
TypeQualifier
Type qualifiers (6.7.3)
TypeSpecifier
Type specifiers (6.7.2)
TypeSpecifierQualifier
Type specifier qualifiers (6.7.2.1)
TypeofSpecifier
typeof specifiers (6.7.2.5)
TypeofSpecifierArgument
UnaryExpression
Unary expressions (6.5.3)
UnaryOperator
Unary operators (6.5.3)
UnlabeledStatement
Unlabeled statements (6.8)

Traits§

Parser
A trait implemented by parsers.

Functions§

lex
Lexes the input source code into a balanced token sequence.

Type Aliases§

Decl
A declaration with source span information.
Declr
A declarator with source span information.
Expr
An expression with source span information.
Ident
An identifier with source span information.
Stmt
A statement with source span information.
TypeNm
A type name with source span information.