/antiOOP

antiOOP is a statically-typed functional programming language built from scratch using Python

Primary LanguagePythonApache License 2.0Apache-2.0

antiOOP: A Functional Programming Language

antiOOP Logo

antiOOP is a statically-typed functional programming language built from scratch using Python. This project demonstrates the implementation of key concepts in programming language design and functional programming.

Blog Series

Follow our step-by-step guide to building antiOOP:

  1. Introduction to Functional Programming and antiOOP
  2. Setting Up the Development Environment
  3. Designing the Core Language Features
  4. Implementing the Lexer
  5. Building the Parser
  6. Creating the Abstract Syntax Tree (AST)(still under development)
  7. Implementing the Interpreter(still under development)
  8. Adding Higher-Order Functions(still under development)
  9. Introducing Pattern Matching(still under development)
  10. Implementing Lazy Evaluation(still under development)
  11. Adding Type Inference(still under development)
  12. Creating a Standard Library(still under development)
  13. Building a REPL and Optimizing Performance(still under development)

Features

  • Functional programming paradigm
  • Static typing with type inference
  • Higher-order functions
  • Pattern matching
  • Lazy evaluation
  • Custom data types
  • Standard library
  • REPL (Read-Eval-Print Loop)

Getting Started

  1. Clone the repository:

    git clone https://github.com/yourusername/antioop.git
    cd antioop
    
  2. Set up a virtual environment:

    python -m venv venv
    source venv/bin/activate  # On Windows, use `venv\Scripts\activate`
    
  3. Install dependencies:

    pip install -r requirements.txt
    
  4. Run the following before running test files

    export PYTHONPATH=/path/to/antioop:$PYTHONPATH
    
    pytest tests/test_lexer.py
    

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

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