more readme updates

This commit is contained in:
Aidan 2021-05-23 21:45:26 -07:00
parent 8d2811be87
commit 7e3639d48b
No known key found for this signature in database
GPG key ID: 327711E983899316

View file

@ -1,4 +1,4 @@
# shs
# SHS
Syntactically Homogeneous Shell
## Overview
@ -31,10 +31,10 @@ Elements in a list can be one of the following data types:
* **Symbol**:
- A symbol looks like a string without delimiters.
- A symbol denotes a variable or a function.
* **List**: Any combination of multiple items seperated by a space.
* **List**: Any combination of multiple items seperated by a space. (See above.)
### Function calls
Any list beginning in a symbol will be considered a function call. This departs from traditional lisps, and a user may typically expect to be able to start a list with a variable. Given the current architecture this pattern must be maintained in order to enable shell functionality. Thus, from within the `shs_repl` utility unknown symbols will be assumed to be system binaries.
Any list beginning in a symbol will be considered a function call. A user may typically expect to be able to start a list with a variable. However, given the current architecture this pattern must be maintained in order to enable shell functionality. Thus, from within the `shs` utility unknown symbols at the start of a list will be assumed to be system binaries.
Function call: `(append () 1 2 3)`
@ -81,7 +81,7 @@ Output: 9
### Control flow
SHS currently uses the following control flow forms for daily use. Although, it is not hard to create your own in the SHS source code.
#### if statements
The if form takes 3 arguments. It evaluates the first (the condition) if it evaluates to true (T) it evaluates the second argument. If the first argument evaluates to false (F) the `if` routine then evaluates the third argument. The argument that is not used will not be parsed or evaluated. The whole statement will, however, be lexed.
The if form takes 3 arguments. It evaluates the first argument, the condition, and if it evaluates to true (T) it evaluates the second argument. If the first argument evaluates to false (F) the `if` routine then evaluates the third argument. The argument that is not used will not be parsed or evaluated. The whole statement will, however, be lexed.
```
(if (cond) (then) (else))
@ -118,12 +118,12 @@ Any characters after a semicolon will be ignored until end of line. Semicolons f
## How to build
### Compiling/Installation
- For now simply run `go install ./cmd/shs` for each utility you wish to use. If you have $GOPATH and $GOBIN set in your shell it should be usable with $PATH.
- For now simply run `go install ./cmd/shs` . If you have $GOPATH and $GOBIN set in your shell it should be usable with $PATH.
### Adding SHS to your application
Here are some important tips for integrating an SHS REPL into another codebase.
* Make sure to set ast.SyncTablesWithOSEnviron, ast.ExecWhenFuncUndef. All of which control integrations with the underlying system.
* Make sure to set ast.SyncTablesWithOSEnviron and ast.ExecWhenFuncUndef, both of which control integrations with the underlying system.
- If you do not want the user to be able to set environment variables set ast.SyncTablesWithOSEnviron to false.
- If you do not want the user to be able to call binaries from the host system, set ast.ExecWhenFuncUndef to false.
- Create a new VarTable and FuncTable (see ast/var_table.go and ast/func_table.go).
@ -132,7 +132,7 @@ Here are some important tips for integrating an SHS REPL into another codebase.
## Configuration
* Variables exported in the REPL, if of type string or number, will result in a corresponding environment variable.
* One can write arbitrary shs script into `.shsrc` including function and variable declarations
* One can write arbitrary SHS script into `.shsrc` including function and variable declarations
* Particularly useful are the following variables:
- `SH_LOGGING` Sets the log level (from 0 to 3)
- `SHS_STATIC_PROMPT` Sets the prompt
@ -144,7 +144,7 @@ Here are some important tips for integrating an SHS REPL into another codebase.
- if the function does not return a string, its output will be discarded
- afterwards, the repl will print the values in `SHS_STATIC_PROMPT`
Here is an example of a shs configuration file:
Here is an example of a SHS configuration file:
```lisp
(export GOPATH (concat HOME "/go"))
(export GOBIN (concat GOPATH "/bin"))