Metadata-Version: 2.0
Name: flang
Version: 0.1.0
Summary: A simple stack-based language for teaching programming concepts.
Home-page: https://gitlab.com/shakna-israel/flang
Author: James Milne
Author-email: james.milne@protonmail.com
License: MIT
Keywords: stack programming teach
Platform: UNKNOWN
Classifier: Development Status :: 3 - Alpha
Classifier: Intended Audience :: Education
Classifier: License :: OSI Approved :: MIT License
Classifier: Topic :: Education
Classifier: Programming Language :: Python :: 3

# Flang

A stack-based programming language for teaching basic concepts.

---

Flang is an overly-simple programming language.

It's intended for teaching, but isn't quite complete yet.

For now, this is the feature list.

- [X] Number type: Int
- [X] Number type: Float
- [ ] Number type: Rational
- [X] Function type
- [X] String type (UTF-8)
- [X] Human-readable error messages, designed for beginners.
- [-] As much parse-time safety as is possible.
- [ ] Loops? (This may not happen, as we can push functions to the stack)
- [ ] Conditionals
- [ ] Swap function, to rearrange the stack
- [ ] Slice function, to more easily rearrange large parts of the stack
- [X] Print function, including using special characters inside strings
- [X] Print/literal function, not including using special characters inside strings
- [X] Print/stack function, for displaying the stack
- [X] Exit function
- [X] Reset function, to set the stack back to nothing
- [X] Reverse function, to rearrange the stack
- [X] Push function, for placing typed objects on the stack
- [X] Add function, for mathematics or combining strings
- [X] Take function, for mathematics
- [X] Times function, for mathematics
- [X] Divide function, for mathematics
- [X] Pop function, for executing functions on the stack
- [X] Peek function, for executing functions on the stack
- [X] Drop function, for not executing functions on the stack
- [X] Read-Eval-Print-Loop
- [X] Ability to execute a file
- [X] Comments. Can be nested.
- [ ] User functions.
- [ ] String Library for working with strings.
- [ ] Help function
- [ ] Interactive Tutorial function
- [ ] Documentation

## Decisions to make:

- [ ] Case insensitivity. Should Flang be case-sensitive or not?
- [X] Indexing. Flang will be 1-indexed, to make new adoption easier.
- [ ] User Functions. What kind of shape should these take? How could they be written?
- [ ] Hash Table Type. Do we need it? How would it be used?
- [ ] Mini-Stack Type. Do we need it? How would it be used? (Think Linked-List)
- [ ] A library of tools for strings is needed. But, it needs to be defined.
- [ ] Semantic Versioning. What API will be covered by semver?

---

## Install

Don't.

This is alpha-software, and breaking is going to happen a lot.

The documentation that is vitally needed, isn't anywhere near ready for the public.

Right... So, if you're insisting on ignoring all that:

The latest release can be installed via pip:

    pip install flang

Or, you can install from the git repository to get all the very latest changes:

    git clone https://gitlab.com/shakna-israel/flang.git
    cd flang
    python3 setup.py install

---

## Usage

You can explore Flang in two ways:

If you have a file filled with Flang commands:

    flang filename

Or, you can enter the interactive Read-Evaluate-Print Loop:

    flang repl


