Convert Figma logo to code with AI

rswier logoc4

C in four functions

9,633
1,421
9,633
27

Top Related Projects

Write a simple interpreter of C. Inspired by c4 and largely based on it.

10,422

A Compiler Writing Journey

Quick Overview

C4 is a minimalist self-hosting C compiler written in C. It's designed to be small, simple, and capable of compiling itself. The entire compiler is contained in a single C file, making it an excellent educational tool for understanding compiler construction.

Pros

  • Extremely compact (less than 1000 lines of code)
  • Self-hosting, capable of compiling itself
  • Educational resource for learning about compilers
  • Implements a subset of C, making it easier to understand than full C compilers

Cons

  • Limited feature set compared to full C compilers
  • Not suitable for production use or compiling complex C programs
  • Lacks optimizations and advanced features
  • May not be fully compliant with modern C standards

Code Examples

  1. Basic function definition and call:
int add(int a, int b) {
    return a + b;
}

int main() {
    int result = add(5, 3);
    return result;
}
  1. Simple if-else statement:
int max(int a, int b) {
    if (a > b)
        return a;
    else
        return b;
}
  1. While loop example:
int sum_to_n(int n) {
    int sum = 0;
    int i = 1;
    while (i <= n) {
        sum = sum + i;
        i = i + 1;
    }
    return sum;
}

Getting Started

To use C4, follow these steps:

  1. Clone the repository:

    git clone https://github.com/rswier/c4.git
    
  2. Compile C4 using a C compiler:

    gcc -o c4 c4.c
    
  3. Use C4 to compile a C file:

    ./c4 your_program.c
    
  4. Run the compiled program:

    ./a.out
    

Note that C4 implements a subset of C, so not all C programs will compile successfully. Refer to the project documentation for supported features and limitations.

Competitor Comparisons

Write a simple interpreter of C. Inspired by c4 and largely based on it.

Pros of write-a-C-interpreter

  • More comprehensive documentation and explanations
  • Cleaner code structure with better organization
  • Includes a more complete set of C language features

Cons of write-a-C-interpreter

  • Larger codebase, potentially harder to grasp quickly
  • Less compact and minimalist approach
  • May be slower to compile due to increased complexity

Code Comparison

c4:

enum { Num = 128, Fun, Sys, Glo, Loc, Id, Char, Else, Enum, If, Int, Return, Sizeof, While, ... };

write-a-C-interpreter:

enum {
    TK_NUM = 128, TK_STR, TK_CHAR,
    TK_ID, TK_COMMENT, TK_KEYWORD,
    TK_INC, TK_DEC, TK_SHL, TK_SHR,
    ...
};

The code comparison shows that write-a-C-interpreter uses more descriptive token names and includes a wider range of language constructs, while c4 opts for a more concise approach.

Both projects aim to create a simple C interpreter, but write-a-C-interpreter focuses on being more educational and feature-complete, while c4 prioritizes minimalism and compactness. The choice between them depends on whether you prefer a more comprehensive learning experience or a quick, bare-bones implementation.

10,422

A Compiler Writing Journey

Pros of acwj

  • More comprehensive and educational, covering a wider range of compiler topics
  • Includes detailed explanations and documentation for each step
  • Gradually builds a more feature-rich compiler

Cons of acwj

  • Significantly larger and more complex codebase
  • Takes longer to work through and understand fully
  • May be overwhelming for absolute beginners

Code Comparison

c4:

enum { Num = 128, Fun, Sys, Glo, Loc, Id, Char, Else, If, Int, Return, Sizeof, While, };

acwj:

enum {
  T_EOF, T_PLUS, T_MINUS, T_STAR, T_SLASH, T_INTLIT, T_SEMI, T_EQUALS,
  T_LBRACE, T_RBRACE, T_LPAREN, T_RPAREN, T_AMPER, T_LOGAND, T_LOGOR,
  // ... (more tokens)
};

Both projects define enums for tokens, but acwj's enum is more extensive, reflecting its broader scope and more feature-rich compiler implementation.

Convert Figma logo designs to code with AI

Visual Copilot

Introducing Visual Copilot: A new AI model to turn Figma designs to high quality code using your components.

Try Visual Copilot

README

c4 - C in four functions

An exercise in minimalism.

Try the following:

gcc -o c4 c4.c
./c4 hello.c
./c4 -s hello.c

./c4 c4.c hello.c
./c4 c4.c c4.c hello.c