Make this look like a project
This commit is contained in:
parent
75ff8091aa
commit
a5f00256b0
|
@ -0,0 +1,9 @@
|
|||
# Build files
|
||||
/build
|
||||
|
||||
# Qt Creator files
|
||||
/CMakeLists.txt.user*
|
||||
/ell.config
|
||||
/ell.files
|
||||
/ell.creator*
|
||||
/ell.includes
|
|
@ -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.
|
|
@ -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
19
ell.c
|
@ -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>
|
||||
|
|
Loading…
Reference in New Issue