https://github.com/douira/parenthis-lang
(parenthis) is an esoteric programming language
https://github.com/douira/parenthis-lang
compiler esoteric-language interpreter programming-language
Last synced: 11 months ago
JSON representation
(parenthis) is an esoteric programming language
- Host: GitHub
- URL: https://github.com/douira/parenthis-lang
- Owner: douira
- Created: 2020-08-14T14:53:28.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-08-23T03:15:08.000Z (over 4 years ago)
- Last Synced: 2025-01-27T13:49:07.825Z (about 1 year ago)
- Topics: compiler, esoteric-language, interpreter, programming-language
- Language: JavaScript
- Homepage:
- Size: 194 KB
- Stars: 1
- Watchers: 3
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# (parenthis)
The **(parenthis)** esoteric programming language consists of a very uniform syntax. It was created by me (douira). This project is the interpreter for it.
I've written about it (under the previous name SUL, rename pending) on the Esolang wiki [here](https://esolangs.org/wiki/SUL).
### Version history
- **SUL v1**: Earlier implementation in Processing
- **SUL v2**: Basic implementation in JavaScript in [this KhanAcademy project](https://www.khanacademy.org/computer-programming/sul-v2-an-esoteric-programming-language/4555641989431296). See files in the folder `old`.
- **parenthis v3**: (WIP) Better implementation in TypeScript without processing.js
# Language
See more docs in the (WIP) [wiki](https://github.com/douira/parenthis-lang/wiki/Language-and-API-Documentation).
## Formal Grammar in EBNF
```ebnf
(* a parenthis program consists of a single expression *)
expression = between , ( element | string ) , between ;
(* elements are an identifier and then any number of expressions *)
element = "(" , identifier , { "," , expression } , ")";
(* consists of any number of segments separated by periods *)
identifier = between , identifier segment ,
{ "." , identifier segment } , between ;
(* use lowerCamelCase for function names *)
identifier segment = { a to z | A to Z | 0 to 9 } ;
(* double or single quotes, not listing all possible chars here. \\ is escaped to \, \\" to \\ + (end of string) and \\\" to \".
regex equivalent for double quoted: /'(.*?)(?