Make this look like a project

This commit is contained in:
Přemysl Eric Janouch 2017-05-06 14:12:46 +02:00
parent 75ff8091aa
commit a5f00256b0
Signed by: p
GPG Key ID: B715679E3A361BE6
4 changed files with 136 additions and 0 deletions

9
.gitignore vendored Normal file
View File

@ -0,0 +1,9 @@
# Build files
/build
# Qt Creator files
/CMakeLists.txt.user*
/ell.config
/ell.files
/ell.creator*
/ell.includes

13
LICENSE Normal file
View File

@ -0,0 +1,13 @@
Copyright (c) 2017, Přemysl Janouch <p.janouch@gmail.com>
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

95
README.adoc Normal file
View File

@ -0,0 +1,95 @@
ell
===
:compact-option:
'ell' is a modified subset of Scheme with added syntax sugar, incorporating
ideas from Perl, Tcl and Bourne shell. The goal was to conceive a programming
language implementable with as little code as possible while still being
reasonably comfortable to use.
This package is an implementation of said language, meant to be self-contained,
portable and reusable. Performance is specifically not an intent.
Syntax
------
Owing to its Scheme heritage, 'ell' is homoiconic, that is a program can be
directly expressed using the language's data types. There are only two of
those: the list and the string. Any numerical conversions are made on an
as-needed basis. Similarly, strings act like atoms/symbols when executed.
The parser, however, does a bunch of transformations:
* `[a b c]` makes a call to `(list a b c)`;
* `@var` is a shorthand for `(set var)`;
* `{ code }` is the most complex one. Each line within the curly braces is
wrapped in parentheses, and the resulting list is quoted, so that it doesn't
execute immediately.
As an example, consider the following snippet:
print (if { = @var foo } {
quote 'Hello world\n'
} else {
quote 'Error\n'
})
which gets expanded to the following:
((print (if (quote ((= (set var) foo)))
(quote ((quote 'Hello world\n')))
else
(quote ((quote 'Error\n'))))))
Observe that the whole program is enclosed in an implicit pair of `{}` and that
`quote` is a very powerful special form which can replace many others if needed.
Runtime
-------
All variables are put in a single global namespace with no further scoping.
When calling a command (which is a list of lists), all arguments are
automatically stored in variables named 1, 2, 3, ... n. They are however
effectively inaccessible and you must rename them first using the `arg` special
form.
When evaluating a command, the first argument is typically a string with its
name and it is resolved as if `set` was called on it.
The last expression in a block is the return value.
Special forms
-------------
`quote <arg>`
Returns the first argument.
`arg <name>...`
Reassigns arguments to the current call in order to given names. This must be a
special form because of the lack of variable scoping. It needs to see arguments
from the other scope.
Standard library
----------------
`if <cond> <body> [elif <cond> <body>]... [else <body>]`
Conditional evaluation, strings evaluate to themselves.
`funargs`
Returns arguments to the current evaluation context as a list.
Contributing and Support
------------------------
Use this project's GitHub to report any bugs, request features, or submit pull
requests. If you want to discuss this project, or maybe just hang out with
the developer, feel free to join me at irc://irc.janouch.name, channel #dev.
License
-------
'ell' is written by Přemysl Janouch <p.janouch@gmail.com>.
You may use the software under the terms of the ISC license, the text of which
is included within the package, or, at your option, you may relicense the work
under the MIT or the Modified BSD License, as listed at the following site:
http://www.gnu.org/licenses/license-list.html

19
ell.c
View File

@ -1,3 +1,22 @@
/*
* ell.c: an experimental little language
*
* Copyright (c) 2017, Přemysl Janouch <p.janouch@gmail.com>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
* SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
* OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
* CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*/
#define _XOPEN_SOURCE 500
#include <stdio.h>