Executable org-formatted pseudocode embedded in Python.
pip install neulang==0.3.2
Coding for humans.
Neulang is a natural language enabling layer embedded in Python. It takes scripts containing pseudocode in Org format and runs them.
As the easiest programming language for anyone to learn, Python is awesome. But there's still that curve that continues to shut many out of the coding world. People shouldn't have to learn another language to code, especially in this age of smart devices, IoT and AI. Let's bring coding to the people, not the people to coding. Oh, and I have a lot of pseudocode in Org format that I'd like to make executable.
pip install neulang
or clone the latest version from GitLab.
neu [options] --command="* neu command"
neu [options] [-i]
*exit*
, *quit*
or CTRL+d
from neulang import Neulang
n = Neulang()
script = "* air_say 'hello world'"
n.loads(script)
n.eval()
neu [options] /path/to/script.neu
neu [options] script.neu -o"s/org/path/as/regex/or/index"
neu [options] -m"path/to/first/module.neu:another/module.neu"
* include("neulang.natural.basics")
via scriptn.load_module("neulang.natural.basics")
via instancen.to_py()
via instanceneu script.neu --to-py
via CLIn.get_patterns()
via instanceneu script.neu --patterns
via CLIALT+x org-mode ENTER
) and write a script as organized pseudocode.tests/tests.neu
. The following operational layers are currently available:
Regular Python expression nodes:
* print("Hello world")
A provisional subset of Python statement-oriented features are also reimplemented as callables to ease transition. These are all prefixed with x_
:
* x_setv('os', x_import('os'))
ASTIR (Abstract Syntax Tree Intermediate Representation) nodes as a drop-in for statements and expressions (not all are implemented as yet). It is distinguished by keywords beginning with air_
. The rest tends to, in most cases, correspond to the Python-native name of the operation (though not in this example):
* air_setv
** my_string
** This is a string
* air_call print my_string
Natural language nodes parsed via the Mycroft Adapt intent parser:
intent_parts
section takes 1+ valid regular expressions which uses dict groups to enable parsing into an intent. For convenience, named groups can be denoted by double angles, eg. <<req_my_name>>
expands to (?P<req_my_name>.+)
.body
section is made of any of the layers, and also expands the named groups as individual name-bindings.tests.neu
for example usage.neu script.neu
There is currently one example, a todo app. It uses flask
and SQLAlchemy
and is based on this Flask intro tutorial. The code is in examples/flask_todo
. To install and run (assuming Neu is already working):
git clone
and cd
into the projectpip install -r examples/flask_todo/requirements.txt
neu examples/flask_todo/todo.neu
This starts a Flask app which serves an API for manages todos. The todos are stored in a - memory based by default - SQLite database. To interact with it, go to another terminal and run using the also included HTTPie
app (or your preferred HTTP client which supports the methods POST, GET, PUT and DELETE):
http -f POST http://127.0.0.1:5000/api/v0/tasks name=first id=0 note='My first note'
http GET http://127.0.0.1:5000/api/v0/tasks/0
http -f PUT http://127.0.0.1:5000/api/v0/tasks/0 name=first id=0 note='Editing the note...'
http -f POST http://127.0.0.1:5000/api/v0/tasks name=first id=0 note='Adding more things to do!'
http GET http://127.0.0.1:5000/api/v0/tasks
http DELETE http://127.0.0.1:5000/api/v0/tasks/0
Go check out the Neu code that makes it possible. There are 3 files: flask.neu
which manages the Flask app, database.neu
which manages the database modeling and transactions, and todo.neu
which creates the app and defines the API endpoints. Don't forget to open in an editor with org-mode support!
Org-mode is a rich plain-text system for keeping notes, planning projects and a variety of other organizational tasks. It uses a hierarchial tree structure denoted by stars which can be easily manipulated with keyboard shortcuts. Parts of the text can be folded to show only the general structure and parts currently being worked on.
These core features are inherited by Neulang, which will in time make coding more a matter of organizing natural phrases/sentences which describe desired operations. Specifically, the org-mode features (and their Emacs bindings) which make Neulang easily manipulable are:
ALT+ENTER
ALT+UP/DOWN
ALT+LEFT/RIGHT
ALT_SHIFT+LEFT/RIGHT
TAB
See The Org Manual: Structure editing for more.
GNU AGPLv3+. See LICENSE.
See CONTRIBUTING.
See CHANGELOG.
For more information, follow the Neulang Dev channel (preview here). Also join the official Neulang Chat on Telegram and/or the bridged Matrix room at #neulang:matrix.org.