Skip to main content

A visual programming language that compiles to Python

Project description

Moldo

A visual programming language that compiles to Python, designed to make programming more accessible and intuitive.

Features

  • XML-like syntax for easy visual representation
  • Compiles to Python code
  • Support for Python function imports
  • Basic programming constructs (variables, functions, control flow)
  • Type safety and error handling

Installation

pip install moldo

Quick Start

  1. Create a .moldo file with your code:
<mblock type="print">Hello, World!</mblock>

<mblock type="input">What's your name? </mblock>
<mblock type="variable">name = input()</mblock>
<mblock type="print">f"Nice to meet you, {name}!"</mblock>
  1. Compile and run:
moldo compile your_file.moldo -o output.py
python output.py

Examples

Calculator Example

<!-- Import the math functions module -->
<mblock type="import">examples/math_functions.py</mblock>

<!-- Get input from user -->
<mblock type="input">Enter first number: </mblock>
<mblock type="variable">num1 = float(input())</mblock>

<mblock type="input">Enter second number: </mblock>
<mblock type="variable">num2 = float(input())</mblock>

<!-- Perform calculations -->
<mblock type="print">Addition: </mblock>
<mblock type="call">add(num1, num2)</mblock>

<mblock type="print">Subtraction: </mblock>
<mblock type="call">subtract(num1, num2)</mblock>

<mblock type="print">Multiplication: </mblock>
<mblock type="call">multiply(num1, num2)</mblock>

<mblock type="print">Division: </mblock>
<mblock type="call">divide(num1, num2)</mblock>

Temperature Converter Example

<mblock type="import">examples/temperature_utils.py</mblock>

<mblock type="print">Welcome to Temperature Converter!</mblock>
<mblock type="print">1. Convert Celsius to Fahrenheit</mblock>
<mblock type="print">2. Convert Fahrenheit to Celsius</mblock>

<mblock type="input">Enter your choice (1 or 2): </mblock>
<mblock type="variable">choice = input()</mblock>

<mblock type="variable">
if choice == "1":
    print("Enter temperature in Celsius: ", end="")
    celsius = float(input())
    print(f"{celsius}°C is equal to ", end="")
    result = temperature_utils.celsius_to_fahrenheit(celsius)
    print(f"{result:.1f}°F")
elif choice == "2":
    print("Enter temperature in Fahrenheit: ", end="")
    fahrenheit = float(input())
    print(f"{fahrenheit}°F is equal to ", end="")
    result = temperature_utils.fahrenheit_to_celsius(fahrenheit)
    print(f"{result:.1f}°C")
else:
    print("Invalid choice! Please enter 1 or 2.")
</mblock>

Creating Custom Functions

To create functions that can be used in Moldo, use the @moldo_function decorator:

from moldo.decorators import moldo_function

@moldo_function(reference_name="add")
def add_numbers(a: float, b: float) -> float:
    """Add two numbers together."""
    return a + b

Command Line Interface

The moldo command provides several options:

moldo compile <input_file> -o <output_file>  # Compile Moldo code to Python
moldo run <input_file>                       # Compile and run Moldo code
moldo --help                                 # Show help message

Contributing

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

License

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

Author

  • Mutiibwa Grace Peter - GitHub

Acknowledgments

  • ANTLR4 for the parsing infrastructure
  • Python community for inspiration and tools

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

moldo-0.1.1.tar.gz (13.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

moldo-0.1.1-py3-none-any.whl (14.7 kB view details)

Uploaded Python 3

File details

Details for the file moldo-0.1.1.tar.gz.

File metadata

  • Download URL: moldo-0.1.1.tar.gz
  • Upload date:
  • Size: 13.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for moldo-0.1.1.tar.gz
Algorithm Hash digest
SHA256 ae08c747a73c4aca46f8e8dac3e65f7ff05250b57e186f05894597d44de59edb
MD5 91088748adf2edab2ce24d191928f1d8
BLAKE2b-256 12b11c514795a23e0ac60791920e1083b20daf6ac76b9ccc0ea967db294e6a0f

See more details on using hashes here.

File details

Details for the file moldo-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: moldo-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 14.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.3

File hashes

Hashes for moldo-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 1c55fb335773fba3b099595a5895d2dc75925027a9f8bc961f9d6b2a4b2c809f
MD5 143b6cdeaa789d847034674505a13a6e
BLAKE2b-256 4b56a9f89e9efde126b0a9c1db6b04325c6fc49fb9d4e1ace4b7f24be7f7cbbb

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page