Skip to main content

ECP programming language

Project description

pseudocode-interpreter

CC BY-SA 2021 Alfred Taylor & Conqu3red

(AQA) Exam Compatible Psuedocode V1 ALPHA (A.E.C.P/E.C.P)

PLEASE EXPECT LIMITED FUNCTIONALITY.

Introduction:

This is an adaptation of the pseudocode used by the AQA GCSE testing body (found here) that has had its syntax tweaked for use in a compiler and had some additional functionality added. The language will be fully Turing complete. Pseudocode found in tests is compatible with AECP/ECP. It is procedurally based, and shares similarities with python (It is programmed on python, after all.) It is intended as a scripting language, that is separate from python, but has the same basic functionality, whilst maintaining some resemblance of simplicity. Considering it is entirely written in python, it is not for use in situations where speed is a priority.

Interpreters

Currently we only have a python based interpreter, altough we have a C++ based interpreter coming soon.

How it works

AECP/ECP code is analysed and then parsed into a python AST (Abstract Syntax Tree). This can then be executed by the python interpreter. This allows near seamless integration with python and almost identical speed and behaviour.

Usage

Command Line arguments

usage: python -m ecp [-h] [--debug] [--trace [TRACE [TRACE ...]]] [--tracecompact] [--pause] [--version] [inputfile]

ECP interpreter

positional arguments:
  inputfile

optional arguments:
  -h, --help            show this help message and exit
  --debug               show debug information like token list
  --trace [TRACE [TRACE ...]]
                        space seperated names of the variables to be traced
  --tracecompact        trace compactly
  --pause               pause on completion
  --version             show program's version number and exit

Installation

pip install py-ecp

Running

python -m ecp path/to/ecp/file.ecp

Embedding ecp code in python files

from ecp import ecp

ecp("""
SUBROUTINE TotalOut(a, b)
    c ← a + b
    WHILE a < c
        a ← a + 1
        b ← b - a
    ENDWHILE
    RETURN b
ENDSUBROUTINE
""", scope=globals())

print(TotalOut(3, 4))

Converting ECp to python source code

python -m ecp path/to/ecp/file.ecp --topython

or:

from ecp import to_py_source
text = """
SUBROUTINE DoSomething(a, b)
    RETURN a + b
ENDSUBROUTINE
"""

print(to_py_source(text))

MORE COMING SOON!

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

py-ecp-1.5.0.tar.gz (23.2 kB view details)

Uploaded Source

Built Distribution

py_ecp-1.5.0-py3-none-any.whl (23.9 kB view details)

Uploaded Python 3

File details

Details for the file py-ecp-1.5.0.tar.gz.

File metadata

  • Download URL: py-ecp-1.5.0.tar.gz
  • Upload date:
  • Size: 23.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.11

File hashes

Hashes for py-ecp-1.5.0.tar.gz
Algorithm Hash digest
SHA256 c953ce7e08c7e1d54a6953dab08d0a4b9f0b1c7d527e67f4ad41c79018f254de
MD5 849d2f722dc19efb2653eb7ba0f8288d
BLAKE2b-256 629b091e6720d12f517912c2ce54432029e891efc1ac4e6aea434e0454e89c21

See more details on using hashes here.

File details

Details for the file py_ecp-1.5.0-py3-none-any.whl.

File metadata

  • Download URL: py_ecp-1.5.0-py3-none-any.whl
  • Upload date:
  • Size: 23.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.10.11

File hashes

Hashes for py_ecp-1.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f4aad1a6296df4387c02e3e06829c8350153611454d1a8a7a13ccca762e66da7
MD5 13c8b54640f850a06e33ce1f14e8d474
BLAKE2b-256 c87a2c7be295949f386773e82c313556a393a08cbd88cc0bb14e8f60e1f82fe1

See more details on using hashes here.

Supported by

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