Skip to main content

PyHorizon custom language interpreter

Project description

PyHorizon

PyHorizon is a tiny custom programming language written in Python. Program files use the .pyh extension and are executed by pyhori.

Project Structure

  • main.py - command-line entry point. Reads a .pyh file and runs it.
  • lexer.py - converts source code into tokens.
  • parser.py - turns tokens into an abstract syntax tree.
  • ast_nodes.py - AST node definitions.
  • interpreter.py - executes the AST.
  • environment.py - variable scope handling.
  • errors.py - readable lexer, parser, and runtime errors.
  • tokens.py - token data model.
  • example.pyh - sample program in the language.
  • calculator.pyh - interactive calculator app written in PyHorizon.
  • app.pyh - GUI app that opens a window.
  • telegram_send.pyh - Telegram Bot API example.
  • ai_request.pyh - AI HTTP request example.

Syntax

Supported commands:

  • say "Hello"
  • say Hello world name
  • imp x = 10
  • x = x + 1
  • if x > 5 ... else ... end
  • loop x < 10 ... end
  • func add(a, b) ... end
  • return value
  • # comment

In say, plain words without quotes are treated as text, and variables are inserted automatically. Example:

imp name = Gh
say Hello name

ask reads user input and automatically converts numbers and booleans when possible:

imp value = ask Введи число

Built-ins for bots and AI:

  • http_get(url)
  • http_post(url, body)
  • http_post_headers(url, body, headers_json)
  • json_parse(text)
  • json_stringify(value)
  • sleep(seconds)
  • run_cmd(command)
  • to_text(value)

JSON data can be accessed with brackets:

imp data = json_parse("{\"ok\": true, \"n\": 3}")
imp value = data["n"]
say value

How It Works

  1. The lexer reads text from a .pyh file and turns it into tokens.
  2. The parser builds a structured tree of statements and expressions.
  3. The interpreter walks that tree and executes the program.

Run

Install

From PyPI:

pip install pyhori

From local source:

pip install .

Windows

pyhori example.pyh

Linux

pyhori example.pyh

Termux

pkg install python
pip install .
pyhori example.pyh

You can also run your own file:

pyhori program.pyh

Run the included app:

pyhori calculator.pyh

Open the GUI app:

pyhori app.pyh

Run the Telegram example:

pyhori telegram_send.pyh

Run the AI example:

pyhori ai_request.pyh

Show the version:

pyhori --version

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

pyhori-0.1.2.tar.gz (12.4 kB view details)

Uploaded Source

Built Distribution

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

pyhori-0.1.2-py3-none-any.whl (13.1 kB view details)

Uploaded Python 3

File details

Details for the file pyhori-0.1.2.tar.gz.

File metadata

  • Download URL: pyhori-0.1.2.tar.gz
  • Upload date:
  • Size: 12.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for pyhori-0.1.2.tar.gz
Algorithm Hash digest
SHA256 f52a47e5968e56af59b2965c1a13dc1486832d357a05c26cbc99c83dde06661a
MD5 ce7e2625478aa1cc26882f47f40d2843
BLAKE2b-256 1d6c4453d579a83f7d7ff6e38f4aae9d0c41b0037546184bccfb874d46249a46

See more details on using hashes here.

File details

Details for the file pyhori-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: pyhori-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 13.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.10.11

File hashes

Hashes for pyhori-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 832aa94a61cd9dbcb53ae2746263da0e86b111d254d0a749d1e782ff4def9e68
MD5 4407d8b4805bd066d3c9cd48670a0625
BLAKE2b-256 a6e0f5cd8cec7a2b223aa77902f530c761c5ab27783060436b7c2cc4827fdac0

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